请教个关于SCI发送FIFO中断的问题:
interrupt void sciaTxFifoIsr(void)
{
Uint16 i;
for(i=0; i< 8; i++)
{
SciaRegs.SCITXBUF=sdataA[i]; // Send data
}
for(i=0; i< 8; i++) //Increment send data for next cycle
{
sdataA[i] = (sdataA[i]+1) & 0x00FF;
}
SciaRegs.SCIFFTX.bit.TXINTCLR=1; // Clear SCI Interrupt flag
PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ACK
}
其中发送中断级别为8,对这个例程不太理解。当发送中断程序执行完后,FIFO中的数不一定全部发完了,而此时由于FIFO中的未发送数小于发送中断级别,FIFO又会响应中断,而此时下一次要发送的8个数据就会将上一次未发送完的数据覆盖掉。
我感觉在ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1;前加上这么一句
if(ScibRegs.SCIFFTX.bit.TXFFST != 0){}会比较合理,确保FIFO为空,保证了本次写入的值全部发送完毕。 |