DSP—2812、28335串行通信接口SCI
2812的SCI模块支持CPU与采用NRZ(non-return-to-zero 不归零)标准格式的异步外围设备之间进行数字通信。如果设计时我们的SCI使用的是RS232串行接口,那么,2812就能和其他使用RS232接口的设备进行通信。例如2812内部的两个SCI之间,或者2812的SCI和其他DSP的SCI之间均能实现通信。
2812内部具有两个相同的SCI模块,SCIA和SCIB,每一个SCI模块都各有一个接收器和发送器。SCI的接收器和发送器各具有一个16级深度的FIFO(First in fist out 先入先出)队列,它们还都有自己独立的使能位和中断位,可以在半双工通信中进行独立的操作,或者在全双工通信中同时进行操作。
一. 2812-SCI模块
SCI模块具有两个引脚,SCITXDA和SCIRXDA,分别实现发送数据和接收数据的功能,这两个引脚对应于GPIOF模块的第4和第5位,在编程初始化的时候,需要将GPIOFMUX寄存器的第4和第5位置为1,才能使得这两个引脚具有发送和接收的功能。SCIA可以产生两个中断,SCIRXINTA和SCITXINTA,即发送中断和接收中断。
二. SCI模块的特点
1 -- 具有4个错误检测标志:极性(parity)、溢出(overrun)、帧(framing)、中断(break)检测。
2 -- 多处理器模式下具有两种唤醒方式:空闲线方式和地址位方式。通常使用的时候很少遇到多处理器模式,我们采用的是空闲线方式。
3 -- 通信工作于半双工或者全双工模式。
4 -- 具有双缓冲接收和发送功能,接收缓冲寄存器为SCIRXBUF,发送缓冲寄存器为SCITXBUF。
5 -- 发送和接收可以通过中断方式来实现,也可以通过查询方式来实现。
6 -- 具有独立的发送中断使能位和接收中断使能位。
7 -- SCIA模块具有13个控制寄存器,值得注意的是,这些寄存器都是8位的寄存器,当某个寄存器被访问时,数据位于低8位,高8位为0,因此,把数据写入高8位将是无效的。
三. SCI模块发送和接收数据的工作原理
SCI有独立的数据发送器和数据接收器,这样能够保证SCI既能够同时进行,也能够独立进行发送和接收的操作。
SCI发送数据的过程如下:如图右半部分所示,在FIFO功能使能的情况下,首先,发送数据缓冲寄存器SCITXBUF从TX FIFO中获取由CPU加载的需要发送的数据,然后SCITXBUF将数据传输给发送移位寄存器TXSHF,如果SCI的发送功能使能,TXSHF则将接收到的数据逐位逐位的移到SCITXD引脚上。
SCI接收数据的过程如下:如图的左半部分所示,首先,接收移位寄存器RXSHF逐位逐位的接收来自于SCIRXD引脚的数据,如果SCI的接收功能使能,RXSHF将这些数据传输给接收缓冲寄存器SCIRXBUF,CPU就能从SCIRXBUF读取外部发送来的数据。当然,如果FIFO功能使能的话,SCIRXBUF会将数据加载到RX FIFO的队列中,CPU再从FIFO的队列读取数据
四. SCI数据格式
在进行通信的时候,一般都会涉及到协议,所谓协议就是通信双方预先约定好的数据格式,以及数据的具体含义。这种事先约定好的规则,我们就把它叫做通信协议。
在SCI中,通信协议体现在SCI的数据格式上。通常将SCI的数据格式称之为可编程的数据格式,原因就是可以通过SCI的通信控制寄存器SCICCR来进行设置,规定通信过程中所使用的数据格式。SCI使用的是NRZ的数据格式。
NRZ数据格式
1 -- 1个起始位
2 -- 1—8个数据位
3 -- 1个奇/偶/非极性位
4 -- 1—2个结束位
5 -- 在地址位模式下,有1个用于区别数据或者地址的特殊位(仅用于多处理器通信)
真正的数据内容是1—8位,1个字符的长度。我们通常将带有格式信息的每一个数据字符叫做一帧,在通信中常常是以帧为单位的。SCI有空闲线模式和地址位模式,而在平常使用的时候,我们一般都是两个处理器之间的通信,例如2812和PC机或者2812和2812之间通信,这时候,更适合使用空闲线模式,而地址位模式一般用于多处理器之间的通信。在空闲线模式下,SCI发送或者接收一帧的数据格式如图示,其中LSB是数据的最低位,MSB是数据的最高位。
空闲线模式下SCI一帧的数据格式---具体的定义这些数据格式的寄存器是通信控制寄存器SCICCR
五. SCI通信波特率设置
所谓的波特率就是指每秒所能发送的位数。2812的每个SCI都具有两个8位的波特率寄存器,SCIHBAUD和SCILBAUD,通过编程,可以实现达到64K不同的速率。
波特率的计算公式 : ( 1 ≤ BRR ≤65535 )
( BRR=0 )
BRR=波特率选择寄存器中的值,从十进制转换成十六进制后,高8位赋值给SCIHBAUD,低8位赋值给SCILBAUD
LSPCLK=37.5M时,SCI常见的波特率
在进行通信的时候,双方都必须以相同的数据格式和波特率进行通信,否则通信会失败。例如2812和PC机上的串口调试软件进行通信时,2812采用了什么样的数据格式和波特率,那么串口调试软件也需要设定成相同的数据格式和波特率,反之也一样。
六. SCI发送和接收数据的机制
通常使用的有两种方式:一种是查询方式,另一种是中断方式。
查询方式:就是程序不断去查询状态标志位,看看SCI是不是已经做好了数据发送或者接收的准备。当数据发送时,需要查询的是位于SCI控制寄存器2(SCICTL2)的第7为TXREADY,发送器缓冲寄存器就绪标志。当这个位为1的时候,表明发送数据缓冲寄存器SCITXBUF已经准备好开始接收并发送下一个数据了。当数据写入SCITXBUF,TXREADY自动会清零,如果TXENA使能了,发送移位寄存器TXSHF就会把SCITXBUF里面的数据发送出去。当数据接收时,需要查询的是SCI接收状态寄存器(SCIRXST)中的RXRDY,接收器就绪标志。当从SCIRXBUF寄存器中已经准备好一个字符的数据,等待CPU去读时,RXRDY位就会置1。当数据被CPU从SCIRXBUF读出后,或者系统复位,都可以使RXRDY清0。
中断方式:如果需要使用中断,必须使能外设自己的中断、PIE中断和CPU中断。SCIA的发送和接收中断分别位于PIE模块第9组的第1和第2位,同时对应于CPU中断的INT9。当前面所述的TXRDY也是个中断标志位,当该位置1时,就会产生发送中断事件,如果各级中断都已经使能,则会响应SCI的发送中断函数。当接收中断标志位RXRDY置1时,就会产生接收中断标志。如果各级中断已经使能,则会响应SCI的接收中断。值得提出来的是,我们在讲中断这一章内容的时候讲过,外设中断的标志位一定要手动复位,在这里SCI是个例外,原因如下:当发送器缓冲寄存器SCITXBUF做好准备发送数据时,TXRDY置1,但是当CPU将数据写入SCITXBUF的时候,TXRDY自动会清0。而当接收器缓冲寄存器已经准备好数据等待CPU去读取时,RXRDY置1,当CPU将数据从SCIRXBUF读出时,RXRDY也会自动清0。这样也就是说发送和接收这两个中断标志位都是可以自动清零的,所以无需手动复位。这是和其他外设中断不一样的地方,注意
查询函数位于主函数的for循环内,这样才能不断的去查询TXRDY和RXRDY的状态,但是很明显程序运行的效率比较低。但是查询方式较中断方式而言,比较简单。因此,可以建议使用如下的组合,数据接收采用中断方式,而数据发送采用查询方式。
七. 多处理器通信
多处理器通信,顾名思义,就是多个处理器之间实现数据通信。一个简单的多处理器通信示意图如图6所示。在图中A、B、C、D之间都可以实现通信,实现表示处理器A和处理器B、处理器C、处理器D之间的通信。处理器A在同一时刻,只能和B、C、D之中的一个实现数据传输。当处理器A需要给B、C、D中的某一个处理器发送数据时,A-B,A-C,A-D这3条通路上都会出现相同的数据,如何确保这些数据被正确的处理器接收呢?
如果我们给A、B、C、D事先分配好地址,然后A发送出去的信息里含有地址信息,B或者C或者D,在接收到这个数据信息的时候,先进行地址的核对,如果地址不符合,则不予响应。如果地址符合,则立即读取数据。这就是多处理器通信的基本原理。
根据地址信息识别方法的不同,多处理器通信方式分为空闲线模式和地址位模式。
地址位多处理器通信格式
地址位多处理器通信 --- 当处理器A发出一串数据时,我们将其叫做数据块,由一个一个的帧构成。帧就是带有格式信息的字符数据。从图可以看到,某一个数据块中的第一帧是地址信息,第二帧是数据信息,然后留有一些空余空间之后,又有一个数据块,第一帧也是地址信息,后面是数据信息。我们可以看到,第一帧地址信息后面的一个位是1,而第2帧数据信息后面的一个位是0。我们把这一位称之为地址位,用于表示这个帧的数据时地址信息还是数据信息。像这样,在通信格式中加入地址位来判断信息是数据还是地址的方式叫做多处理器通信的地址位方式。
空闲线方式多处理器通信方式
空闲线方式多处理器通信 --- 块与块之间有一段比较长的空闲时间,这段时间要明显长于快内帧与帧之间的空闲时间。如果某个帧之后有一段10个位或者更长的空闲时间,那就表明新的数据块开始了。在某一个数据块中,第一帧代表地址信息,后面的帧为数据信息。也就是说,地址信息还是数据信息是通过帧与帧之间的空闲间隔来判断的。当帧与帧之间的空闲间隔超过10个位的时候,就表示新的数据块开始,而且其第一帧为地址信息。
空闲线模式中数据格式里没有额外的地址位,在处理10个字节以上的数据块时比地址位模式更为有效,被应用于典型的非多处理器SCI通信场合。而地址位模式由于有专门的位来进行识别地址信息,所以数据块之间不需要空闲时间等待,所以这种模式在处理一些小的数据块的时候更为有效,当然,我们也得看到,当传输数据的速度比较快,而程序执行速度不够快时,很容易中间会产生10位以上的空闲,这样其优势就更加不明显了
DSP—2812、28335串行通信接口SCI相关推荐
- DSP TMF320F2803x 串行通信接口SCI
一.概述 SCI 是两线异步串行端口,通常称为 UART. SCI 模块支持 CPU 与其他使用标准非归零(NRZ)格式的异步外围设备之间的数字通信. SCI 接收器和发送器均具有 4 级深度 FIF ...
- 串行通信接口SCI图解
结合DSP的SCI章节,详细讲解SCI通信原理. 参考资料: TMS320F28xx 技术参考手册:Serial Communications Interface (SCI) SCI模块总览 说明: ...
- DSP电机控制串行通信系统电路设计_电动机控制电路图讲解
电路图简介: 分析了数字信号处理芯片TMS320LF2407A DSP的串行外设接口SPI,及串行通信接口SCI模块.在电机控制实验系统中,给出了由这2个模块构成的串行通信应用实例.重点讲述了相关的串 ...
- tms320lf240x 的串行通信接口
首先需要注意,串行通信模块的寄存器是8位的. 一.串行通信接口的物理结构 1.两个IO引脚 SCIRXD SCI接收数据引脚 SCITXD SCI发送数据引脚 2.一个16位的可编程的波特 ...
- 串行通信(SCI模块)
目录 一. 串口通信基础知识 1.数据的传输方式 2.数据的通信方式 3.串行通信接口 4.奇偶校验 二.AW60串行通信 1.串行通信接口概述 2.八大寄存器 (1)波特率寄存器 (2)数据寄存器( ...
- Simulink嵌入式自动代码DSP F28335(2)——SCI通信
Simulink嵌入式自动代码DSP F28335(2)--SCI通信 简述 1.文件模型建立 1.1 自动代码文件 1.2 上位机文件Host 2.环境配置 2.1 Simulink配置 2.2 电 ...
- 【ALB学习笔记】基于事件触发方式的串行通信接口数据接收案例
基于事件触发方式的串行通信接口数据接收案例 广东职业技术学院 欧浩源 1.案例背景 之前写过一篇<基于多线程方式的串行通信接口数据接收案例>的博文,讨论了采用轮询方式接收串口数据的情况. ...
- rs232 距离_串行通信接口之一RS232接口
RS232接口是1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调器厂家及计算机终端生产厂家共同制定的用于串行通迅的标准.它的命名是"数据终端设备(DTE)和数据通讯设备(DCE) ...
- FlashPro2000.C2000.TDS510.TI编程 器支持大部分TI芯片读写2812.28335等
FlashPro2000.C2000.TDS510.TI编程 器支持大部分TI芯片读写2812.28335等
最新文章
- Ubuntu下使用Anaconda安装opencv 解决无法读取视频
- 自动增益控制AGC的simulink仿真
- linux与安卓系统目录,android系统架构及源码目录结构
- PHP框架和springboot区别,Spring和SpringBoot的区别
- 高仿真的类-ApplicationContext
- MySql DATE_FORMAT函数用法
- Bootstrap 模态框插件Modal 的选项
- Linux I2C核心、总线与设备驱动
- /dev/tty和/dev/console
- mysql数据库集群 主主复制 原理_MySql搭建集群 之 主主复制(双主代从)MYSQL数据库...
- python中使用动量交易策略
- 详解站长之家之站长工具四大新功能
- gps面积测量仪手机版下载安装_手机gps面积测量仪
- 怎么设置微信公众号免打扰
- java实现排列组合运算
- 数据可视化(三)基于 Graphviz 实现程序化绘图
- 自制jlink-ob
- C++ 面向对象 - 类的多态性与虚函数
- 如何远程连接另外一台电脑
- 虚拟服务器安装管理工具,easypanel虚拟主机管理面板v1.9.2安装版-虚拟主机管理软件...
热门文章
- 2015070306 - EffactiveJava笔记 - 第55条 谨慎地进行优化(2)
- 非常不错的css滑动门效果网页选项卡代码
- illustrator下载_使用Illustrator和Photoshop创建复仇者联盟文字效果
- ubuntu 下查看caj文件
- 【云原生系列】第三讲:Knative 之 Serving
- DDR,DDR2,DDR3区别
- 低代码和无代码开发的4个安全问题
- 菜鸟教程mysql创建表_MySQL 创建数据库 | 菜鸟教程
- for单次循环参数对比-以ode45求一元二阶微分方程为例
- OpenKruise原理介绍和安装