TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28069M: 接收FIFO的使用问题

Part Number:TMS320F28069M

SCICTL2 RXBKINTENA bit1=1 使能 接收/缓冲抑制中断

SCIFFRX RXFFIENA bit5=1  使能接收FIFO中断

上面两个寄存器同时置1,发现串口每次中断只接收一个字节数据,而不是想像的四个字节数据(若FIFO深度设为4级)进一次中断

若关闭SCICTL2 RXBKINTENA bit1=0 ,则串口助手不管发了多少字节数据,都不会进入中断;

请问FIFO模式使用到底是怎么回事呢

Green Deng:

你好,这个可能上传一下你这边的SCI部分的配置,单这两个寄存器看不出来什么问题。

,

Shaoxiong Guo:

确实是配置问题 已经试出来了  谢谢

,

Green Deng:

好的,方便的话可以分享一下解决方案供其他工程师参考

,

Shaoxiong Guo:

  HAL_Obj *obj = (HAL_Obj *)handle;  SCI_setCharLength(obj->sciAHandle,SCI_CharLength_8_Bits);     //SCICCR SCICHAR bit2:0=111 8bit数据传输  SCI_setMode(obj->sciAHandle,SCI_Mode_IdleLine);               //SCICCR ADDRIDLE_MODE bit3=0 选择空闲线协议  SCI_disableLoopBack(obj->sciAHandle);                         //SCICCR LOOPBKENA  bit4=0 自测模式关闭 官方例程是使能loop back  SCI_disableParity(obj->sciAHandle);                           //SCICCR PARITYENA bit5=0 不允许奇偶校验  SCI_setParity(obj->sciAHandle,SCI_Parity_Odd);                //SCICCR PARITY bit6=0 奇校验  SCI_setNumStopBits(obj->sciAHandle,SCI_NumStopBits_One);      //SCICCR STOPBITS bit7=0 1bit停止位  SCI_disableRxErrorInt(obj->sciAHandle);                       //SCICTL1 RXERRINTENA bit6=0 屏蔽接收错误中断  SCI_enable(obj->sciAHandle);                                  //SCICTL1 SWRESET bit5=1 SCI软件不复位  SCI_disableTxWake(obj->sciAHandle);                           //SCICTL1 TXWAKE bit3=0 sci发送不唤醒  SCI_disableSleep(obj->sciAHandle);                            //SCICTL1 SLEEP bit2=0 禁用睡眠功能  SCI_enableRx(obj->sciAHandle);                                //SCICTL1 RXENA bit0=1 SCI接收使能  SCI_enableTx(obj->sciAHandle);                                //SCICTL1 TXENA bit1=1 SCI发送使能  SCI_disableTxInt(obj->sciAHandle);                            //SCICTL2 bit0=0 禁止TXRDY中断#if defined(SCI_RxFifoIntEnable)  SCI_disableRxInt(obj->sciAHandle);                            //SCICTL2 RXBKINTENA bit1=1 禁用 接收/缓冲抑制中断#else  SCI_enableRxInt(obj->sciAHandle);                             //SCICTL2 RXBKINTENA bit1=0 使能 接收/缓冲抑制中断#endif  obj->sciAHandle->SCIFFTX &=(~(1<<15));                        //SCIFFTX SCIRST bit15=0 复位SCI发送接收通道#if defined(SCI_RxFifoIntEnable)  SCI_enableTxFifoEnh(obj->sciAHandle);                         //SCIFFTX SCIFFENA bit14=1 启用FIFO  SCI_enableTxFifo(obj->sciAHandle);                            //SCIFFTX TXFIFORESET bit13=1 使能发送FIFO#else  SCI_disableTxFifoEnh(obj->sciAHandle);                        //SCIFFTX SCIFFENA bit14=0 禁用FIFO  obj->sciAHandle->SCIFFTX &=(~(1<<13));                        //SCIFFTX TXFIFORESET bit13=0 持续复位发送FIFO#endif  SCI_clearTxFifoInt(obj->sciAHandle);                          //SCIFFTX TXFFINTCLR bit6=1  发送FIFO中断清除标志位,1=清除TXFFINT位  SCI_disableTxFifoInt(obj->sciAHandle);                        //SCIFFTX TXFFIENA bit5=0  不使能发送fifo中断  SCI_setTxFifoIntLevel(obj->sciAHandle,SCI_FifoLevel_Empty);   //SCIFFTX TXFFIL bit4:0=00000 发送FIFO深度设为0 最大为4  SCI_clearRxFifoOvf(obj->sciAHandle);                          //SCIFFRX RXFFOVRCLR bit14=1 SCI接收FIFO溢出清除标志位,1,清除RXFFOVF#if defined(SCI_RxFifoIntEnable)  SCI_enableRxFifo(obj->sciAHandle);                            //SCIFFRX RXFIFORESET bit13=1 重新使能接收FIFO#else  obj->sciAHandle->SCIFFRX &=(~(1<<13));                        //SCIFFRX RXFIFORESET bit13=0 持续复位接收FIFO#endif  SCI_clearRxFifoInt(obj->sciAHandle);                          //SCIFFRX RXFFINTCLR bit6=1  清除接收FIFO中断标志位#if defined(SCI_RxFifoIntEnable)  SCI_enableRxFifoInt(obj->sciAHandle);                         //SCIFFRX RXFFIENA bit5=1  使能接收FIFO中断  SCI_setRxFifoIntLevel(obj->sciAHandle,SCI_FifoLevel_4_Words); //SCIFFRX bit4:0=00000 接收深度最大设置为4#else  SCI_disableRxFifoInt(obj->sciAHandle);                        //SCIFFRX RXFFIENA bit5=0  接收FIFO中断不使能  SCI_setRxFifoIntLevel(obj->sciAHandle,SCI_FifoLevel_Empty);   //SCIFFRX bit4:0=00000 接收深度最大设置为0#endif  obj->sciAHandle->SCIFFCT &=(~(1<<15));                        //SCIFFCT ABD bit15=0  SCI_clearAutoBaudDetect(obj->sciAHandle);                     //SCIFFCT ABDCLR bit14=1 ABD标志位  SCI_disableAutoBaudAlign(obj->sciAHandle);                    //SCIFFCT CDC bit13=0 禁用ABD对齐  SCI_setTxDelay(obj->sciAHandle,0);                            //SCIFFCT FTXDLY bit7:0=0  SCI_setBaudRate(obj->sciAHandle,SCI_BaudRate_115_2_kBaud);  SCI_enable(obj->sciAHandle);                                  //SCICTL1 SWRESET bit5=1 SCI软件使能  SCI_enableChannels(obj->sciAHandle);                          //SCIFFTX SCIRST bit15=1 SCI复位标志,SCI接收和发送FIFO功能继续工作  return;}

这个SCI配置兼顾了使用FIFO和不使用FIFO的实践

接收都是使用中断方式,发送都是轮询方式

SCI_RxFifoIntEnable是是否使用FIFO的一个条件宏,供大家参考

,

Green Deng:

非常感谢!

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28069M: 接收FIFO的使用问题
分享到: 更多 (0)