TMS320F28335内部有三个SCI模块,SCIA、SCIB、SCIC。 每一个SCI模块都有一个接收器和发送器,SCI的接收器和发送器各有一个16级的FIFO(First In First Out先入先出)队列,它们都还有自己独立的使能位和中断位;可以工作在半双工或全双工模式; 串行通信的三种方式:
2.SCI深入
A. GPIO的管脚对应如下:SCIA对应GPIO28/29和GPIO35/36两组可选; SCIB有四组管脚可以选择,分别是 O9/11,GPIO14/15,GPIO18/19,GPIO22/23; SCIC对应的是GPIO62/63。 在编程初始化时,需要先将对应的GPIO管脚配置为SCI模式,才能使得这些管脚具有SCI功能; B. SCI通信中带有格式信息的数据字符叫帧,下面是典型的数据帧格式 C. 下面单独介绍一下SCI波特率设置寄存器SCIHBAUD和SCILBAUD,0-15是高字节与低字节连在一起,构成16位波特率设置寄存器BRR。 BRR = SCIHBAUD + SCILBAUD 如果1<= BRR <=65535,那么SCI波特率=LSPCLK / ( (BRR+1) * 8 ),由此,可以带入你需要的波特率,既可以得到BRR的值; 如果BRR = 0,那么SCI波特率=LSPCLK/ 16 D. SCI模块发送和接受数据的原理:
ScibRegs.SCIFFRX.all = 0x0021; // Receive FIFO generates interrupt when the FIFO status bits (RXFFST4–0) and FIFO level bits
//(RXFFIL4–0) match (i.e., are greater than or equal to). Default value of these bits after reset //–11111. This will avoid frequent interrupts, after reset, as the receive FIFO will be empty mos // t of the time.
ScibRegs.SCIFFCT.all = 0x00;
ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1;
ScibRegs.SCIFFRX.bit.RXFIFORESET=1;
ScibRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
}
voidscib_xmit(int c)
{
//while (ScicRegs.SCIFFTX.bit.TXFFST != 0) {} //==0 -> transmit BUF is empty,can receive new data
while(ScibRegs.SCICTL2.bit.TXRDY != 1){} //also right,but the way of tool's display is different