Quantcast
Channel: C2000™︎ 微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 12343

请教关于SCI 发送FIFO Buffer的问题

$
0
0

我最近在用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也没有发现问题点。请高手帮忙解释下,谢谢!


Viewing all articles
Browse latest Browse all 12343

Latest Images

Trending Articles

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>