TMS28335一共有3个SCI(Serial Communication Interface)模块。SCI可以看成是UART(异步串行接口通信)。下面介绍SCI的相关寄存器。
SCICR:SCI通信参数设置寄存器,设置数据位,停止位,奇偶校验位。
SCICTL1:使能SCI的发送接收功能 注:SW RESET需置1
SCILBAUD、SCIHBAUD:通信速率(波特率)的设置。
SCICTL2:使能接收发送中断,以及发送中断标志位。
SCIRXST:接收相关标志位。
SCIRXBUF:8位发送缓存寄存器
SCITXBUF:8位接收缓存寄存器。
SCI中断配置:
SCI的中断采用三级中断管理。分别是SCI外设中断,PIE中断,CPU中断。SCIA的PIE中断是第九组,分别是INT9.1和INT9.2.PIE中断的配置在前面已经说过了,此处不多说。注意:在中断不要忘记将PIEACK写1清除。
SCI的FIFO模式:
FIFO:先入先出队列。SCI采用这种模式时,接收或者发送完指定字节数量的数据后,才进入中断处理。这样可以节省了CPU的使用效率,CPU不用每次接收完一个字节的数据后就进入中断处理。
相关寄存器:
SCIFFTX:配置发送的数据量,使能SCI的FIFO模式,使能中断等
SCIFFRX:配置接收的数据量,使能接收中断等。
在学习FIFO模式时,遇到一个问题,就是接收完指定数量字节的数据后,总是重复进入两次发送中断,一次找不到原因。下面贴出代码,希望各位读者不吝赐教。
interrupt void ISRSCICRX (void)
{
Uint16 i;
PieCtrlRegs.PIEACK.bit.ACK8 = 1;
#if sci_fifo
ScicRegs.SCIFFRX.bit.RXFFINTCLR = 1;
#endif
for(i = 0; i < 4; i++)
{
Receivebuff[i] = ScicRegs.SCIRXBUF.all;
}
ScicRegs.SCIFFRX.bit.RXFIFORESET = 0;
ScicRegs.SCIFFRX.bit.RXFIFORESET = 1;
flag++;
for(i = 0; i < 4; i++)
{
ScicRegs.SCITXBUF = Receivebuff[i];
}
}