DSP2812教程第9课SCI串口模块

上传人:jinli****o2018 文档编号:46570153 上传时间:2018-06-27 格式:PDF 页数:13 大小:380.09KB
返回 下载 相关 举报
DSP2812教程第9课SCI串口模块_第1页
第1页 / 共13页
DSP2812教程第9课SCI串口模块_第2页
第2页 / 共13页
DSP2812教程第9课SCI串口模块_第3页
第3页 / 共13页
DSP2812教程第9课SCI串口模块_第4页
第4页 / 共13页
DSP2812教程第9课SCI串口模块_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《DSP2812教程第9课SCI串口模块》由会员分享,可在线阅读,更多相关《DSP2812教程第9课SCI串口模块(13页珍藏版)》请在金锄头文库上搜索。

1、 Measuring our success is your success ! 1 HELLODSP 版权所有 请勿用于商业用途 违者必究 第 9 课 F2812 的 SCI 模块 作者顾卫钢 我们在使用 2812 开发的时候经常会遇到这样的情况例如做电机控制时需要显示 AD 采样之后得到电机电压、电流、转速等数据当然我们可以使用液晶屏来显示还有一种很好的方法就是将这些数据通过某种协议将它们上传给 PC 机由 PC 机上的软件进行显示监测又例如某些项目中需要 PC 机发送预先设定的指令来控制 2812 中程序的运行方式。那 2812 怎么样才能和 PC 机之间实现数据的传输呢今天我们就和大家

2、来一起学习最为常用的一种方法SCI。 SCISerial Communication Interface 即串行通信接口是一个双线的异步串口即具有接收和发送两根信号线的异步串口一般可以看作是 UART通用异步接收/发送装置 。或许有朋友会问2812 的SCI 只能够和 PC 机上串口进行通信吗答案自然是否定的2812 的 SCI 模块支持 CPU 与采用 NRZnon-return-to-zero 不归零标准格式的异步外围设备之间进行数字通信。如果设计时我们的 SCI 使用的是 RS232 串行接口那么2812 就能和其他使用 RS232 接口的设备进行通信。例如 2812 内部的两个 SCI

3、之间或者 2812 的 SCI 和其他 DSP 的 SCI 之间均能实现通信。 2812 内部具有两个相同的 SCI 模块SCIA 和 SCIB每一个 SCI 模块都各有一个接收器和发送器。SCI的接收器和发送器各具有一个 16 级深度的 FIFOFirst in fist out 先入先出队列它们还都有自己独立的使能位和中断位可以在半双工通信中进行独立的操作或者在全双工通信中同时进行操作。根据信息的传送方向串行通信可以分为单工、半双工和全双工三种其各自的定义如下图所示。 ABABAB单工A只能发送 B只能接收半双工A和B都能接收和发送 但是同一时间只能接收或者是发送全双工在任意时刻A和B都

4、能同时接收或者发送图 1 串行通信的三种方式 1. SCI 模块简介 让我们首先来了解一下 2 8 1 2 的 S C I 模块的特点。由于 S C I A 和 S C I B 是相同的所以如果不做特殊说明本课中我们均以 S C I A 为例进行讲解。S C I A 与 C P U 的接口如图 2 所示。 首先我们从图 2 可以看到S C I 模块具有两个引脚S C I T X D A 和 S C I R X D A 分别实现发送数据和接收数据的功能这两个引脚对应于 G P I O F 模块的第 4 和第 5 位在编程初始化的时候需要将 G P I O F M U X 寄存器的第 4 和第 5

5、 位置为 1 才能使得这两个引脚具有发送和接收的功能否则就是普通的 I / O 引脚。 外部晶振通过 P L L 模块产生了 C P U 的系统时钟 S Y S C L K O U T 然后 S Y S C L K O U T 经过低速预定标器之后输出低速时钟 L S P C L K 供给 S C I 。要保证 S C I 的正常运行系统控制模块下必须使能 S C I 的时钟也就是在系统初始化函数中需要将外设时钟控制寄存器 P C L K C R 的 S C I A E N C L K 位置 1 。 从图 2 我们可以清楚的看到 S C I A 可以产生两个中断S C I R X I N T

6、A 和 S C I T X I N T A 即发送中断和接收中断。 Measuring our success is your success ! 2 HELLODSP 版权所有 请勿用于商业用途 违者必究 SCI寄 存 器GPIO MUX系统控制 模块系统控制 模块SCIAENCLKLSPCLKCPUSYSCLKOUTPIE模块外 设 总 线SCIRXINTASCITXINTASCITXDSCIRXDSYSRS图 2 SCIA 的 CPU 接口 SCI 模块的其他一些特点见下面的表格 序号 SCI 模块的特点 1 具有 4 个错误检测标志极性parity 、溢出overrun 、帧frami

7、ng 、中断break检测。 2 多处理器模式下具有两种唤醒方式空闲线方式和地址位方式。通常使用的时候很少遇到多处 理器模式我们采用的是空闲线方式。 3 通信工作于半双工或者全双工模式。 4 具有双缓冲接收和发送功能接收缓冲寄存器为 SCIRXBUF发送缓冲寄存器为 SCITXBUF。 5 发送和接收可以通过中断方式来实现也可以通过查询方式来实现。 6 具有独立的发送中断使能位和接收中断使能位。 7 SCIA 模块具有 13 个控制寄存器值得注意的是这些寄存器都是 8 位的寄存器当某个寄存 器被访问时数据位于低 8 位高 8 位为 0因此把数据写入高 8 位将是无效的。 2.SCI 模块发送和

8、接收数据的工作原理 SCIRXDRXSHF8RXENA接收数据缓冲 寄存器 SCIRXBUF8RX FIFO_15 RX FIFO_1 RX FIFO_0SCITXDTXSHF8TXENA发送数据缓冲 寄存器 SCITXBUF8TX FIFO_15 TX FIFO_1 TX FIFO_0图中的8表示的是8位数据传输图 3 SCI 模块的工作原理 Measuring our success is your success ! 3 HELLODSP 版权所有 请勿用于商业用途 违者必究 SCI 模块的工作原理如图 3 所示之所以 SCI 能工作于全双工模式是因为它有独立的数据发送器和数据接收器这样

9、能够保证 SCI 既能够同时进行也能够独立进行发送和接收的操作。 SCI 发送数据的过程如下如图 3 右半部分所示在 FIFO 功能使能的情况下首先发送数据缓冲寄存器 SCITXBUF 从 TX FIFO 中获取由 CPU 加载的需要发送的数据然后 SCITXBUF 将数据传输给发送移位寄存器 TXSHF如果 SCI 的发送功能使能TXSHF 则将接收到的数据逐位逐位的移到 SCITXD 引脚上。 SCI 接收数据的过程如下如图 3 的左半部分所示首先接收移位寄存器 RXSHF 逐位逐位的接收来自于 SCIRXD 引脚的数据如果 SCI 的接收功能使能RXSHF 将这些数据传输给接收缓冲寄存器

10、 SCIRXBUFCPU 就能从 SCIRXBUF 读取外部发送来的数据。当然如果 FIFO 功能使能的话SCIRXBUF 会将数据加载到RX FIFO 的队列中CPU 再从 FIFO 的队列读取数据。 3.SCI 数据格式 我们在进行通信的时候一般都会涉及到协议所谓协议就是通信双方预先约定好的数据格式以及数据的具体含义。这就像地下党员做情报工作时一样地下工作人员将一份情报交给了上级上级可以根据事先约定好的规则进行翻译获取情报具体内容。如果情报被敌人截获那也不怕由于敌人不知道情报中每个文字所代表的含义所以对于敌人来说这份情报也是无效的。这种事先约定好的规则我们就把它叫做通信协议。 在 SCI

11、中通信协议体现在 SCI 的数据格式上。通常将 SCI 的数据格式称之为可编程的数据格式原因就是可以通过 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 所

13、示的这些数据格式的寄存器是通信控制寄存器 SCICCR其内容如图 5 所示。使用 SCICCR 进行数据格式编程如表 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.STOP

14、BITS=0; /选择停止位该位为 0 时有 1 个停止位该位为 1 时有 2 个停止位 当然上述这几个语句我们也可以合并成如下的语句 SciaRegs.SCICCR.all=0x13; 4.SCI 通信波特率 前面我们学习了 SCI 在通信时采用的数据格式的问题那么 SCI 是以什么样的速度去发送这些数据的呢这个速度就是由波特率来决定的。所谓的波特率就是指每秒所能发送的位数。2812 的每个 SCI 都具有两个 8 位的波特率寄存器SCIHBAUD 和 SCILBAUD通过编程可以实现达到 64K 不同的速率。波特率的计算公式如下所示 1*8LSPCLKBRRSCIAsynchronousB

15、aud= 1 其中 BRR=波特率选择寄存器中的值从十进制转换成十六进制后高 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则将 LSPCLK 和波特率的数值代入式 1便可得到BRR=243.14由于寄存器都是正整数所以省略掉小数后可以得到 BRR=243。将 243 转Measuring our success is your success ! 5 HELLODSP 版权所有 请勿用于商业用途 违者必究 换成 16 进制是 0xF3因此 SCIHBAUD 的值为 0SCIHBAUD 的值为 0XF3。由于省略了小数将会产生 0.06%的误差。当 LSPCLK 为 37.5M 时

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 经验/事迹

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号