- 本课程为精品课,您可以登录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) 等需要实时信号分析的应用需求。
猜你喜欢
换一换
推荐帖子
- 晒WEBENCH设计的过程+时钟设计1
- 初次使用时钟设计 , 对CLOCK还不是很熟悉 , 设想要求四路时钟设计, 来体验, 因为之前有过设计, 知道报告不好出, 打开界面后可以使用ADD增加一行, 设置10,30,55,80MHZ, 再选择绿色按纽, 在出现的界面里可以看的到很多选择, 在右下角, 我们选择第3个 依次再选择所需要的设置, 在这里, 可以修改一些参数 然后可以选择保存项目, 可能是初次尝试时钟...
- accboy 模拟与混合信号
- 求助:我装的dsp builder7.2,scan jtag没有device下拉菜单,怎么回事
- 我装的dsp builder7.2,scan jtag没有device下拉菜单,怎么回事? 我毕设有载波跟踪环设计,各种滤波器,寄存器,发生器,我对ccs完全不会,觉得编程好难;dsp builder是图形化设计,觉得简单一点。 那么dsp builder与ccs到底有何区别?比如说,分别用dsp builder与ccs设计一个正弦信号发生器,二者有何区别? 板子是dspc54系列的,dsp...
- blackboard DSP 与 ARM 处理器
- 如何开始DSP编程[精]
- 如何开始DSP编程 这本书,从安装CCS 软件开始,一步一步教你如何开始DSP编程, 并给出了相应操作的图示,是一本难得的好书 对初学者来说,可以以最快的速度入门。 ...
- zhang_mike2000 DSP 与 ARM 处理器
- msp430学习笔记之uart
- 1 相关知识 MSP430系列,usart模块的波特率值设定是通过以下三个参数决定的:UxBR0,UxBR1,UxMCTL 波特率=BRCLK/N BRCLK:时钟源,可以通过寄存器设定何为时钟源; N:波特率产生的分频因子。N=UxBR1+UxBR0+UxMCTL,其中UxBR1+UxBR0为整数部分,UxMCTL为设定小数部分 。 举个例子:波特率=9600,时钟源=32.768...
- 灞波儿奔 微控制器 MCU