- 本课程为精品课,您可以登录eeworld继续观看:
- (21) -通信系统之SCI
- 登录
- 课程目录
- 课程笔记
接下来我们讲SCI通信模块
SCI是串行的IO端口
支持C2000和外部的串联的异步通讯
异步串行通讯 主要适用于远距离 对速率要求不高的通讯
是性价比比较高的通讯方式
SCI的发送和接收寄存器是双缓冲的寄存器
除了发送移位寄存器 还有缓存器
接收也有一个寄存器和它的接受缓存器
所以它可以避免数据冲突 高效利用CPU
同时 SCI模块的接受和发送寄存器
是相互独立的 端口也是独立的
RXD端口
因此它是一个全双功的接口
随时可以发送和接收数据
我们的C2000的SCI模块还有硬件校验和数据格式的处理
都是端口的硬件来完成
进一步降低软件的开销
SCI模块通讯时的接线非常简单 比如只有两个器件通讯
两根线交叉连接就可以了
如果是总线通讯的话 将TSD RSD挂到总线上即可
我们看看SCI的数据格式
它是一个串行通讯 所以数据最小单位是位
是我们的字符 是一个位一个位往外移的
具体有几个位 数据有效位可以从1到8之间
长度是可以设置的
通过我们的SCICCR寄存器里面的bit0到2之间的
设置通讯数据的长度
那么数据的每个字符的格式 是一个起始位
1到2个停止位
一个校验位 一个地址位或数据位
数据字符和这些起始位 停止位等组合
称为一个数据针
那么很多针组合在一起 叫做一个数据块
如果SCI上有两个以上的串行端口
数据块是以地址针为起始的
那么这个地址针的作用是
根据用户的协议
指定数据的目标端口
起始位是每个针的最开始第一位
是针的开始 我们的SCI采用的是NRZ 不归零的格式
也就是在非活动状态下 SCI的RS和TS两根线上必须保证是高电平
当总线上没有数据接收 或发送时
我们的外设必须保证把这两根线拉到一个高电平
一个无效状态
刚才说了 数据针里面的
控制 包括起始位 控制 包括奇偶位的控制
都是在我们的CCR寄存器里面完成配置的
CCR配置要注意的一点是 必须在SM或者复位的时候
非活动状态下 进行配置
如何保证这个配置
一般这个状态是在程序初始化的时候
我们先通过SCI控制寄存器里面的SWRESET
软件复位控制 将SM位初始化 并且保证
保持复位的状态
在这个过程中 我们可以配置我们的SCI寄存器
当这个SCI配置完后
在SWRESET这个位置上重新写1
让SM重启
完成这么一个配置的过程
然后我们看看SCI的时序
我们主要关注起始位有效状态的检测
结束位的有效状态的检测
起始位状态检测非常简单
关键一点是 我在SCRXD上检测到
下降沿的时候 那我们必须保证后面四个clock一直处在低电平
那这个地方强调说 我对每个位的检测
有8个clock周期来完成
针对数据位的话 我需要把8个周期里面的4 5 6 三个周期
多数投票状态来决定
举个例子 在4 5 6的时候
我发现两个以上的位数检测到
是高电平的话 我的输出位是]高电平
反过来 两个以上的位置检测到低电平
我的输出位是一个低电平的状态
接下来我们将SCI中非常关键的唤醒机制
这地方 多重处理器的意思是
我的SCI总线上挂的不止两个器件
是两个器件以上
三个以上
这时候 多个器件间如何完成通讯
不管总线上有多少个器件
在某个时候 我们只允许两个器件来完成通讯
一个收 一个发
因此 唤醒机制非常关键 在这么多器件中
我如何唤醒两个器件或者我通讯所需的器件
根据我们的唤醒机制不同
我们分为两种 一种是空闲模式
一种的地址模式
我们接下来讲讲两种模式的区别
我们先看空闲模式
空闲的意思是 我的地址针或者每个针之间
状态是空闲的 无效状态的
那么在空闲状态 我们的地址针的标志是通过软件
有意延迟10个周期
第二个是通过TXWAKE寄存器在我发送地址针之前
留11个无效的状态位
在唤醒机制中 最关键的一点是
我如何检测我的地址针
刚才说了 空白模式下是两种
一个是空闲10个 第二个是自动留11个空闲状态
这两个方式的区别是前面这个需要软件来单独配置这个周期
后面是寄存器完成 不需要用户参与
反过来 针对我们的地址模式
它跟空闲模式 最主要的区别
我在每个地址针前 我不需要特意留出每个空闲的状态
我只需要在地址位或状态位的时候
假如把它标为1 代表我前面发送的数据
接受的是地址信息
假如是0 代表1到8位是一个数据信息
不是地址 是数据
所以这个模式和前面的空闲模式
一个区别是我不需要这个地址之前是保持一个无效状态
它配置起来更灵活
假如我的某一个器件 检测到 我的地址
检测对比完发现 这个地址跟本设备的地址吻合的时候
我的器件进入有效状态
会接收发送数据
同时 我的sleep寄存器清零
SCI中还有一个关键的是中断
它的中断源有好几个
最常用的是接收中断 发送中断
还有我们的一些故障保护的中断
比如溢出、错误等待这些
最关键的接受和发送中断
发送中断的话 它产生的原则是
我的发送缓存器里面空了
一种是发送寄存器里面空的
我的缓存器里面是空的
我认为这是一个空闲状态
第二种是发送寄存器里面有数据的
数据跟着缓存器已经发送到发送寄存器里面
缓存器可以接受下个数据时
我认为是发送就绪状态
这两种都可以产生发送中断
接收中断 比如说
产生的一个标准是
接收寄存器里面 我接收的数据
我认为我的接受可以了
我产生一个接收的中断
其他的比如发送中断 异常中断
就根据产生的机制 产生保护等功能
此外 针对其他寄存器的错误
我们提供了标志和中断功能
比方说 RX接收中断检测
中断错误检测 接受异常检测
奇偶状态错误的检测
所有这些都是为了完成数据的保护
完成正常的通讯
最后总结一下
SCI的通讯
它是异步的串行通讯
支持的波特率也是比较多的
比如经过我们的波特计算器
来设置
还有总线的唤醒模式
有空闲和地址模式
数据格式有SCCR寄存器的编程控制1到8位的数据格式
那么然后在我们的C28X系列里面
对我们的SCI有一些增强功能
比如我们有16位的FIFO 在复位的时候是无效的
程序进入后 通过寄存器的配置
可以让FIFO使能
FIFO也就有两个中断
比如接收和发送中断
等等
因此 SCI的通讯是比较复杂
相对来说 大家需要更进一步的信息的话
可以查看我们的试验手册
课程介绍
共计28课时,4小时27分22秒
C2837x入门指南
TI C2000 MCU PWM F2837xD ADC DAC DMA CLA C2837x CMP SDFM CAP QEP c28x
F2837x系列的最新 C2000™ Delfino™ 32 位 F2837xD 微控制器 (MCU),为工业实时控制实现最新创新,并设定了全新性能标准。这些最新 MCU 支持双核 C28x 处理功能与双实时控制加速器(也称为控制律加速器或 CLA),可提供 800 MIPS 浮点性能,从而可帮助设计人员为计算要求严格的控制应用开发低时延系统。此外,设计人员还可通过将多个嵌入式处理器整合在单个 MCU 中以降低复杂性,充分满足高级伺服驱动器、太阳能中央逆变器以及工业不间断电源 (UPS) 等需要实时信号分析的应用需求。
猜你喜欢
换一换
推荐帖子
- C6678 EDMA 搬运有内存保护吗?
- 各位老师好, 我再6678平台下,用edma的CC1做数据搬运。pingset:将数据从一个内存固定源地址src搬到内存ping区域,pongset:将数据从该地址搬到pong区域。ping和pong在msm上。 ping pong搬运相互link。当ping搬运完成之后,edma发出中断,core0对ping区域进行处理,pong搬运完之后,core0处理pong数...
-
bianpang
DSP 与 ARM 处理器
- MSP430: Error connecting to the target: Unknown device
- 使用CCS5.1烧板子自己设计的板子,总是出现这样的情况,但是用另一块板子烧都是正常的,这是什么原因?芯片也换过,但是一直是这种情况,求各位大神给点意见!!!...
-
luoposhusheng
微控制器 MCU
- 关于pwm,一个小问题
- 本帖最后由 基辅之门 于 2014-11-7 21:54 编辑 M1PWM0的基址是PWM1_BASE吗?基址是指发生器吗例如基址是PWM3_BASE?资料里说有4个pwm发生器PWM_GEN_0~3对应PWM0~7 而头文件里只定义有俩基址 #define PWM0_BASE  ...
-
基辅之门
微控制器 MCU
- TMDSSOLARUINVKIT_v100中DC-AC逆变这个是什么电路
- 本帖最后由 idealpursuer 于 2014-11-4 22:07 编辑 图中D33,D2,D3,D4有什么作用,为什么L7和L11要这样接,而不是直接输出共模滤波,谢谢。 ...
-
idealpursuer
微控制器 MCU