如何解决关于UART RXCn标志AVR的基本问题
我在学习 AVR 时卡在了中断部分。 数据表说关于 RXCn 标志: "该标志位在接收缓冲区中有未读数据时置位,在接收缓冲区为空时清零 (即,不包含任何未读数据)。”
while ( !(UCSRnA & (1<<RXCn)) );
/* Get and return received data from buffer */
return UDRn;
它会一直在这里等待直到数据来自Uart吗?并且会因为“while(1);”而使mcu无法做任何其他工作?
我知道这个方法是轮询的,我也知道有一个中断方法,但是 mcu 会因此被锁定吗?
解决方法
-
是的。当条件 (
!(UCSRnA & (1<<RXCn))
) 满足时,它将永远等待。 IE。它将等到UCSRnA
设置了位RXCn
。 -
如果全局中断标志(
I
寄存器中的SREG
标志)未被清除(通过调用cli()
,进入中断处理程序),则中断仍然能够运行,所有外设(计数器、SPI、TWI 等)在此周期内继续工作。当然循环下面的程序不会执行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。