打印

com0接受中断将数据转发com01口正确,但是com1同样的做却不对

[复制链接]
1606|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rayforeverster|  楼主 | 2010-5-13 22:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有哪位大哥能提供思路吗???想不通什么原因:
com0/1使用接收中断,接收到数据后立即转发。不使用中断嵌套,也不使用FIFO,而且两个串口寄存器设置一样。
1)进入com0接收中断,接收一个字节,等到发送寄存器为空,然后同时向com0/1转发,正常
2)进入com1接收中断,接收一个字节,等到发送寄存器为空,向com1直接转发,向com0直接写入字符[email=]'@'[/email]....如果pc使用串口调试工具往com1发送一个字符,则正常;但是发送两个以上的字符就会出错。
另外,我在com1中的接受中判断,收到的数据是不是#,如果不是,则蜂鸣。然后我在pc上用串口调试工具一次发送多个###,并没有蜂鸣。而且用1ms间隔发送多个###,也没有蜂鸣,说明com1收到的数据至少不是错的。但是com1接受中断,往com0 1写入数据有问题。。。

我两个串口的寄存器设置完全一样,而且接受中断也是一样的

串口设置如下:
rUFCON0 = 0x0;  //FIFO disable
rUFCON1 = 0x0;
rUMCON0 = 0x0;
rUMCON1 = 0x0;
rULCON0  = 0x3;  //Normal,No parity,1 stop,8 bit
rUCON0   = 0x205; //rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling
rUBRDIV0 = ((int)(mclk/16./baud + 0.5) -1);

rULCON1  = 0x3;
rUCON1   = 0x205;
rUBRDIV1 = ((int)(mclk/16./baud + 0.5) -1);

-------------------------------------------------------

void __irq URxd1Isr() //uart1 recv
{
unsigned char tmp_byte;
int count=0;
rI_ISPC=BIT_URXD1;
if( rUTRSTAT1 & 0x01)//接收缓冲区有数据
{
  tmp_byte=rURXH1;
  if(tmp_byte!= '#')
   jbm_led_on;
  
  while( !((rUTRSTAT0 & 0x04) && (rUTRSTAT0 & 0x02) ));
  WrUTXH0([email=]'@'[/email]);
  
  while( !((rUTRSTAT1 & 0x04) && (rUTRSTAT1 & 0x02) ));
  WrUTXH1(tmp_byte);
}
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

3

帖子

1

粉丝