第7章 串行通信接口
本章内容:
SCI模块概述
SCI模块的结构
SCI的寄存器
SCI应用实例
串行外设接口SPI
增强型CAN总线eCAN
多通道缓冲串行口McBSP
28x DSP的通信接口包括异步串行通信接口(SCI)、
串行外设接口(SPI)、控制器局域网络(CAN)接口、多通
道缓冲串口(McBSP)、芯片间总线(I2C)接口等。
山东大学控制学院 张东亮
SCI模块概述
28x DSP的SCI(Serial Communication
Interface) 串行通信接口模块是一个标准的异步串
行口(UART)。可以和RS232/485设备接口。
可以半双工或全双工操作。
可以通过波特率选择寄存器设置波特率。
数据格式:一个起始位、1~8位数据位、可选
择奇/偶/无校验位、一个或两个停止位。
10/23/2022 2山东大学控制学院 张东亮
SCI-UART (2 modules aboard)
Two wake up multiprocessor
modes idle-line and address bit
Half or full duplex operation
16-level transmit / receive FIFO
buffer
Auto-baud-detect Hardware Logic
SCITXD
SCIRXD
System
Control Block
SCIAENCLK
P
er
ip
he
ra
l B
us
SCITXINT
SCIRXINT
SCI
R
eg
is
te
rs
Low Speed
Prescaler
LSPCLK
CPU
SYSCLKOUT
Interrupt
Handling
Module
GPIO
MUX
SCI/CPU
Interface Communication Peripherals
Communication Peripherals
SCI (UART)
10/23/2022 3山东大学控制学院 张东亮
SCI模块与CPU接口框图
10/23/2022 4山东大学控制学院 张东亮
SCI模块的
结构框图
SCI模块的结构
10/23/2022 5山东大学控制学院 张东亮
串行通信接口SCI的结构:
发送器(TX)及其寄存器
接收器(RX)及其寄存器
可编程波特率发生器
控制和状态寄存器
1. 串行通信接口的信号
10/23/2022 6山东大学控制学院 张东亮
2. 多处理器和异步通信模式
3. 串行通信接口可编程数据格式
4. SCI多处理器通信
串行通信接口SCI有两个多处理器协议: 空闲线多处
理器模式和地址位多处理器模式。
数据的基本单位为字符,它的长度是1~8位。数据的
每个字符包括一个起始位、一个或者两个停止位、一个可
选的奇偶校验位和一个地址位。
多处理器通信格式允许一个处理器在同一串行线上与
其他的处理器进行有效的数据块传输。在一个串行线上,
在同一时刻只允许存在一个发送器。
10/23/2022 7山东大学控制学院 张东亮
5. 空闲线多处理器模式
空闲线多处理器模式的数据格式
数据块与数据块之间通过较长的空闲时间分开,而且这
个空闲时间比数据块内部帧与帧之间的空闲时间长得多。空
闲线协议通过在某一帧之后使用10位或更多的空闲时间来指
示一个新数据块的开始。
10/23/2022 8山东大学控制学院 张东亮
6. 地址位多处理器模式
地址位多处理器模式的数据格式
在该模式中,帧信息的最后一个数据位后紧跟着一个称
之为地址位的附加位。在数据块中,第一个帧的地址位设为
1,其他帧的地址位都要设成0。
10/23/2022 9山东大学控制学院 张东亮
7. SCI通信格式
SCI异步通信格式
每一帧都由一个起始位、1至8个数据位、一个可选的奇
偶校验位和1~2个停止位组成。每个数据位有8个SCICLK周
期。处理器通过对每个位的中间3次采样值来确定该位的值。
这些采样分别出现在第4个、第5个和第6个时钟周期,而且
根据多数表决(3取2)原则确定该位的值。
10/23/2022 10山东大学控制学院 张东亮
通信模式中SCIRX信号时序图
通信模式中SCITX信号时序图
10/23/2022 11山东大学控制学院 张东亮
8. 串行通信接口中断
SCI接收器和发送器都能产生中断。SCICTL2寄存器中包
含有一个标志位(TXRDY),它用于指示当前中断的状态,同时
SCIRXST寄存器也包含两个中断标志位(RXRDY和BRKDT)和
一个RX ERROR中断标志(由FE、OE和PE等条件进行逻辑或
产生)。发送器和接收器分别拥有各自的中断使能位。
SCI接收器和发送器都有各自的中断向量。中断申请既可
设置为高优先级也可以设置为低优先级,这由SCI模块向PIE
控制器送出的优先级标志位决定。当RX和TX中断都分配在同
一个优先级时,为了减小发生接收溢出的概率,接收器中断
总是比发送器中断的优先级高。
10/23/2022 12山东大学控制学院 张东亮
9. SCI波特率计算
SCI模块的波特率(1≤BRR≤65535 )
波特率选择寄存器(SCIHBAUD, SCILBAUD)的值BRR
BRR=0 时
10/23/2022 13山东大学控制学院 张东亮
SCI的寄存器
• SCI通信控制寄存器: SCICCR
• SCI控制寄存器1: SCICTL1
• 波特率选择寄存器: SCIHBAUD, SCILBAUD
• SCI控制寄存器2: SCICTL2
• SCI接收状态寄存器: SCIRXST
• SCI接收数据缓冲寄存器: SCIRXBUF
• SCI发送数据缓冲寄存器: SCITXBUF
• SCI优先级控制寄存器: SCIPRI
10/23/2022 14山东大学控制学院 张东亮
SCI通信控制寄存器( SCICCR)
SCI通信控制寄存器(SCI Communication Control Register,
SCICCR)定义了字符格式、协议和通信模式。
位7 STOP BITS: 设置SCI停止位的个数 。1/0:2/1个停止位。
位6 EVEN/ODD PARITY:SCI奇偶校验选择位。 1:偶校验。
位5 PARITY ENABLE:SCI奇偶校验使能位。 1:使能。
位4 LOOP BACK ENA:自测模式使能位。 1:使能。
位3 ADDR/IDLE MODE:SCI多处理器模式选择位。 1:选择地址位模
式。 0:选择空闲线模式。
位2~0 SCICHAR2~0:字符长度选择位。
10/23/2022 15山东大学控制学院 张东亮
字符的长度选择
10/23/2022 16山东大学控制学院 张东亮
SCI控制寄存器1(SCICTL1)
SCI控制寄存器1(SCI Control Register 1, SCICTL1)控制接收/
发送的使能,TXWAKE和SLEEP功能,以及SCI软件重启动。
位6 RX ERR INT ENA:SCI接收错误中断使能位。1:使能
位5 SW RESET:SCI软件复位位(低电平有效)。
位3 TXWAKE:SCI发送器唤醒方法选择位。
位2 SLEEP:SCI休眠位。1: 休眠模式。检测地址字节。
位1 TXENA:SCI发送使能位。 1:使能发送。
位0 RXENA:SCI接收使能位 。1:使能接收。
10/23/2022 17山东大学控制学院 张东亮
波特率选择寄存器( SCIHBAUD, SCILBAUD)
SCI模块的波特率按下式计算(1≤BRR≤65535)
16位波特率选择寄存器中的值BRR为
如果BRR=0, 则
包括波特率选择高字节寄存器SCIHBAUD和低字节寄存
器SCILBAUD。二者内确定了SCI的波特率。
10/23/2022 18山东大学控制学院 张东亮
SCI控制寄存器2(SCI Control Register 2, SCICTL2)
位7 TXRDY:发送缓冲寄存器准备就绪标志位。1:准备接收数据。
位6 TXEMPTY:发送器空标志位。
位1 RX/BK INT ENA:接收缓冲器/间断中断使能位。1:使能。
位0 TX INT ENA:发送缓冲寄存器(SCITXBUF)中断使能位。
10/23/2022 19山东大学控制学院 张东亮
SCI接收状态寄存器: SCIRXST
SCI接收状态寄存器(SCI Receiver Status Register,
SCIRXST)包含了7位接收器的状态标志(其中两个可以产生
中断请求)。
位7 RX ERROR:SCI接收器错误标志位。
位6 RXRDY:SCI接收器准备就绪标志位。
位5 BRKDT:SCI间断检测标志位。
位4 FE:SCI帧错误(Frame Error)标志位。
位3 OE:SCI溢出错误标志位。
位2 PE:SCI奇/偶校验错误标志位。
位l RXWAKE:SCI接收器唤醒检测标志位。
10/23/2022 20山东大学控制学院 张东亮
SCI接收数据缓冲寄存器(SCIRXEMU,SCIRXBUF)
接收数据缓冲寄存器(SCIRXEMU,SCIRXBUF)用于接收
数据,将数据从寄存器RXSHF转移到SCIRXEMU和
SCIRXBUF中。
仿真数据缓冲器寄存器SCIRXEMU主要是由仿真器
(EMU)使用。
10/23/2022 21山东大学控制学院 张东亮
SCI发送数据缓冲寄存器(SCITXBUF)
SCI优先级控制寄存器(SCI Priority Control Register, SCIPRI)
位4~3 SCI SOFT和SCI FREE:当一个仿真悬挂事件产生
时,这两位决定其后如何操作。
00 : 一旦仿真悬挂,立即停止。
10:一旦仿真悬挂,在完成当前的接收/发送操作后停止。
x1:SCI操作不受仿真挂起影响。
10/23/2022 22山东大学控制学院 张东亮
SCI应用实例
例,DSP通过RS-232与PC机串行通信。包括硬件接口电路与
通信软件。
PC机采用串口调试工具软件,将PC机键盘的输入发送给
DSP,DSP收到PC机发来的数据后,回送同一数据给PC机,并
在PC机屏幕上显示出来。
DSP通过MAX3232电平转换电路与PC机串行通信
10/23/2022 23山东大学控制学院 张东亮
//采用查询方式编写的DSP通信程序。 SCIA将接收到的数据字节后回送
#include ""
unsigned int RecieveChar;
void Scia_init( ) //SCIA初始化程序
{
EALLOW;
= 0x0030; // 设置GPIOF4,5为通信端口
EDIS;
= 0x0000; // 禁止接收和发送中断
= 0x00E7; // 波特率=9600
= 0x0001;
= 0x0007; // 1个停止位,禁止校验,8位字符
// 禁止自测试,异步空闲线协议
= 0x0023; // 脱离复位状态,使能接收发送
}
10/23/2022 24山东大学控制学院 张东亮
void main(void)
{
InitSysCtrl(); // 系统初始化
DINT; // 禁止和清除所有的CPU中断
IER = 0x0000;
IFR = 0x0000;
Scia_init(); // SCIA初始化
while (1)
{
while( != 1){ }
// XRDY=1表示接收到数据
RecieveChar=;
= RecieveChar+1;
// 接收到的字符RecieveChar送回
while( == 0){}
while( == 0){}
} }10/23/2022 25山东大学控制学院 张东亮
//采用中断方式编写的DSP通信程序。
#include "“
interrupt void scirxinta_isr(void); //SCIA串行接收中断服务程序
unsigned int RecieveChar;
void Scia_init( ) //SCIA初始化程序,同查询方式
{
EALLOW;
= 0x0030; // 设置GPIOF4,5为通信端口
…
}
10/23/2022 26山东大学控制学院 张东亮
void main(void)
{
InitSysCtrl(); // 系统初始化
DINT; //禁止和清除所有的CPU中断
IER = 0x0000;
IFR = 0x0000;
Scia_init(); // SCIA初始化
InitPieCtrl(); //PIE初始化
InitPieVectTable(); //中断向量表初始化
EALLOW;
=&scirxinta_isr; //SCIA中断向量
EDIS;
=1; //使能SCIRXINTA中断
IER|=M_INT9;
EINT;
ERTM; //开放全局实时调试中断DBGM
while (1) {;} }
10/23/2022 27山东大学控制学院 张东亮
interrupt void scirxinta_isr(void) //SCIA串行接收中断服务程序
{
EINT; //允许中断嵌套
RX=;
RecieveChar=;
= RecieveChar; //接收到的字符RecieveChar送回
while( ==0) { }
=PIEACK_GROUP9;
}
10/23/2022 28山东大学控制学院 张东亮
/*另例。2812A板:使用直连的串口通信电缆; 启动串口调试助手.exe;
PC机发送一个“.”为结束标志。波特率为9600 bit/s。数据格式为l位
起始位,8位数据位、一个停止位,无奇偶校验位。查询方式 */
#include "“ //头文件
void scia_loopback_init(void); //函数声明
void scia_fifo_init(void);
void scia_xmit(int a);
void error(int);
void wait(int nWait);
interrupt void scia_rx_isr(void);
interrupt void scia_tx_isr(void);
Uint16 LoopCount; //定义全局变量
Uint16 ErrorCount;
char cString[17]={ "Hello PC!,Over|"
},cReceive,cBuffer[17],cAnswer[16]={"Oh,you say"};
10/23/2022 29山东大学控制学院 张东亮
void main(void)
{
char ReceivedChar;
int i,k=0,nLen,bReceive=0;
InitSysCtrl(); //初始化PLL、WD和时钟
EALLOW;
=0x0030; //选择GPIOF为SCI-A引脚
EDIS;
DINT; //禁止中断
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable(); //初始化PIE向量表
EnableInterrupts(); //使能CPU和PIE中断
10/23/2022 30山东大学控制学院 张东亮
LoopCount = 0;
ErrorCount = 0;
scia_fifo_init(); //初始化SCI FIFO
scia_loopback_init(); //初始化 SCI回送
for ( i=0;i<16;i++ )
{
scia_xmit(cString[i]); //向PC发送"Hello PC!,Over|"
while( !=0) { }
}
for(;;)
10/23/2022 31山东大学控制学院 张东亮
k=0; bReceive=0;
while(1)
{
while( ==0) { }
// 如果接受寄存器不为0则跳出
ReceivedChar = ;
cBuffer[k]=ReceivedChar;
if ( ReceivedChar=='.')
{
cBuffer[k+1]='\0';
nLen=k+1;
bReceive=1;
break;
}
k++; k%=16;
} }
}
10/23/2022 32山东大学控制学院 张东亮
{ if ( bReceive==1 )
{for ( i=0;i<10;i++ )
{
scia_xmit(cAnswer[i]);
while( !=0) { }
}
scia_xmit('\"');
for ( i=0;i<nLen;i++ )
{
scia_xmit(cBuffer[i]);
while( !=0) { }
}
scia_xmit('\"');
wait(1024);
for ( i=9;i<16;i++ )
{ scia_xmit(cString[i]);
while( !=0) { }
}
}
10/23/2022 33山东大学控制学院 张东亮
void error(int ErrorFlag)
{
ErrorCount++;
}
// Test 1,SCIA DLB, 8-bit word, baud rate 0x000F, default, 1 STOP bit, no parity
void scia_loopback_init()
{
// Note: Clocks were turned on to the SCIA peripheral
// in the InitSysCtrl() function
=0x0007; // 1 stop bit, No loopback ,No parity,8 char bits,
// async mode, idle-line protocol
=0x0003; // enable TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
=0x0003;
=1;
=1;
=0x0001;
10/23/2022 34山东大学控制学院 张东亮
=0x00e7; //波特率 9600bps
=0; // disable loop back
=0x0023; // Relinquish SCI from Reset
}
//
void scia_xmit(int a) //由SCI发送一个字符a
{
=a;
}
//
void scia_fifo_init() //初始化SCI FIFO
{ =0xE040;
=0x204f;
=0x0;
}
void wait(int nWait)
{ int i,j,k=0;
for ( i=0;i<nWait;i++ )
for ( j=0;j<64;j++ ) k++;}
10/23/2022 35山东大学控制学院 张东亮
串行外设接口SPI
• 串行外设接口的结构与工作原理
• SPI引脚功能的选择
• SPI的多机通信
• SPI应用
SPI是一种串行总线的外设接口,它只需3根引脚线
(发送,接收与时钟)就可以与外部设备相连。 SPI为同
步通信接口,两台通信设备在同一个时钟下工作。
采用SPI接口的芯片如A/D、D/A、移位寄存器、显
示驱动器、日历时钟、I/O、E2PROM、语音电路等越来
越多, 传输速度高达几十Mbps。例如MAX5121为带SPI
接口的12位D/A转换器芯片。
10/23/2022 36山东大学控制学院 张东亮
串行外设接口(SPI)模块框图(从模式 )
10/23/2022 37山东大学控制学院 张东亮
SPI 主从连接
10/23/2022 38山东大学控制学院 张东亮
SPI相关寄存器
•SPI配置控制寄存器: SPICCR
•SPI控制寄存器: SPICTL
•SPI状态寄存器: SPISTS
•SPI波特率寄存器: SPIBRR
•SPI接收缓冲寄存器: SPIRXBUF
•SPI发送缓冲寄存器: SPITXBUF
•SPI 串行数据寄存器: SPIDAT
•SPI优先级控制寄存器: SPIPRI
10/23/2022 39山东大学控制学院 张东亮
增强型CAN总线模块eCAN
CAN(控制器局域网Controller Area Network) 总线最初
是德国BOSH公司为实现汽车内部测量与执行部件之间的数
据通信而设计的现场总线(Field Bus),它是一种多主机局
部网络系统。它支持分布式控制和实时控制串行通信网络,
带有CAN网卡的PC主机及其带有片内CAN控制器的硬件模块
可以很方便地连接到同一CAN总线上。
• 结构与工作原理
• eCAN模块的引脚功能的选择
•邮箱、控制寄存器
• eCAN的应用
10/23/2022 40山东大学控制学院 张东亮
Communications Ports
Mailbox RAM
(512 bytes)
32-Message
Mailbox
Message eController
Enhanced eCAN Controller 32
Data
Address
Controls
32
32
32
Memory
Management
Unit
CPU Interface,
Receive Control
Unit
Timer
Management
Unit
eCAN Control
Registers
eCAN Protocol Kernel
Communication
Buffers*
-V CAN Transceiver
CAN Bus
* The communication
buffers are transparent
to the user and are not
accessible by user
code
On-Chip CAN Controller (eCAN)
Industrial Networking
compliant
32 Mailboxes
32 Local receive masks
32 Interrupt masks
Low-power mode
Programmable wake-up on bus
activity
Automatic reply to a remote
message request
Time-stamping of messages
10/23/2022 41山东大学控制学院 张东亮
CAN总线的主要特性
• 能以多主方式工作。
• 能以点对点、一点对多点及全局广播等方式传送和接收数据。
• 网络上的节点可分成不同的优先级,以满足不同的实时要求。
• CAN总线采用短帧结构,每帧字节数最多为8个,可满足通常工业
领域中控制命令、工作状态及测试数据的要求。
• 采用不归零(NRZ)编码/解码方式。
• 采用循环冗余码校验(CRC)、帧检测、信号出错检测、总线监控、
位填充等5种错误监测和纠错措施,从而达到很高的可靠性。
• 使用简单方便。
• 采用独特的位仲裁技术,具有很高的实时性。
• 传输速率可达1Mbps, 传输距离可达40m。速率5kbps时,距离可达
10km。
• 配置灵活,系统可扩充性好。增删节点不会对系统造成大的影响。
• 可采用廉价的双绞线作通讯介质,接口简单,安装方便。
10/23/2022 42山东大学控制学院 张东亮
CAN信息包格式
一个有效的CAN数据帧由帧起始、仲裁场、控制场、数据场、校验场、
应答场和帧结束等7种位场构成。Field:场/域/字段
标准格式数据帧包括
1)帧起始SOF (Start of Frame)。 包含一个显性位,用于硬同步。
2)仲裁场 (Arbitration Filed) 。包含 11个报文标识位 ID和一个
RTR(Remote Transmission Request 远程发送请求) 位。
3)控制场(Control Field)。包括2位备用位和4位数据长度位DLC。
4)数据场(Data Field)。
5)循环冗余校验场(CRC Field)。包括15位CRC序列和1位界定符。
6)应答场(ACK Field)。包含应答间隙和应答界定符个1位,应答间隙为
隐性位。
7)帧结束EOF (End of Frame)。包括7个隐性位。
10/23/2022 43山东大学控制学院 张东亮
C28x DSP CAN控制器
• CAN模块是完全的CAN控制 器。全面兼容 协议。
• CAN模块是一个16位的外设,对它的访问分成控制/状态寄存
器的访问和邮箱的RAM访问。
• 有6个邮箱(MBOX0~5),其长度为0~8个字节。它们是48×16
的RAM区,CPU或CAN可按16位读或写。每个邮箱为8×16位
的RAM,邮箱0、1只用作接收,邮箱4、5只用作发送,而邮
箱2、3可用作接收或发送。
• 对邮箱0、1和2、3有局域接收屏蔽寄存器。
• 可编程的位定时器。中断配置可编程。
• 可编程的CAN总线唤醒功能。自动恢复远程请求。
• 当发送时出错或仲裁时丢失数据,CAN控制器有自动重发送
功能。
• 总线错误诊断功能。
• 具有自测试模式和网络模式。
10/23/2022 44山东大学控制学院 张东亮
CAN驱动器接口电路
10/23/2022 45山东大学控制学院 张东亮
多通道缓冲串行口McBSP
多通道缓冲串行口(Multichannel Buffered
Serial Port,McBSP)是连接DSP和其他McBSP
兼容器件的串行接口。McBSP具有较强的串行
通信功能。
10/23/2022 46山东大学控制学院 张东亮
McBSP的主要特点
(1) 全双工通信方式。
(2) 双倍与三倍缓冲的传送接收。
(3) 对接收和传送有独立的时钟和帧。
(4) 128个通道用于接收传送。
(5) 多通道选择模块允许和终止每个通道的传输。
(6) 用两个16级,32位的FIFO来代替DMA。
(7) 支持A-bis。
(8) 接口直接连接工业标准的多媒体数字信号编解码器,A/D,D/A
和模拟芯片。
(9) 产生外部时钟信号和帧的同步信号。
(10) 采样率发生器可对内部采样和帧的同步信号控制编程。
(11) 内部时钟和帧可编程。
(12) 帧同步和数字钟的奇偶可编程。
(13) 支持SPI设备。
10/23/2022 47山东大学控制学院 张东亮
(14) 支持部分T1/E1,直接与以下设备接口:
① T1/E1帧调节器。
② 适用于ST_BUS的设备(包括MVIP帧、帧、SCSA帧)。
③ IOM-2兼容设备。
④ AC97兼容设备。
⑤ IIS兼容设备。
⑥ SPI设备。
(15) 多种数据可供选择:8、12、16、20、24和32位。
(16) 支持首先发送/接收高8位或低8位。
(17) 多种数据位长度选择:8、12、16、20、24和32位。
(18) 发送和接收数据可以选择首先发送LSB或MSB。
10/23/2022 48山东大学控制学院 张东亮
Communications Ports
Full-duplex communication
16-level, 32-bit transmit/receive
FIFOs
8, 12, 16, 20, 24, and 32-bit data
8-bit data, option of LSB or MSB
transmitted first
128 channels for reception and
transmission
Direct interface to SPI & IIS devices
Multi Channel
Selection
Logic
DR
DXTransmit
Channel
Registers
Receive
Channel
Registers
Interrupt &
Events
Interrupt Select
Logic
32-bit
Read
FIFO
Mode
Select
XMIT/Receive
FIFO Control
Regs
P
er
ip
he
ra
l B
us
FIFO Interface McBSP Module
McBSP
2812/2810 On-Chip McBSP
Enables Flexible Communication
32-bit
Write
FIFO
10/23/2022 49山东大学控制学院 张东亮
思考题与习题
1. C28x DSP的串行通信接口有哪些特点?
2. 简述SCI发送和接收数据的过程。
3. 异步串行通信的数据格式有哪些?如何设置?
4. 如何设置异步串行通信的波特率?
5. SCI的寄存器有哪些?如何使用?
6. 如何设计DSP与PC机串行通信的硬件电路与软件?
10/23/2022 50山东大学控制学院 张东亮