接收中断写与不写“while (!(IFG1 & URXIFG0));”有什么区别?

2019-03-24 10:55发布

1.这两段程序有什么区别?
#pragma vector = UART0RX_VECTOR
__interrupt void UART0_RXISR(void)
{     
  while (!(IFG1 & URXIFG0));
  IFG1 &=~URXIFG0;   
RxBuf[RxPoint++]=RXBUF0;  
}
#pragma vector = UART0RX_VECTOR
__interrupt void UART0_RXISR(void)
{     
RxBuf[RxPoint++]=RXBUF0;  
}

2.我在接收数据的时候,可能液晶或者AD在同时工作,如果他们也用到了接收中断,那么会不会我接收到的数据是经过了液晶和AD数据的干扰?
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
qiushenghua
1楼-- · 2019-03-24 12:04
 精彩回答 2  元偷偷看……
sint27
2楼-- · 2019-03-24 16:23
< :TI_MSP430_内容页_SA7 --> 2、液晶和AD应该用的不是串口中断吧,如果不是,只要保证接收所用的数组不一样一般就不会有问题了
hbwangliang
3楼-- · 2019-03-24 21:16
唉,这个看不懂哇
面纱如雾
4楼-- · 2019-03-25 00:22
 精彩回答 2  元偷偷看……
sint27
5楼-- · 2019-03-25 03:49
面纱如雾 发表于 2014-8-29 11:00
我在接收中断单步调试的时候,发现数据接收一半的时候就跳到AD中断里去了,虽然我接收的数组名称肯定不一 ...

这个肯定是不会直接影响RXbuf的,rxbuf只在串口使用时会被改变,如果串口接收出错,可能是多个中断情况下软件冲突没处理好,有多个中断源的情况下,特别要注意中断服务程序的精简,不要在中断服务程序里执行大量工作

qiushenghua
6楼-- · 2019-03-25 06:32
面纱如雾 发表于 2014-8-29 11:00
我在接收中断单步调试的时候,发现数据接收一半的时候就跳到AD中断里去了,虽然我接收的数组名称肯定不一 ...

这个是绝对不可能的!
首先,串行通讯是一个字节一个字节的通讯,只有接收到一个完整的字节之后才会进入中断服务程序,MSP430不支持中断嵌套,所以在中断服务里不会进入AD中断。
其次,在字节与字节之间,可能进入AD中断,因为在这个时候尚未收到完整的字节,串行通讯可能仍在运行中。同样的,中断服务运行起来之后串行中断就无法运行了。如果AD中断时间过长,可能影响到串行数据的接收。

一周热门 更多>

相关问题

    相关文章