TMS28335SCI学习笔记

来源:互联网 发布:奔驰c级coupe 知乎 编辑:程序博客网 时间:2024/06/07 14:34

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_fifoScicRegs.SCIFFRX.bit.RXFFINTCLR = 1;#endiffor(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];}}