|
我的问题是这样的 ,我使用的串口中断触发 来接收数据,但是当我的发送一串数据时,就只能接受到一个数据,而我一个个分开发送时,就可以完整的回显,这是这么回事?
另一个问题是:我用MDK调试时 我发送的一个数据 触发了串口接受的中断,此时串口0的状态寄存器UTRSTAT0的 值是 0x07,这就代表有数据已经到了接受缓存区,当我跳入中端处理函数时 UTRSATA0就变为0X06, 并且我接受缓存区的数据也没了,这就让我不明白了,我直接运行时干嘛可以直接回显,而调试时连接受都出问题,这个太诡异了 请高人指点,部分代码如下:
发送函数:
int UART_SendBuff(U8 ucComID,const U8 *pcBuff,U32 unLength)
{
VU32 *unTRstat=NULL;
VU8 *unTXH=NULL;
U32 iSendCount=0;
switch(ucComID)
{
case 0: unTRstat = &rUTRSTAT0;
unTXH = &rUTXH0;
break;
case 1: unTRstat = &rUTRSTAT1;
unTXH = &rUTXH1;
break;
case 2: unTRstat = &rUTRSTAT2;
unTXH = &rUTXH2;
break;
}
while(unLength)
{
while(!(*unTRstat & 0X04));
*unTXH = pcBuff[iSendCount];
iSendCount++;
unLength--;
}
while(!(*unTRstat & (1<<2)));
return iSendCount;
}
接收函数:
int UART_RecvBuff(U8 ucComID,U8 *pcBuff,U32 unSize)
{
VU32 *unTRstat=NULL;
VU8 *unRXH=NULL;
U32 iRecvCount=0;
switch(ucComID)
{
case 0: unTRstat = &rUTRSTAT0;
unRXH = &rURXH0;
break;
case 1: unTRstat = &rUTRSTAT1;
unRXH = &rURXH1;
break;
case 2: unTRstat = &rUTRSTAT2;
unRXH = &rURXH2;
break;
}
while(!(*unTRstat & 0x01));
while(pcBuff[iRecvCount]!='\0')
{
iRecvCount++;
}
if(iRecvCount == unSize)
{
return FAIL;
}
pcBuff[iRecvCount]=*unRXH;
return iRecvCount;
}
这是中断的处理函数:
char UART_RXTest(void)
{
static U8 pcBuff[15]={0};
static char i=0;
UART_RecvBuff(0,pcBuff,15); //接受一个发送一个
UART_SendBuff(0,pcBuff,1);
pcBuff[0]=0;
}
当我用MDK调试时,单步跳入这个函数时 状态寄存器 UTRSTAT0 的值就由原来的 0X07 变为 0X06,怎么回事?,难道中断只是通知,而你需要在外面轮训吗?这样中断还不如没有好 直接轮训算了,
不知各位大侠 能否解释下 这是怎么回事? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|