第十三讲 串行通信SCI模块 《手把手教你学DSP——基于TMS320F28335》配套视频资料 南京研旭电气科技有限公司 公司网站:www.njyxdq.com 天猫旗舰店:yanxusmpj.tmall.com 交流邮箱:zqj518@vip.qq.com www.f28335.com 学习论坛: www.armdsp.net
本课程是依照南京研旭电气科技有限公司推出的TMS320F28335至尊板来进行详细讲解的,如果在学习过程中遇到任何疑问欢迎与我们进行联系沟通。
本教程是依照南京研旭电气科技有限公司推出的TMS320F28335至尊板来进行详细讲解的。本书详细地阐述了TMS320F28335 DSP处理器内部各功能模块的硬件结构、工作原理、资源分配、功能特点以及应用等内容,同时每个模块都配了实验教程,方便学生掌握提高。 本书配套资料包括:书中所有实例例程、烧写软件工具、配套PPT、配套视频以及常用的调试工具软件,读者可以在研旭电气提供的交流论坛(www.armdsp,net)相关版块或www.f28335.com 网站免费获取。 本书可作为DSP开发应用的入门级教材,也可作为其他层次DSP开发应用人员的参考手册。
第十三讲 串行通信SCI 1、串行通信基础知识 2、F28335的SCI模块 3、SCI模块的寄存器 4、SCI模块应用
串行通信基础知识 DSP控制器间,DSP控制器与外部设备间交换信息,通信,可采取的通信方式主要两大类1、串行通信 2、并行通信 。 并行通信一般包括多条数据线、多条控制线和状态线,传输速度快,传输线路多,硬件开销大,不适合远距离传输。一般用在系统内部,如XINTF接口或者控制器内部如DMA控制器。 串行通信则在通信线路上既传输数据信息也传输联络控制信息,硬件开销小,传输成本低,但是传输速度慢,且收发双方需要通信协议,可用于远距离通信。串行通信可以分为两大类1、同步通信 2、异步通信 同步通信:发送器和接收器通常使用同一时钟源来同步。方法是在发送器发送数据时同时包含时钟信号,接收器利用该时钟信号进行接收。典型的如I²C、SPI。 异步通信:收发双方的时钟不是同一个时钟,是由双方各自的时钟实现数据的发送和接收。但要求双方使用同一标称频率,允许有一定偏差。典型的如SCI。 串行通信的传输方式有3类 1、单工 2、全双工 3、半双工 单工(Simplex):数据传送是单向的,一端为发送端,另一端为接收端。这种传输方式中,除了地线之外,只要一根数据线就可以了。有线广播就是单工的。 全双工(Full-duplex):数据传送是双向的,且可以同时接收与发送数据。这种传输方式中,除了地线之外,需要两根数据线,站在任何一端的角度看,一根为发送线,另一根为接收线。下文介绍的SCI、SPI都可以工作在全双工方式下。 半双工(Half-duplex):数据传送也是双向的,但是在这种传输方式中,除了地线之外,一般只有一根数据线。任何一个时刻,只能由一方发送数据,另一方接收数据,不能同时收发。I²C的通信传输方式工作在半双工下。
串行通信基础知识 在串行通信协议中还要明确通信的数据格式、通信的速率与通信的奇偶校验方法。 通常通信的数据格式采用NRZ数据格式,即standard non-return-zero mark/space data format,译为:“标准不归零传号/空号数据格式”。“不归零”的最初含义是:用正、负电平表示二进制值,不使用零电平。“mark/space”即“传号/空号”分别是表示两种状态的物理名称,逻辑名称记为“1/0”。典型的如SCI数据格式,如下图所示 通信的速率的单位为波特率(baud rate),即每秒内传送的位数。通常情况下,波特率的单位可以省略。通常使用的波特率有300、600、900、1200、1800、2400、4800、9600、19200、38400。 字符奇偶校验检查(character parity checking)称为垂直冗余检查( vertical redundancy checking,VRC),它是每个字符增加一个额外位使字符中“1”的个数为奇数或偶数。 奇校验:如果字符数据位中“1”的数目是偶数,校验位应为“1”,如果“1”的数目是奇数,校验位应为“0”。 偶校验:如果字符数据位中“1”的数目是偶数,则校验位应为“0”,如果是奇数则为“1”。
第十三讲 串行通信SCI 1、串行通信基础知识 2、F28335的SCI模块 3、SCI模块的寄存器 4、SCI模块应用
F28335的SCI模块 SCI即Serial Communication Interface 串行通信接口,接收和发送有各自独立信号线,但不是同一时钟,所以是进行串行异步通信的接口,一般可以看作是uart(通用异步接收/发送装置),经常会跟RS232接口连接。通常DSP引脚输入/输出使用TTL电平,而TTL电平的“1”和“0”的特征电压分别为2.4V和0.4V,适用于板内数据传输。TTL电平与RS232电平之间要互相转换,这就需要采用串口转换芯片,常用的是MAX232。为了使信号传输得更远,美国电子工业协会EIA(Electronic Industry Association)制订了串行物理接口标准RS-232C。RS-232C采用负逻辑,-3V~-15V为逻辑“1”,+3V~+15V为逻辑“0”。RS-232C最大的传输距离是30m,通信速率一般低于20Kbps。 RS-232接口,简称“串口”,它主要用于连接具有同样接口的设备。下面给出了9芯串行接口的排列位置,相应引脚含义见下表13.1。 引脚号 功能 1 接收线信号检测(载波检测DCD) 6 数据通信设备准备就绪(DSR) 2 接收数据线(RXD) 7 请求发送(RTS) 3 发送数据线(TXD) 8 清除发送 4 数据终端准备就绪(DTR) 9 振铃指示 5 信号地(SG)
F28335的SCI模块
F28335的SCI模块 F28335处理器共提供3个SCI接口,相对TI的C240X系列DSP的SCI接口,功能上有很大的改进,在原有功能基础上增加了通信速率自动检测和FIFO缓冲等新的功能,为了减小串口通信时CPU的开销,F28335的串口支持16级接收和发送FIFO。也可以不使用FIFO缓冲,SCI的接收器和发送器可以使用双级缓冲传送数据,并且SCI接收器和发送器有各自独立的中断和使能位,可以独立地操作实现半双工通信,或者同时操作实现全双工通信。为了保证数据完整,SCI模块对接收到的数据进行间断、极性、超限和帧错误的检测。为了减少软件的负担,SCI采用硬件对通信数据进行极性和数据格式检查。通过对16位的波特率控制寄存器进行编程,可以配置不同的SCI通信速率。SCI与CPU接口如图13.4所示。 SCI模块的特点如下: (1)2个外部引脚:SCITXD为SCI数据发送引脚;SCIRXD为SCI数据接收引脚。两 个引脚为多功能复用引脚,如果不使用可以作为通用数字量I/O。 (2)可编程通信速率,可以设置64K种通信速率。 (3)数据格式: ◇ 1个启动位; ◇ 1~8位可编程数据字长度; ◇ 可选择奇校验、偶校验或无效校验位模式; ◇ 1或2位的停止位。 (4) 4种错误检测标志位:奇偶错误、超越错误、帧错误和间断检测。 (5) 2种唤醒多处理器方式:空闲线唤醒(Idle-line)和地址位唤醒(Address Bit)。 (6) 全双工或者半双工通信模式。 (7) 双缓冲接收和发送功能。 (8)发送和接收可以采用中断和状态查询2种方式。 (9)独立地发送和接收中断使能控制。 (10)NRZ(非归零)通信格式。 (11)13个SCI模块控制寄存器,起始地址为7050H。 (12)自动通信速率检测(相对F140x增强的功能)。 (13)16级发送/接收FIFO(相对F240x增强的功能)。
F28335的SCI模块 SCI采用全双工通信模式的通信连接图如图13.6所示,主要功能单元,具体如下。 (1) 1个发送器(TX)及相关寄存器。 ◇ SCITXBUF:发送数据缓冲寄存器,存放要发送的数据(由CPU装载); ◇ TXSHF寄存器:发送移位寄存器,从SCITXBUF寄存器接收数据,并将数据移位到SCITXD引脚上,每次移1位数据。 (2)1个接收器(RX)及相关寄存器。 ◇ RXSHF寄存器:接收移位寄存器,从SCIRXD引脚移入数据,每次移1位; ◇ SCIRXBUF:接收数据缓冲寄存器,存放CPU要读取的数据,来自远程处理器的数据装入寄存器RXSHF,然后又装入接收数据缓冲寄存器SCIRXBUF和接收仿真缓冲寄存器SCIRXEMU中。 (3)一个可编程的波特率产生器。 (4)数据存储器映射的控制和状态寄存器。
F28335的SCI模块 SCI的数据格式 SCI的发送和接收都采用不归零码格式,具体包括: (1) 1位起始位。 (2) 1~8位数据。 (3) 1个奇/偶校验位(可选择)。 (4) 1位或2位停止位。 (5) 区分数据和地址的附加位(仅在地址位模式存在)。 数据的基本单元称为字符,它有1~8位长。每个字符包含1位启动位、1或2位停止位、可选择的奇偶校验位和地址位。在SCI通信中,带有格式信息的数据字符叫帧、如图13.7所示。 可以使用SCI通信控制寄存器(SCICCR)配置SCI通信采用的数据格式。 SCI异步通信可采用半双工通信方式,每个数据位占用8个SCICLK时钟周期,如图13.8所示。
F28335的SCI模块 接收器在收到一个起始位后开始工作,4个连续SCICLK周期的低电平表示有效的起始位,如图13.8所示。如果没有连续4个SCICLK周期的低电平,则处理器重新寻找另一个起始位。对于SCI数据帧的起始位后面的位,处理器在每位的中间进行3次采样,确定位的值。3次采样点分别在第4、第5和第6个SCICLK周期,3次采样中2次相同的值即为最终接收位的值。 由于接收器使用帧同步,外部发送和接收器不需要使用串行同步时钟,时钟有器件本身提供。 1.SCI的信号接收 满足下列条件时,接收器的信号时序如图13.9所示。 (1)地址位唤醒模式(地址位不出现在空闲模式中)。 (2)每个字符有6位数据。 SCI接收信号的几点说明: (1) 标志位RXENA(SCICTL1,位0)变高,使能接收器接收数据; (2) 数据达到SCIRXD引脚后,检测起始位; (3) 数据从RXSHF寄存器移位到接收缓冲器(SCIRXBUF),产生一个中断申请,标志 位RXRDY(SCIRXST,位6)变高表示已接收一个新字符; (4) 程序读SCIRXBUF寄存器,标志位RXRDY自动被清除; (5) 数据的下一个字节达到SCIRXD引脚时,检测启动位,然后清除; (6) 位RXENA变为低,禁止接收器接收数据。继续向RXSHF转载数据,但不移入到接收缓冲寄存器。
F28335的SCI模块 2. SCI的信号发送 满足下列条件时发送器的信号时序如图13.10所示。 (1) 地址位唤醒模式(地址位不出现在空闲模式中)。 (2)每个字符有3位数据。 SCI发送信号的几点说明: (1)位TXENA(SCICTL1,位1)变高,使能发送器发送数据; (2)写数据到SCITXBUF寄存器,从而发送器不再为空,TXRDY变低; (3)SCI发送数据到移位寄存器(TXSHF)。发送器准备传送第二个字符(TXRDY变高),并发出中断请求(使能中断,位TXINTENA,SCICTL2中的第0位置1); (4)在TXRDY变高后,程序写第二个字符到SCITXBUF寄存器(在第二个字节写入到SCITXUBF后TXRDY又变低); (5)发送完第一个字符,开始将第二字符移位到寄存器TXSHF; (6)位TXENA变低,禁止发送器发送数据,SCI结束当前字符的发送; (7)第二个字符发送完成,发送器变空准备发送下一个字符。
F28335的SCI模块 下面介绍FIFO特征和使用FIFO时SCI的编程。 (1) 复位:在上电复位时,SCI工作在标准SCI模式,禁止FIFO功能。FIFO的寄存器SCIFFTX、SCIFFRX和SCIFFCT都被禁止。 (2) 标准SCI:标准F28335SCI模式,TXINT/RXINT中断作为SCI的中断源。 (3) FIFO使能:通过SCIFFTX寄存器的SCIFFEN位置1,使能FIFO模式。在任何操作状态下SCIRST都可以复位FIFO模式。 (4) 寄存器有效:所有SCI寄存器和SCI FIFO寄存器(SCIFFTX,SCIFFRX和SCIFFCT)有效。 (5) 中断:FIFO模式有两个中断,一个是发送FIFO中断TXINT,另一个是接收FIFO中断RXINT。FIFO接收、接收错误和接收FIFO溢出共用RXINT中断。标准SCI的TXINT将被禁止,该中断将作为SCI发送FIFO中断使用。 (6) 缓冲:发送和接收缓冲器增补了2个16级的FIFO,发送FIFO寄存器是8位宽,接收FIFO寄存器时10位宽。标准SCI的一个字的发送缓冲器作为发送FIFO和移位寄存器间的发送缓冲器。只有移位寄存器的最后一位被移出后,一个字的发送缓冲才从发送FIFO装载。使能FIFO后,经过一个可选择的延迟(SCIFFCT),TXSHF被直接装载而不再使用TXBUF。
F28335的SCI模块 (7) 延迟发送:FIFO中的数据传送到发送移位寄存器的速率是可编程的,可以通过SCIFFCT寄存器的位FFTXDLY(7~0)设置发送数据间的延迟。FFTXTDLY(7~0)确定延迟的SCI波特率时钟周期数,8位寄存器可以定义从0个波特率时钟周期的最小延迟到256个波特率时钟周期的最大延迟。当使用0延迟时,SCI模块的FIFO数据移出时,数据间没有延时,一位紧接一位地从FIFO移出,实现数据的连续发送。当选择256个波特率时钟的延迟时,SCI模块工作在最大延迟模式,FIFO移出的每个数据字之间有256个波特率时钟的延迟。在慢速SCI/UART的通信时,可编程延迟可以减少CPU对SCI通信的开销。 (8) FIFO状态位:发送和接收FIFO 都有状态位TXFFST或RXFFST(位12~0),这些状态位显示当前FIFO内数据的个数。当状态位为0时,发送FIFO复位位TXFIFO和接收复位位RXFIFO会被设置为1,会将FIFO指针复位为0,FIFO重新开始运行。 (9) 可编程的中断级:发送和接收FIFO都能产生CPU中断,只要发送FIFO状态位TXFFST(位12~8)与中断触发优先级TXFFIL(位4~0)相匹配,就产生一个中断触发,从而为SCI的发送和接收提供一个可编程的中断触发逻辑。接收FIFO的默认触发优先级为0x11111,发送FIFO的默认触发优先级0X00000。图13.10和表13.2给出了在FIFO或非FIFO模式下SCI中断的操作和配置。
F28335的SCI模块
F28335的SCI模块 SCI自动波特率检测 大多数SCI模块硬件不支持自动波特率检测。一般情况下嵌入式控制器的SCI时钟有PLL提供,设计的系统工作时会改变PLL复位时的工作状态,这样很难支持自动波特率检测功能。在F28335处理器上,增强功能的SCI模块硬件支持自动波特率检测逻辑。寄存器SCIFFCT位ABD和CDC位控制自动波特率逻辑,使能SCIRST位使自动波特率逻辑工作。增加自动波特率检测功能的SCI通信接口除了能够满足正常通信自动检测系统的通信速率外,还支持采用SCI接口上电引导装载程序,这对于通过上位机采用SCI接口实时更新系统软件非常重要。 当CDD为1时,如果ABD也置位表示自动波特率检测开始工作,就会产生SCI发送FIFO中断(TXINT)。同时在中断服务程序中必须使用软件将CDC位清0,否则如果中断服务程序执行完CDC仍然为1,则以后不会产生中断。具体操作步骤如下。 (1) 将SCIFFCT中的CDC位(位13)置位,清除ABD位(位15),使能SCI的自动波特率检测模式。 (2) 初始化波特率寄存器为1或限制在500Kb/s内。 (3) 允许SCI以期望的波特率从一个主机接收字符“A”或字符“a”。如果第一个字符时“A”或“a”,则说明自动波特率检测硬件已经检测到SCI通信的波特率,然后将ABD位置1. (4) 自动检测硬件将用检测到的波特率的十六进制值刷新波特率寄存器的值,这个刷新逻辑也会产生一个CPU中断。 (5) 通过向SCIFFCT寄存器的ABD CLR位(位13)写入1清除ABD位,响应中断。写0清除CDC位,禁止自动波特率逻辑。 (6) 读到接收缓冲的字符“A”或“a”时,清空缓冲和缓冲状态位。 (7) 当CDC为1时,如果ABD也置位表示自动波特率检测开始工作,就会产生SCI发送FIFO中断(TXINT),同时在中断服务程序中必须使用软件将CDC位清0。
第十三讲 串行通信SCI 1、串行通信基础知识 2、F28335的SCI模块 3、SCI模块的寄存器 4、SCI模块应用
SCI模块的寄存器 结合书籍为大家介绍SCI寄存器部分。
第十三讲 串行通信SCI 1、串行通信基础知识 2、F28335的SCI模块 3、SCI模块的寄存器 4、SCI模块应用
SCI模块应用 结合实例,教你学习SCI应用。
本讲到此结束 感谢大家的收看 学习、使用中如遇任何问题,可与我们联系 嵌嵌论坛:http://www.armdsp.net 研旭旗舰店(天猫):http://yanxusmpj.tmall.com 南京研旭电气科技有限公司 www.njyxdq.com
谢谢