在我以前在学习、开发MCU的时候,从最初用液晶进行数据显示,到后来一块MCU有多个串口时,在调试的时候基本都是用串口进行数据交互;MS320F28335的串口在哪啊?熟悉的UART呢?经过网络搜索,终于知道,TI的串行通信模块叫SCI(Serial Communications Interface)复习一下MCU的通信方式:
并行通信:
特点:速度快、传输线多、不能远距离传输,常用于系统内部DMA控制器或者XINTF接口。
串行通信:
特点:传输线少、速度较慢、需要收发双方有指定的通信协议,可远距离传输。
通常串行通信分为两大类:
(1)同步通信:
发送接收双方通常需要同一时钟源来进行同步,比如i2c、spi这些传输方式都包含一根时钟线
(2)异步通信:
收发双方的不需要一个时钟进行同步,但是要有同一个标称频率,比如波特率;
串行通信,又有三种工作方式:
(1)单工:数据传输是单向的。
(2)半双工:数据传输是双向的,但是在任意时刻,只能由一方发送数据、另一方接收数据,不能同时收发数据;
(3)全双工:数据传输是双向的,可以同时接收或者发送数据;
回到F28335的SCI,把它看做UART,加上一个232的电平转换芯片就可以了。让MCU工作的基本操作就是读写相关寄存器,F28335的SCI一共有三个:现在以其中SCIa为例,记录一下它的寄存器描述:F28335的SCI在基础的UART的功能上,增加了通信速率自动检测和FIFO缓冲等功能,并且接收和发送各自有独立的中断和使能位。
主要寄存器:
(1)SCICCR:通信控制寄存器,主要配置SCI通信模式、数据格式
(2)SCICTL1:控制寄存器1,控制接收、发送使能,TXWAKE和SLEEP功能,和SCI的软件复位(SW RESET位写0可以初始化部分寄存器)
(3)SCICTL2:控制寄存器2,控制启用接收就绪、中断检测和传输就绪中断以及传输就绪和空标志
(4)SCIHBAUD、SCILBAUD:波特率寄存器,两个8位寄存器数据合成一个16位数据,计算公式:
SCI_PRD = (LSPCLK_FREQ/(SCI_FREQ*8))-1;
SCI_FREQ = 115200;
LSPCLK_FREQ = CPU_FREQ/4;
CPU_FREQ = 150E6;
SCI模块的时钟频率属于低速时钟
SCIFFTX、SCIFFRX:SCI的FIFO发送、接收寄存器,主要是对FIFO中断的一个设置,
SCIFFTX寄存器的低五位是发送FIFO的深度设置,TXFFIL4——0(可读可写),
当FIFO的状态位TXFFST4——0(只读)的值小于或者等于TXFFIL4——0的时候,发送FIFO将触发中断。接收FIFO相似。
SCIFFCT:SCI的FIFO控制寄存器,可以控制自动波特率检测,FIFO发送延时。