收藏 分销(赏)

freescale第7章.ppt

上传人:pc****0 文档编号:13748716 上传时间:2026-04-09 格式:PPT 页数:26 大小:795.50KB 下载积分:10 金币
下载 相关 举报
freescale第7章.ppt_第1页
第1页 / 共26页
freescale第7章.ppt_第2页
第2页 / 共26页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,2026/4/9 周四,1,第,7,章,SCI,串行通讯接口,第,1,节 串行通信概述,第,2,节,SCI,结构,第,3,节,SCI,寄存器,第,4,节,SCI,实验,2026/4/9 周四,2,SCI Serial Communication Interface,第,7,章,SCI,串行通讯接口,一、什么是,SCI,二、什么是串行通讯,为什么要通讯?,第,1,节 串行通信概述,2026/4/9 周四,3,三、串行通信与并行通信,并行通信:,数据的各位(,bit,)同时进行传送。,优点:传送速度快,缺点:需用传送线多,不适于远距离传送,,串行通信:,数据的各位逐个按顺序传送。,优点:需用传送线少,适于远距离传送。,缺点:传送速度较低。,四、串行通信的传输制式:,2026/4/9 周四,4,单工:,数据只能单方向传送(发送或接收)。,半双工:,数据可以双向传送,但只有一个通信回路,故不能同时发送和接收。,全双工:,数据可以同时双向传送,具有两个独立的通信回路。,五、异步通信与同步通信:,异步通信:,通信双方无统一的时钟脉冲控制。数据以,“,帧,”,(,frame,)为单位传送。,帧格式:,起始位、数据位、奇偶校验位、停止位。,2026/4/9 周四,5,同步通信:,传送双方有统一时钟脉冲协调同步。数据以帧为单位传送。,帧格式:,同步字符、(,1-2,个,,1,个一般用,ASCII,码,SYNC-16H,,,2,个一般用国,际通用码,EB90H,),数据字符、(个数不限,一般用,ASCII,码)、校,验字符(,1-2,个),波特率:,每秒钟传送的二进制代码的位数,单位为,b,S,,即,bps,六、串行通信,协议,(异步通信),起始位:,信号线上无数据传送时为,1,开始传送时发一个,0,信号,即起始位。,数据位:,紧接起始位之后,个数一般为,7,8,位。,奇偶校验位:,紧接数据位之后。一般为,1,位。,奇校验:,数据位与奇偶位中,1,的总个数为奇数。,偶校验:,数据位与奇偶位中,1,的总个数为偶数。,停止位:,一帧数据的结束标志,一般为,“,1”,。,波特率:,通信双方约定一个相同的波特率。,联络(握手)信号:,由数据通道线之外的一些专用信号线提供,2026/4/9 周四,6,第,7,章,SCI,串行通讯接口,第,2,节,SCI,结构,2026/4/9 周四,7,第,7,章,SCI,串行通讯接口,SCI,发送器结构,管脚,移位寄存器,数据缓冲器,控制寄存器,状态寄存器,中断控制逻辑,SCI,接收器结构,先写,SCIBDH,0 x00,SC0ICR1,SCI0CR2,SCI0SR1,SCI0SR2,SCI0DRH,SCI0DRL,第,3,节,SCI,寄存器,波特率设置,SCIBDH=,SCIBDL =;,如果分开则先写,SCIBDH,SCIBD=4000000/16/,9600,;,SCIC1,7,LOOPS,LOOPS=1,时,发送器输出与接收器输入内部连接。,6,SCISWAI,0,在等待模式下,,SCI,时钟继续运行,因而,SCI,可以作为唤醒,CPU,中断的源。,1,当,CPU,处于等待模式时,,SCI,时钟停止。,5,RSRC,接收器源选择,只有,LOOPS,位被设置为,1,,该位才有意义或有效。当,LOOPS=1,时,接收器输入与发送器输出内部连接。,RSRC,的作用是确定此连接是否与,TxD,管脚连接。,0,此时,LOOPS=1,,,RSRC=0,选择内部回送模式,,TxD,管脚不与发送器输出和接收器输入连接。,1,此时,LOOPS=1,,,RSRC=1,为单线,SCI,模式,,TxD,管脚与发送器输出和接收器输入连接。,4,M,9,位或,8,位模式,0,正常,起始位,8,个数据位(首先是,LSB,)停止位。,1,接收器和发送器使用,9,位数据字符。起始位,8,个数据位(首先是,LSB,)第,9,位数据位停止位。,3,WAKE,接收器唤醒方法(一般用在多机处理系统中),0,空闲线唤醒。,1,地址位唤醒。,2,ILT,空闲线类型选择,0,空闲字符位计数在起始位后启动。,1,空闲字符位计数在停止位后启动。,1,PE,奇偶校验使能,使能硬件奇偶校验产生和检查。当奇偶检验使能时,数据字符的,MSB,(第,8,或第,9,数据位)被视为奇偶校验位。,0,无硬件奇偶校验产生和检测。,1,奇偶校验被使能。,0,PT,奇偶校验类型,如果奇偶校验被使能(,PE=1,),该位用于选择偶校验或奇校验。偶校验指的是数据字符中,1,的总数量(包括奇偶校验位)为偶数。奇校验指的是数据字符中,1,的总数量(包括奇偶校验位)为奇数。,0,偶校验。,1,奇校验。,第,3,节,SCI,寄存器,SCIC2,7TIE,发送中断使能(针对于状态位,TDRE,),0,不启动,TDRE,中断(使用查询方式)。,1,启动,TDRE,中断,当,TDRE,标志为,1,时,产生硬件中断请求。,6TCIE,发送完成中断使能(针对于,TC,),0,启动,TC,中断,当,TC,标志为,1,时,进行硬件中断请求;,1,不启动,TC,中断(使用查询方式),5RIE,接收器中断使能(对于,RDRF,),0,不启动,RDRF,中断(使用查询方式);,1,启动,RDRF,中断,当,RDRF,标志为,1,时,产生硬件中断请求。,4ILIE,空闲线中断使能(对于,IDLE,),0,来自,IDLE,的硬件中断被禁止(使用查询方式)。,1,当,IDLE,标志为,1,时,进行硬件中断请求。,3TE,发送器使能:,0,发送器关闭;,1,发送器打开,2RE,接收器使能,当,SCI,接收器关闭时,,RxD,管脚重新成为通用目的端口,I/O,管脚。,0,接收器关闭;,1,接收器打开,1RWU,接收器唤醒控制,可被改写为,1,,用于将,SCI,接收器设置为等待状态,等待选中的唤醒条件满足才工作。唤醒条件由,WAKE,决定。用户设置,RWU,后,唤醒条件满足后,硬件会自动清除,RWU,。,0 SCI,接收器正常 工作;,1SCI,接收器等待唤醒条件才工作。,0SBK,发送中断,向,SBK,写,1,再写,0,,会将中断字符(,10,位或,11,位的,0,)插进正在发送的数据流中。只要,SBK=1,,附加的由,10,位或,11,位的逻辑,0,组成的中断字符就插进了数据流中。根据设置和清除,SBK,的时间长短,第二个中断字符可能也被插进数据流中。,0,正常发送器操作。,1,将中断字符(,10,位或,11,位的,0,)插进正在发送的数据流中。,第,3,节,SCI,寄存器,SCIS1,7,TD,RE,发送数据寄存器空标志,复位,或者当数据从发送数据缓冲器转移到发送移位器时,,TDRE,自动置,1,,为了清除,TDRE,,对,SCIS1,进行读操作,然后写,SCI,数据寄存器(,SCID,)。,0,发送数据寄存器(缓存区)满。,1,发送数据寄存器(缓存区)空。,6,TC,发送完成标志,复位、或者当,TDRE=1,,且没有数据、前导符或中断字符正在被发送时,,TC,被置位。,0,发送器正在工作(发送数据、或中断)。,1,发送器空闲(发送操作结束)。,TC=1,时,通过对,SCIS1,进行读操作,然后完成下列三件事情中的任何一件,可以自动清除,TC,:,1,)写,SCID,,发送新数据;,2,)通过将,TE,写,0,再写,1,,发送一个前导符;,3,)通过向,SCIC2,的,SBK,写,1,,发送一个中断字符。,5RDRF,接收数据寄存器满标志,当一个字符从接收移位器传输至接收数据寄存器(,SCID,)时,,RDRF,变为,1,状态。,RDRF=1,时,为了清除,RDRF,,要读取,SCIS1,然后再读取,SCI,数据寄存器(,SCID,)。,4,IDLE,空闲线标志,在一个活动周期后,当,SCI,接收线在一个全字符周期内成为空闲状态时,,IDLE,被置位。当,ILT=0,时,在起始位后,接收器开始对空闲位的周期个数(即出现了多少个空闲位)进行计数。因此,如果接收字符都为,1,,这些位周期和停止位周期将一直被计数,直到接收到的个数满足了接收器所需的、可以确定这是一个空闲字符的条件。这个条件是:,10,位或是,11,位的“,1”,(是,10,位还是,11,位取决于,M,控制位)。当,ILT=1,时,只有在停止位后,接收器才会启动空闲位周期计数。因此,前一字符最后的停止位和任意逻辑高电平位不会被纳入计数范围。要清除,IDLE,,在,IDLE=1,时,先读取,SCIS1,,再读取,SCI,数据寄存器(,SCID,)。,IDLE,被清除后,只有在一个新字符被接收且,RDRF,被设置后,,IDLE,才可以被再次设置。即使接收线在一个额外周期内保持空闲状态,,IDLE,也仅能被设置一次。,0,无空闲线检测。,1,空闲线被检测。,第,3,节,SCI,寄存器,SCIS1,3OR,接收丢包标志,当一个新的字符准备被转移至接收数据寄存器时,发现先前接收到的字符还没从,SCID,中读走,,OR,被置位。此时新字符(即相关错误信息)将丢失。先读取,SCIS1,,再读取数据寄存器(,SCID,)清除,OR,标志。,0,无丢包。,1,接收丢包(新,SCI,数据丢失)。,2NF,噪声标志,接收器对起始位采样,7,次,而对其它数据位和停止位采样,3,次。如果这些采样不是完全一致,则表示有噪声,,RDRF,被置位时,,NF,也被置位。先读取,SCIS1,,再读取数据寄存器(,SCID,)清除该标志。,0,无噪声被检测到。,1,当前对应的,SCID,数据存在接受噪声,可能不可靠。,1FE,帧错误标志,当接收器在停止位应该出现的地方检测到逻辑,0,时,认为数据帧没对齐,,RDRF,置位时会同时置位,PE,。先读取,SCIS1,,再读取数据寄存器(,SCID,)清除该标志。,0,无帧错误被检测到,但这并不意味着没有帧错误。,1,有帧错误。,0PF,奇偶校验错误标志,当奇偶校验使能(,PE=1,),但接收到的字符中的奇偶校验位与所期望的奇偶校验值不一致时,,PF,被置位。先读取,SCIS1,,再读取数据寄存器(,SCID,)清除该标志。,0,无奇偶校验错误。,1,奇偶校验错误。,第,3,节,SCI,寄存器,SCIS2,2,BRK13,中断字符长度,BRK13,用于选择更长的中断字符长度。帧错误的检测并不受该位状态的影响。,0,中断字符为,10,位周期(如果,M=1,则为,11,位),1,中断字符为,13,位周期(如果,M=1,则为,14,位),0RAF,接收器激活标志,当,SCI,接收器检测到一个有效起始位开始时,,RAF,被置位,并且,当接收器检测到一个空闲线时,,RAF,被自动清除。在命令,MCU,为停止模式前,此状态标志可用于检查是否有一个,SCI,字符正在被接收。,0 SCI,接收器空闲,等待一个起始位。,1 SCI,接收器激活(,RxD,输入不空闲)。,第,3,节,SCI,寄存器,SCIC3,7 R8,接收器的第,9,个数据位,当,SCI,配置为,9,个数据位时(,M=1,),,R8,可被认为是第,9,个接收数据位。应在读,SCID,之前读取,R8,值,因为读取,SCID,操作会启动标志清除过程,标志清除后可能有新数据写入,R8,和,SCID,。,6 T8,发送器的第,9,个数据位,当,SCI,配置为,9,个数据位时(,M=1,),,T8,作为第,9,个发送数据位,应在写,SCID,之前写,T8,(如果,T8,需要写入新值)。,5 TXDIR,单线模式下,TxD,管脚方向,当,SCI,被配置为单线半双工操作(,LOOPS=RSRC=1,)时,该位决定,TxD,管脚的数据方向。,0,单线模式下,TxD,管脚为输入;,1,单线模式下,TxD,管脚为输出。,4TXINV,发送数据倒置,设置此位使得被发送数据输出的极性反转。,3,:,0,SCIS1,中,接收丢包、噪声、帧错误、奇偶校验,出错中断允许设置。,0,中断禁止;,1,中断允许。,第,3,节,SCI,寄存器,void InitSCI(word baud_div),SCIBD=Fbusclk/16/baud_div;/,设波特率,/SCIC1=0 x00;,/end InitSCI,/Freescale,允许的波特率误差对于,8bit,数据传送是,4.5%,,,/,于,9bit,数据传送是,4%,。,void SendChar(char s_char),byte dummy;/,读取,SCIS1,的临时单元,SCIC2=0 x08;/,允许,Tx,dummy=SCIS1;/,清除,TDRE,SCID=s_char;/,清除,TDRE,第二步,while(!SCIS1_TDRE)/feedCOP();,while(!SCIS1_TC)/feedCOP();,SCIC2_TE=0;,/end SendChar,第,4,节,SCI,实验,一些小程序,char RecChar(),byte rec_char;,if(SCIS1_RDRF)/,清除,RDRF,rec_char=SCID;/,清除,RDRF,第二步,SCIC2_RE=1;/enable Rx,while(!SCIS1_RDRF)/feedCOP();,;,rec_char=SCID;/get recieved character,SendChar(rec_char);/echo received character,return rec_char;,/end RecChar,接收字符,第,4,节,SCI,实验,一些小程序,void SendMsg(char msg),byte ix=0;/String pointer,byte dummy;/,读取,SCIS1,byte nxt_char;,SCIC2=0 x08;/enable Tx,dummy=SCIS1;/,清除,TDRE,nxt_char=msgix+;,while(nxt_char!=0 x00),SCID=nxt_char;/,清除,TDRE,第二步,nxt_char=msgix+;,while(!SCIS1_TDRE)/feedCOP();,;,/delay(30);,/end while(SCI1D,while(!SCIS1_TC)/feedCOP();,;,SCIC2_TE=0;,/end SendMsg,发送字符数组,第,4,节,SCI,实验,一些小程序,实验要求:根据,3,个基本函数,与超级终端构建用户通讯界面。,void SendChar(char s_char),;,char RecChar(),;,void SendMsg(char msg),开机显示,Welcome to the MC9S08QG8 SCI Application,Select Menu:,1:LED On-Off one time,2:LED On-Off five times,3:LED On-Off always,4:LED Freeze,number to execute:,根据选择的数字,执行相应的功能,,可以使用,RTI,。,第,4,节,SCI,实验,实验步骤:,1,新建一个,C,工程;,2,在中断允许之前,增加初始化代码,同时声明全局变量,LedOnOffCnt,PTBDD=0 xFF;,SOPT1=0 x03;/stop COP,Enable RST,SCIBD=4000000/16/,9600,;,SRTISC=0 x16;/,允许,RTI,中断,周期,512ms,LedOnOffCnt=0;,3,在,for,死循环之前添加显示界面与菜单,SendMsg(f Welcome to the MC9S08QG8 SCI Applicationrn);,SendMsg(Select Menu:rn);,SendMsg(1:LED On-Off one timern);,SendMsg(2:LED On-Off five timesrn);,SendMsg(3:LED On-Off alwaysrn);,SendMsg(4:LED Freezern);,SendMsg(number to execute:);,第,4,节,SCI,实验,实验步骤:,4,在,for,死循环里面添加读取串口输入的,switch case,结构,switch(RecChar(),case 0 x31:LedOnOffCnt=2;/,亮灭,1,次,SendMsg(rnnumber to execute:);break;,case 0 x32:LedOnOffCnt=10;/,亮灭,5,次,SendMsg(rnnumber to execute:);break;,case 0 x33:LedOnOffCnt=20;/,一直亮灭,SendMsg(rnnumber to execute:);break;,case 0 x34:LedOnOffCnt=0;/,停止,SendMsg(rnnumber to execute:);break;,default:SendMsg(Invalid selection);,SendMsg(rnnumber to execute:);break;,/end switch,第,4,节,SCI,实验,实验步骤:,5,最后添加,RTI,中断服务子程序,根据,LedOnOffCnt的数值,决定亮灭次数。,interrupt,23,void,RTI_ISR(),if(LedOnOffCnt!=0),/freeze when cnt=0,PTBD=0 xff;,/change LED status,if(LedOnOffCnt=10),/if not always,LedOnOffCnt-;,SRTISC=0 x56;/清除标志,第,4,节,SCI,实验,实验步骤:,6,在主程序,之前,添加,SCI,的三个基本函数,/*发送字节,void SendChar(char s_char),byte dummy;/读取SCIS1的临时单元,SCIC2=0 x08;/允许Tx,dummy=SCIS1;/清除TDRE,SCID=s_char;/清除TDRE第二步,while(!SCIS1_TDRE),/feedCOP();,;,while(!SCIS1_TC),/feedCOP();,;,SCIC2_TE=0;,/end SendChar,第,4,节,SCI,实验,实验步骤:,6,在主程序,之前,添加,SCI,的三个基本函数,/*接收字节,char RecChar(),byte rec_char;,if(SCIS1_RDRF)/清除RDRF,rec_char=SCID;/清除RDRF第二步,SCIC2_RE=1;/enable Rx,while(!SCIS1_RDRF)/feedCOP();,;,rec_char=SCID;/get recieved character,SendChar(rec_char);/echo received character,return SCID;,/end RecChar,第,4,节,SCI,实验,实验步骤:,6,在主程序,之前,添加,SCI,的三个基本函数,/*发送字符串,void SendMsg(char msg),byte ix=0;,/String pointer,byte dummy;,/读取SCIS1,byte nxt_char;,SCIC2=0 x08;,/enable Tx,dummy=SCIS1;,/清除TDRE,nxt_char=msgix+;,while(nxt_char!=0 x00),SCID=nxt_char;,/清除TDRE第二步,nxt_char=msgix+;,while(!SCIS1_TDRE),/feedCOP();,;/delay(30);,/end while(SCI1D,while(!SCIS1_TC),/feedCOP();,;,SCIC2_TE=0;,/end SendMsg,第,4,节,SCI,实验,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服