首页 > 应用与设计 > 工业应用 > C2837x入门指南 >

电机驱动

最新课程

热门课程

C2837x入门指南(二十一)—通信系统之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的通讯是比较复杂 相对来说 大家需要更进一步的信息的话 可以查看我们的试验手册

接下来我们讲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的通讯是比较复杂

相对来说 大家需要更进一步的信息的话

可以查看我们的试验手册

视频报错
手机看
扫码用手机观看
收藏本课程

视频简介

C2837x入门指南(二十一)—通信系统之SCI

所属课程:C2837x入门指南 发布时间:2016.07.12 视频集数:28 本节视频时长:00:11:48
C2837x概述;芯片架构; 开发环境;外设寄存器操作;复位和中断;系统初始化;模拟子系统 ADC DAC CMP SDFM;控制类外设PWM CAP QEP。
TI培训小程序