SCI串口模块.pdf
《SCI串口模块.pdf》由会员分享,可在线阅读,更多相关《SCI串口模块.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 Measuring our success is your success!1 HELLODSP 版权所有 请勿用于商业用途 违者必究 第 9 课 F2812 的 SCI 模块 作者:顾卫钢 我们在使用 2812 开发的时候,经常会遇到这样的情况,例如做电机控制时需要显示 AD 采样之后得到电机电压、电流、转速等数据,当然,我们可以使用液晶屏来显示,还有一种很好的方法就是将这些数据通过某种协议将它们上传给 PC 机,由 PC 机上的软件进行显示,监测,又例如某些项目中需要 PC 机发送预先设定的指令来控制 2812 中程序的运行方式。那 2812 怎么样才能和 PC 机之间实现数据的传输呢?
2、今天,我们就和大家来一起学习最为常用的一种方法SCI。SCI(Serial Communication Interface),即串行通信接口,是一个双线的异步串口,即具有接收和发送两根信号线的异步串口,一般可以看作是 UART(通用异步接收/发送装置)。或许有朋友会问,2812 的SCI 只能够和 PC 机上串口进行通信吗?答案自然是否定的,2812 的 SCI 模块支持 CPU 与采用 NRZ(non-return-to-zero 不归零)标准格式的异步外围设备之间进行数字通信。如果设计时我们的 SCI 使用的是 RS232 串行接口,那么,2812 就能和其他使用 RS232 接口的设备进
3、行通信。例如 2812 内部的两个 SCI之间,或者 2812 的 SCI 和其他 DSP 的 SCI 之间均能实现通信。2812 内部具有两个相同的 SCI 模块,SCIA 和 SCIB,每一个 SCI 模块都各有一个接收器和发送器。SCI的接收器和发送器各具有一个 16 级深度的 FIFO(First in fist out 先入先出)队列,它们还都有自己独立的使能位和中断位,可以在半双工通信中进行独立的操作,或者在全双工通信中同时进行操作。根据信息的传送方向,串行通信可以分为单工、半双工和全双工三种,其各自的定义如下图所示。ABABAB单工:A只能发送 B只能接收半双工:A和B都能接收和
4、发送,但是同一时间只能接收或者是发送全双工:在任意时刻,A和B都能同时接收或者发送 图 1 串行通信的三种方式 1.SCI 模块简介 让我们首先来了解一下 2812 的 SCI 模块的特点。由于 SCIA 和 SCIB 是相同的,所以如果不做特殊说明,本课中我们均以 SCIA 为例进行讲解。SCIA 与 CPU 的接口如图 2 所示。首先,我们从图 2 可以看到,SCI 模块具有两个引脚,SCITXDA 和 SCIRXDA,分别实现发送数据和接收数据的功能,这两个引脚对应于 GPIOF 模块的第 4 和第 5 位,在编程初始化的时候,需要将 GPIOFMUX 寄存器的第 4 和第 5 位置为
5、1,才能使得这两个引脚具有发送和接收的功能,否则就是普通的 I/O 引脚。外部晶振通过 PLL 模块产生了 CPU 的系统时钟 SYSCLKOUT,然后 SYSCLKOUT 经过低速预定标器之后输出低速时钟 LSPCLK 供给 SCI。要保证 SCI 的正常运行,系统控制模块下必须使能 SCI 的时钟,也就是在系统初始化函数中需要将外设时钟控制寄存器 PCLKCR 的 SCIAENCLK 位置 1。从图 2,我们可以清楚的看到 SCIA 可以产生两个中断,SCIRXINTA 和 SCITXINTA,即发送中断和接收中断。Measuring our success is your success
6、!2 HELLODSP 版权所有 请勿用于商业用途 违者必究 SCI寄存器GPIOMUX系统控制模块系统控制模块SCIAENCLKLSPCLKCPUSYSCLKOUTPIE模块外设总线SCIRXINTASCITXINTASCITXDSCIRXDSYSRS 图 2 SCIA 的 CPU 接口 SCI 模块的其他一些特点见下面的表格:序号 SCI 模块的特点 1 具有 4 个错误检测标志:极性(parity)、溢出(overrun)、帧(framing)、中断(break)检测。2 多处理器模式下具有两种唤醒方式:空闲线方式和地址位方式。通常使用的时候很少遇到多处理器模式,我们采用的是空闲线方式。
7、3 通信工作于半双工或者全双工模式。4 具有双缓冲接收和发送功能,接收缓冲寄存器为 SCIRXBUF,发送缓冲寄存器为 SCITXBUF。5 发送和接收可以通过中断方式来实现,也可以通过查询方式来实现。6 具有独立的发送中断使能位和接收中断使能位。7 SCIA 模块具有 13 个控制寄存器,值得注意的是,这些寄存器都是 8 位的寄存器,当某个寄存器被访问时,数据位于低 8 位,高 8 位为 0,因此,把数据写入高 8 位将是无效的。2.SCI 模块发送和接收数据的工作原理 SCIRXDRXSHF8RXENA接收数据缓冲寄存器SCIRXBUF8RX FIFO_15RX FIFO_1RX FIFO
8、_0SCITXDTXSHF8TXENA发送数据缓冲寄存器SCITXBUF8TX FIFO_15TX FIFO_1TX FIFO_0图中的8表示的是8位数据传输 图 3 SCI 模块的工作原理 Measuring our success is your success!3 HELLODSP 版权所有 请勿用于商业用途 违者必究 SCI 模块的工作原理如图 3 所示,之所以 SCI 能工作于全双工模式,是因为它有独立的数据发送器和数据接收器,这样能够保证 SCI 既能够同时进行,也能够独立进行发送和接收的操作。SCI 发送数据的过程如下:如图 3 右半部分所示,在 FIFO 功能使能的情况下,首先
9、,发送数据缓冲寄存器 SCITXBUF 从 TX FIFO 中获取由 CPU 加载的需要发送的数据,然后 SCITXBUF 将数据传输给发送移位寄存器 TXSHF,如果 SCI 的发送功能使能,TXSHF 则将接收到的数据逐位逐位的移到 SCITXD 引脚上。SCI 接收数据的过程如下:如图 3 的左半部分所示,首先,接收移位寄存器 RXSHF 逐位逐位的接收来自于 SCIRXD 引脚的数据,如果 SCI 的接收功能使能,RXSHF 将这些数据传输给接收缓冲寄存器 SCIRXBUF,CPU 就能从 SCIRXBUF 读取外部发送来的数据。当然,如果 FIFO 功能使能的话,SCIRXBUF 会
10、将数据加载到RX FIFO 的队列中,CPU 再从 FIFO 的队列读取数据。3.SCI 数据格式 我们在进行通信的时候,一般都会涉及到协议,所谓协议就是通信双方预先约定好的数据格式,以及数据的具体含义。这就像地下党员做情报工作时一样,地下工作人员将一份情报交给了上级,上级可以根据事先约定好的规则进行翻译,获取情报具体内容。如果情报被敌人截获那也不怕,由于敌人不知道情报中每个文字所代表的含义,所以,对于敌人来说,这份情报也是无效的。这种事先约定好的规则,我们就把它叫做通信协议。在 SCI 中,通信协议体现在 SCI 的数据格式上。通常将 SCI 的数据格式称之为可编程的数据格式,原因就是可以通
11、过 SCI 的通信控制寄存器 SCICCR 来进行设置,规定通信过程中所使用的数据格式。SCI 使用的是 NRZ 的数据格式,NRZ 数据格式包括了如下表所示的内容:序号 内容 1 1 个起始位 2 18 个数据位 3 1 个奇/偶/非极性位 4 12 个结束位 5 在地址位模式下,有 1 个用于区别数据或者地址的特殊位(仅用于多处理器通信)从上面的表中我们可以看到,真正的数据内容是 18 位,1 个字符的长度。我们通常将带有格式信息的每一个数据字符叫做一帧,在通信中常常是以帧为单位的。前面已经介绍过,SCI 有空闲线模式和地址位模式,而在平常使用的时候,我们一般都是两个处理器之间的通信,例如
12、 2812 和 PC 机或者 2812 和 2812之间通信,这时候,我们更适合使用空闲线模式,而地址位模式一般用于多处理器之间的通信。在空闲线模式下,SCI 发送或者接收一帧的数据格式如图 4 所示,其中 LSB 是数据的最低位,MSB 是数据的最高位。LSB234567MSB起始位结束位奇/偶/无极性 图 4 空闲线模式下 SCI 一帧的数据格式 Measuring our success is your success!4 HELLODSP 版权所有 请勿用于商业用途 违者必究 具体的定义如图 4 所示的这些数据格式的寄存器是通信控制寄存器 SCICCR,其内容如图 5 所示。使用 SC
13、ICCR 进行数据格式编程如表 2 所示。图 5 SCI 通信控制寄存器 SCICCR 使用 SCICCR 进行数据格式编程 SciaRegs.SCICCR.bit.SCICHAR=8;/选择数据长度,为 8 个数据位 SciaRegs.SCICCR.bit.PARITYENA=1;/开启极性功能,值为 0 的时候取消极性功能 SciaRegs.SCICCR.bit.PARITY=0;/在开启极性功能的前提下,该位值为 0 时选择偶极性,值为 1 时选择奇极性 SciaRegs.SCICCR.bit.STOPBITS=0;/选择停止位,该位为 0 时有 1 个停止位,该位为 1 时有 2 个停
14、止位 当然,上述这几个语句,我们也可以合并成如下的语句:SciaRegs.SCICCR.all=0 x13;4.SCI 通信波特率通信波特率 前面我们学习了 SCI 在通信时采用的数据格式的问题,那么 SCI 是以什么样的速度去发送这些数据的呢?这个速度就是由波特率来决定的。所谓的波特率就是指每秒所能发送的位数。2812 的每个 SCI 都具有两个 8 位的波特率寄存器,SCIHBAUD 和 SCILBAUD,通过编程,可以实现达到 64K 不同的速率。波特率的计算公式如下所示:1*8LSPCLKBRRSCIAsynchronousBaud=(1)其中 BRR=波特率选择寄存器中的值,从十进制
15、转换成十六进制后,高 8 位赋值给 SCIHBAUD,低 8 位赋值给 SCILBAUD。值得注意的是,式 1 所示的波特率公式仅仅适用于165535BRR,当 BRR=0 是,波特率如下:16LSPCLKSCIAsynchronousBaud=(2)我们举例来进行说明。例如外部晶振位 30M,经过 PLL 之后 SYSCLKOUT 为 150MHz,然后,当低速预定标器 LOSPCP的值为 2 的时候,SYSCLKOUT 经过低速预定标器之后产生低速外设时钟 LSPCLK 为 37.5MHz,也就是说 SCI 的时钟为 37.5MHz。如果我们需要 SCI 的波特率为 19200,则将 LS
16、PCLK 和波特率的数值代入式 1,便可得到:BRR=243.14,由于寄存器都是正整数,所以省略掉小数后可以得到 BRR=243。将 243 转 Measuring our success is your success!5 HELLODSP 版权所有 请勿用于商业用途 违者必究 换成 16 进制是 0 xF3,因此 SCIHBAUD 的值为 0,SCIHBAUD 的值为 0XF3。由于省略了小数,将会产生 0.06%的误差。当 LSPCLK 为 37.5M 时,对于 SCI 常见的波特率,其寄存器的值如下表所示:理想波特率 BRR(十进制)SCIHBAUD SCILBAUD 精确波特率 误
17、差(%)2400 1952 0 x7A 0 2400 0 4800 976 0 x3D 0 4798-0.04 9600 487 0 x1 0 xE7 9606-0.06 19200 243 0 0 xF3 19211 0.06 38400 121 0 0 x79 38422 0.06 在进行通信的时候,双方都必须以相同的数据格式和波特率进行通信,否则通信会失败。例如 2812和 PC 机上的串口调试软件进行通信时,2812 采用了什么样的数据格式和波特率,那么串口调试软件也需要设定成相同的数据格式和波特率,反之也一样,这是 SCI 通信不成功最简单,然而大家常常会忽略的问题。5.SCI 发送
18、和接收数据的机制 下面让我们一起来了解一下 SCI 模块在发送数据和接收数据时所采用的机制。我们通常使用的有两种方式:一种是查询方式,另一种是中断方式。查询方式,就是程序不断去查询状态标志位,看看 SCI 是不是已经做好了数据发送或者接收的准备。当数据发送时,需要查询的是位于 SCI 控制寄存器 2(SCICTL2)的第 7 为 TXREADY,发送器缓冲寄存器就绪标志。当这个位为 1 的时候,表明发送数据缓冲寄存器 SCITXBUF 已经准备好开始接收并发送下一个数据了。当数据写入 SCITXBUF,TXREADY 自动会清零,如果 TXENA 使能了,发送移位寄存器 TXSHF 就会把SC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SCI 串口 模块
限制150内