第12章SCI原理及应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SCIRXD
SCIRXD
接收器移位寄存器 RXSHF 8 接收数据缓冲寄存器 SCIRXBUF RX FIFO_0
RX FIFO_15
RX FIFO_15
SCI 器件 #1
SCI 器件 #2
2个外部引脚:SCITXD数据发送引脚; SCIRXD数据接收引脚: 2种工作模式:全双工、半双工 数据格式: 一个启动位; 1~8位可编程数据字长度; 可选择奇校验、偶校验或无校验位模式; 1或2位的停止位。 波特率:可编程达到64K不同的速率 4种错误检测标志位:奇偶错误、超时错误、帧错误和间断检测。 双缓冲接收和发送模式。 发送和接收可以采用中断和状态查询2种方式。 13个SCI模块控制寄存器,起始地址为7050H。 16级发送/接受 FIFO(发送8bit、接受16bit) 自动波特率检测硬件逻辑 2个唤醒多处理器模式:空闲线唤醒、地址位唤醒。
7
STOP BITS
6
EVEN/ODD PARITY
5
4
3
2
SCI CHAR2
1
SCI CHAR1
0
SCI CHAR0
PARITY LOOP BACK ADDR/IDLE ENABLE ENABLE MODE
0 = 1 个停止位 1 = 2 个停止位 0=奇 1=偶
0 = 禁止 1 = 使能
0 = 空闲模式 1 = 地址模式 0 = Disabled 1 = Enabled
允许一个处理器在同一个串行线上有效的向其他处理器发
送数据块。
2种多处理器通信方式:地址线空闲;地址位。 操作顺序
◦ 设置 SLEEP = 1, 当地址被检测的时候处理器才能被中 断,软件清零; ◦ 所有的传输都是以地址帧开始; ◦ 接收到的地址帧临时唤醒所有BUS上的处理器; ◦ 处理器比较收到的SCI地址与本身的SCI地址(匹配) ◦ 只有当地址匹配的时候处理器才开始接受数据。
SCI的接收和发送数据都采用非归零数据格式,具体包括: 一个启动位; 1~8位数据; 1个可选择奇、偶校验位; 1或2位的停止位。 区分数据和地址的附加位(仅在地址位模式存在)。
数据的基本单元称为字符,它有1—8位长。每个字符包含:1位启动位,1或2位 停止位,可选择的奇偶校验位和地址位。在SCI通信中,带有格式信息的数据字 符叫一帧,如图所示。
SCI采用全双工通信模式的主要功能单元,具体包括以下功能单元。
一个发送器(TX)及相关寄存器。 SCITXBUF:发送数据缓冲寄存器.存放要发送的数据(由CPU装载); TXSHF寄存器:发送移位寄存器,从SCITXBUF寄存器接收数据,并 将数据移位到SCITXD引脚上,每次移一位数据。 一个接收器(RX)及相关寄存器。 RXSHF寄存器:接收移位寄存器,从SCIRXD引脚移人数据,每次移 一位; SCIRXBUF:接收数据缓冲寄存器,存放CPU要读取的数据。来自远 程处理器的数据装入寄存器RXSHF,然后又装入接收数据缓冲寄存器 SCIRXBUF和接收仿真缓冲寄存器SCIXEMU中。 一个可编程的波特率产生器。 数据存储器映射的控制和状态寄存器。 SCII接口的接收和发送通道可以独立工作,也可以同时工作。
0x007050 0x007051 0x007052 0x007053 0x007054 0x007055 0x007056 0x007057 0x007059 0x00705A 0x00705B 0x00705C 0x00705F
SCICCR SCICTL1 SCIHBAUD SCILBAUD SCICTL2 SCIRXST SCIRXEMU SCIRXBUF SCITXBUF SCIFFTX SCIFFRX SCIFFCT SCIPRI
1
TXENA
0
RXENA
0 = receiver disabled 1 = receiver enabled 0 = transmitter disabled 1 = transmitter enabled 0 = sleep mode disabled 1 = sleep mode enabled 发送器唤醒模式选择 1 = 根据 SCICCR.3确定的模式唤醒 0 = no wakeup mode Write 0 = Reset SCI Write 1 = release from Reset 0 = Receive Error Interrupt disabled 1 = Receive Error Interrupt enabled
TX FIFO_0
全双工
TX FIFO_0
TX FIFO_15 发送数据缓冲寄存器 SCITXBUF 8 发送器移位寄存器 TXSHF SCITXD SCITXD
TX FIFO_15 发送数据缓冲寄存器 SCITXBUF 8 发送器移位寄存器 TXSHF
接收器移位寄存器 RXSHF 8 接收数据缓冲寄存器 SCIRXBUF RX FIFO_0
第十二章
SCI接口及其应用
串行通信接口(SCI)是采用双线通信的异步串行通信 接口,即通常所说的UART。为减少串口通信时CPU的开 销,F2812的串口支持16级接收和发送FIFO。SCI模块采 用标准非归0(NRZ)数据格式,可以与CPU或其他通信数 据格式兼容的异步外设进行数字通信。当不使用FIFO 时.SCI接收器和发送器采用双级缓冲传送数据.SCI接 收器和发送器有自己的独立使能和中断位,可以独立地操 作,在全双工模式下也可以同时操作。 为保证数据完整,SCI模块对接收到的数据进行间断、 极性、超限和帧错误检测。通过对16位的波特率控制寄存 器进行编程,配置不同的SCI通信速率。
空闲周期<10 帧内块
SCIRXD/ SCITXD
Last Data
SP
ST
Addr
SP ST
Data
SP ST
Last Data
SP
ST
Addr
SP
地址帧 第一个数据帧 跟随10bit或 的空闲周期 更多位空闲周期后
=10;>10
=10;>10 的空闲周期
(1)空闲线模式操作步骤
12.4.2 SCI 寄存器 Address Register
LSPCLK (BRR + 1) x 8
,
BRR = 1 to 65535
SCI baud rate =Fra Baidu bibliotek
LSPCLK 16 , BRR = 0
波特率选择寄存器 (SCIHBAUD) – 0x007052
7 BAUD15 (MSB) 6 BAUD14 5 BAUD13 4 BAUD12 3 BAUD11 2 BAUD10 1 BAUD9 0 BAUD8
Addr
1 SP
空闲周期 无特别限制
块中首个帧 是地址位 地址位=1
第一个数据帧
在停止位前无额外 的空闲位
帧内块的空闲块 在SCIRXD 变高10个位(或更多)之后, 接收器在下降沿之后被唤 醒 2种发送快启动信号 前一数据块的最后一帧的发送与下一数据块的地址帧的发送之 间时间延长,能产生一段10bit或更长的空闲时间 设置TXWAKE(SCICTL1.3)=1,产生11bit的空闲时间
Name SCI-A 通信控制寄存器 SCI-A 控制寄存器1 SCI-A 波特率寄存器,高位 SCI-A 波特率寄存器,低位 SCI-A 控制寄存器2 SCI-A 接受状态寄存器 SCI-A 接受仿真数据寄存器 SCI-A 接受数据寄存器 SCI-A 发送数据寄存器 SCI-A FIFO 发送寄存器 SCI-A FIFO 接受寄存器 SCI-A FIFO 控制寄存器 SCI-A 极性控制 寄存器
NRZ (nonreturn to zero) format
Start LSB 2 3 4 5 6 7 MSB Addr/ Parity Stop 1 Stop 2 Data
只在地址模式种有效
可以使用SCICCR寄存器配置SCI通信采用的数据格式, 下表为寄存器的功能。
SCI 异步通信采用半双工或全双工通信方式。SCI的数 据帧包括1个起始位、1~8位的数据位、1个可选的奇偶 校验位和1或2个停止位。如图,每个数据位占用8个 SCICLK时钟周期。
1:将SCIFFCT中的CDC位(位13)置位,清除ABD位(位15),位能SCI 的自动波特率检测模式。 2:初始化波特率寄存器为1或限制在500Kb/s。 3:允许SCI以期望的波特率从一个主机接收字符“A”或字符“a”。 如果第一个字符是“A”或“a”,则说明自动波特率检测硬件已经检 测到SCI通信的波特率,然后将ABD位置1。 4:自动检测硬件将用检测到的波特率的十六进制值刷新波特率寄存 器的值,这个刷新逻辑器也会产生一个CPU中断。 5:通过向SCIFFCT寄存器的ABD CLR位(位13)写入1,清除ADB位, 响应中断。写0,清除CDC位.禁止自动波特率逻辑。 6:读到接收缓冲为字符“A”或“a”,清空缓冲和缓冲状态位。 7:当CDC为1时,如果ABD也置位表示自动波特率检测开始工作, 就会产生SCI发送FIFO中断(TXINT),同时在中断服务程序中必须使 用软件将CDC位清0。
而在TMS320F2812处理器上,增强功能的SCI模块硬件支
当CDC为1时,如果ABD也置位,表示自动波特率检测开
始工作,就会产生SCI发送FIFO中断(TXINT),同时在中 断服务程序中必须使用软件将CDC位清零,否则,如果 中断服务程序执行完CDC仍然为1,则以后不会产生中断。 具体操作步骤如下。
所有帧都包含一个额外的地址位,判决地址/数据 当地址位被检测到的时候唤醒 只要在SCITXBUF写入地址前置位TXWAKE=1,自动设置帧内数据 /地址的设定
Block of Frames
SCIRXD/ SCITXD
Last Data 0
SP
ST
Addr
1 SP ST
Data
0 SP ST Last Data 0 SP ST
多数表决
SCICLK (内部l) SCIRXD
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
1
2
起始位
检测到下降沿
数据的LSB
Note: 8 SCICLK/每个数据位
12.3.1
SCI的16级FIFO缓冲
大多数SCI模块硬件不支持自动波特率检测。一般情况下,
嵌入式控制器的SCI时钟由PLL提供,系统工作后往往会 改变PLL复位时的工作状态,这样很难支持自动波特率检 测功能。 持自动波特率检测逻辑。寄存器SCIFFCT位ABD和CDC 位控制自动波特率逻辑,使能SCIRST位使自动波特率逻 辑工作。
C28x串口通信支持状态查询和中断两种方式进行操作,在
状态查询方式下主要通过检测发送寄存器的状态标志是否 清零来判断发送器的工作状态。
15 - 8
reserved
7
6
TX
5-2
reserved
1
0
TXRDY EMPTY
RX/BK TX INT ENAINT ENA
SCI RX/BK INT ENA 0 = Disable RXRDY/BRKDT interrupt 1 = Enable RXRDY/BRKDT interrupt SCI TX EMPTY 0 = TXBUF或移位寄存器已经装载数据 1 = 发送缓冲或移位寄存器位空 SCI TX READY 0 = SCITXBUF is full 1 = SCITXBUF is empty
数据长度s = (binary + 1) e.g. 110b 表示7位数据
[SCI-B Communications Control Register (SCICCR) – 0x007750]
7
reserved
6
RX ERR INT ENA
5
SW RESET
4
reserved
3
TXWAKE
2
SLEEP
Baud-Select LSbyte Register (SCILBAUD) – 0x007053
7 BAUD7 6 BAUD6 5 BAUD5 4 BAUD4 3 BAUD3 2 BAUD2 1 BAUD1 0 BAUD0 (LSB)
[SCI-B Baud-Select MSbyte Register (SCIHBAUD) – 0x007752] [SCI-B Baud-Select LSbyte Register (SCILBAUD) – 0x007753]