我最近在用TMS320F28335的SCI模块开发一个MODBUS通讯,在程序调试过程中,我发现如下问题,请帮忙解答,谢谢先!
当TXFFIL配置为16,如下:
ScibRegs.SCIFFTX.all |= 0xC010; //即TXFFIL = 16
当按照如下逻辑写发送Data到buffer时
....
Uint8 i;
PCtx_length-=uiPCTxDataPointer;
//Send data to buffer
if(PCtx_length>0)
{
if(PCtx_length>16) //Length is more than 16 bytes
{
for(i=0;i<16;i++)
{
//while(ScibRegs.SCICTL2.bit.TXRDY != 1); 若加上此句,含义为在此等所有的数据去发送,有误!
ScibRegs.SCITXBUF = u16PCModbusTxBuffer[uiPCTxDataPointer+i];
asm(" RPT #20 || NOP");
}
uiPCTxDataPointer+=16;
}
else //Length is less than 16 bytes,can finish transmitting this time
{
for(i=0;i<PCtx_length;i++)
{
ScibRegs.SCITXBUF = u16PCModbusTxBuffer[uiPCTxDataPointer+i];
asm(" RPT #20 || NOP");
}
uiPCTxDataPointer+=PCtx_length;
}
}
.....
然后使能FIFO发送中断,当我发送给DSP时,DSP回复的数据与期望的数据相比,丢了几个byte的数据。
电脑发送:3A 30 31 30 33 30 31 30 31 30 30 30 32 46 38 0D 0A
DSP回复:3A 30 31 30 31 37 45 46 45 44 33 42 30 46 42 0D 0A
期望回复值:3A 30 31 30 33 30 31 30 31 37 45 46 45 44 33 42 30 46 42 0D 0A //红底Data被丢掉
但当我把TXFFIL配置为8,每次发送中断来时,写8个byte到SCITXBUF(即将上面代码中的16改为8),DSP就能回复正确的值。
单步调试代码及翻看F28335 SCI datasheet也没有发现问题点。请高手帮忙解释下,谢谢!