关于UART RXCn标志AVR的基本问题

问题描述

我在学习 AVR 时卡在了中断部分。 数据表说关于 RXCn 标志: "该标志位在接收缓冲区中有未读数据时置位,在接收缓冲区为空时清零 (即,不包含任何未读数据)。”

还有一个用uart获取字符的例子

while ( !(UCSRnA & (1<<RXCn)) );
/* Get and return received data from buffer */
return UDRn;

它会一直在这里等待直到数据来自Uart吗?并且会因为“while(1);”而使mcu无法做任何其他工作?

我知道这个方法是轮询的,我也知道有一个中断方法,但是 mcu 会因此被锁定吗?

解决方法

  1. 是的。当条件 (!(UCSRnA & (1<<RXCn))) 满足时,它将永远等待。 IE。它将等到 UCSRnA 设置了位 RXCn

  2. 如果全局中断标志(I 寄存器中的 SREG 标志)未被清除(通过调用 cli(),进入中断处理程序),则中断仍然能够运行,所有外设(计数器、SPI、TWI 等)在此周期内继续工作。当然循环下面的程序不会执行。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...