我在使用SCI接收数据时发现一个很奇怪的问题,当我通过串口助手发送数据给DSP时,按照数据手册上介绍,例如我发送123,SCIFFRX寄存器中的RXFFST就会是3,但现实是无论我发送多长的数据,这个位都显示是1,也就是只接收一个数据。百思不得其解之时,我在接收数据时加一个延时函数(想接收到5个数据就延时5ms),就能接收到完整数据。请问下这是啥情况,谢谢!!!
代码如下:
void main(void)
{
InitSysCtrl();
InitGpio();
GPIO_SetupPinMux(62,GPIO_MUX_CPU1,1);
GPIO_SetupPinOptions(62, GPIO_INPUT, GPIO_ASYNC);
GPIO_SetupPinMux(63, GPIO_MUX_CPU1, 1);
GPIO_SetupPinOptions(63, GPIO_OUTPUT, GPIO_ASYNC);
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
InitalSCI();
for(;;)
{
while(ScicRegs.SCIFFRX.bit.RXFFST == 0) {}
SCIRxData();
}
}
void InitalSCI()
{
ScicRegs.SCICCR.all = 0x0007;
ScicRegs.SCICTL1.all =0x0003;
//ScicRegs.SCICTL2.bit.TXINTENA =1;
//ScicRegs.SCICTL2.bit.RXBKINTENA =1;
//9600 baud
ScicRegs.SCIHBAUD.all =0x0002;
ScicRegs.SCILBAUD.all =0x008B;
ScicRegs.SCIFFTX.all=0xC020;
ScicRegs.SCIFFRX.all=0x0022;
ScicRegs.SCIFFCT.all=0x0;
ScicRegs.SCICTL1.all =0x0023;
ScicRegs.SCIFFTX.bit.TXFIFORESET=1;
ScicRegs.SCIFFRX.bit.RXFIFORESET=1;
}
void SCIRxData()
{
int i = 0;
DELAY_US(10000);
char RChar[10] = {0};
do
{
RChar[i] = ScicRegs.SCIRXBUF.all;
i++;
} while(ScicRegs.SCIFFRX.bit.RXFFST != 0);
}
mangui zhang:
RXFFST应该 是标志缓存里面的字节数吧 你如果判断这个==3时再去读取
触发了就说明里面有大于等于3个字节了
我在使用SCI接收数据时发现一个很奇怪的问题,当我通过串口助手发送数据给DSP时,按照数据手册上介绍,例如我发送123,SCIFFRX寄存器中的RXFFST就会是3,但现实是无论我发送多长的数据,这个位都显示是1,也就是只接收一个数据。百思不得其解之时,我在接收数据时加一个延时函数(想接收到5个数据就延时5ms),就能接收到完整数据。请问下这是啥情况,谢谢!!!
代码如下:
void main(void)
{
InitSysCtrl();
InitGpio();
GPIO_SetupPinMux(62,GPIO_MUX_CPU1,1);
GPIO_SetupPinOptions(62, GPIO_INPUT, GPIO_ASYNC);
GPIO_SetupPinMux(63, GPIO_MUX_CPU1, 1);
GPIO_SetupPinOptions(63, GPIO_OUTPUT, GPIO_ASYNC);
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
InitalSCI();
for(;;)
{
while(ScicRegs.SCIFFRX.bit.RXFFST == 0) {}
SCIRxData();
}
}
void InitalSCI()
{
ScicRegs.SCICCR.all = 0x0007;
ScicRegs.SCICTL1.all =0x0003;
//ScicRegs.SCICTL2.bit.TXINTENA =1;
//ScicRegs.SCICTL2.bit.RXBKINTENA =1;
//9600 baud
ScicRegs.SCIHBAUD.all =0x0002;
ScicRegs.SCILBAUD.all =0x008B;
ScicRegs.SCIFFTX.all=0xC020;
ScicRegs.SCIFFRX.all=0x0022;
ScicRegs.SCIFFCT.all=0x0;
ScicRegs.SCICTL1.all =0x0023;
ScicRegs.SCIFFTX.bit.TXFIFORESET=1;
ScicRegs.SCIFFRX.bit.RXFIFORESET=1;
}
void SCIRxData()
{
int i = 0;
DELAY_US(10000);
char RChar[10] = {0};
do
{
RChar[i] = ScicRegs.SCIRXBUF.all;
i++;
} while(ScicRegs.SCIFFRX.bit.RXFFST != 0);
}
gezheng bao:
回复 Eric Ma:
Thank you very much !