关于S3C2440A的 中断串口接收问题,有点诡异
我的问题是这样的 ,我使用的串口中断触发 来接收数据,但是当我的发送一串数据时,就只能接受到一个数据,而我一个个分开发送时,就可以完整的回显,这是这么回事?另一个问题是:我用MDK调试时 我发送的一个数据 触发了串口接受的中断,此时串口0的状态寄存器UTRSTAT0的 值是 0x07,这就代表有数据已经到了接受缓存区,当我跳入中端处理函数时 UTRSATA0就变为0X06,并且我接受缓存区的数据也没了,这就让我不明白了,我直接运行时干嘛可以直接回显,而调试时连接受都出问题,这个太诡异了 请高人指点,部分代码如下:
发送函数:
int UART_SendBuff(U8 ucComID,const U8 *pcBuff,U32 unLength)
{
VU32 *unTRstat=NULL;
VU8 *unTXH=NULL;
U32iSendCount=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++;
unLength--;
}
while(!(*unTRstat & (1<<2)));
return iSendCount;
}
接收函数:
int UART_RecvBuff(U8 ucComID,U8 *pcBuff,U32 unSize)
{
VU32 *unTRstat=NULL;
VU8 *unRXH=NULL;
U32iRecvCount=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!='\0')
{
iRecvCount++;
}
if(iRecvCount == unSize)
{
return FAIL;
}
pcBuff=*unRXH;
return iRecvCount;
}
这是中断的处理函数:
char UART_RXTest(void)
{
static U8 pcBuff={0};
static char i=0;
UART_RecvBuff(0,pcBuff,15); //接受一个发送一个
UART_SendBuff(0,pcBuff,1);
pcBuff=0;
}
当我用MDK调试时,单步跳入这个函数时 状态寄存器 UTRSTAT0 的值就由原来的 0X07 变为 0X06,怎么回事?,难道中断只是通知,而你需要在外面轮训吗?这样中断还不如没有好直接轮训算了,
不知各位大侠 能否解释下 这是怎么回事? 调试器是把双刃剑。。。
你把UTRSTAT0 从watch window 撤掉看看
每单步调试一次,调试器本身就会把watch window里的所有变量读取一遍,效果和程序本身读取是一样的 还有URXH0这个也撤了试试 你是说在程序调试时不对 URXH0 和 UTRSTAT0操作? 我的意思是调试的时候不要在MDK里面把这些变量放在观察窗口观察它们的值,也不要把鼠标悬停在变量上看它的值
页:
[1]