C语言 使用启用 GPIO 的时钟延迟



我目前刚刚开始研究ARM Cortex-M4 MCU,我在初始化I/O端口时遇到了这段代码。

SYSCTL_RCGC2_R |= 0x00000020;     // 1) activate clock for Port F
delay = SYSCTL_RCGC2_R;           // allow time for clock to start
GPIO_PORTF_LOCK_R = 0x4C4F434B;   // 2) unlock GPIO Port F
GPIO_PORTF_CR_R = 0x1F;           // allow changes to PF4-0
....

我没有得到第二行代码。将SYSCTL_RCGC2_R分配给延迟有什么作用?如何"允许时钟启动时间"

将SYSCTL_RCGC2_R分配给延迟有什么作用?

它实际上是一个特定的延迟,并且仅使用单个指令(优化时(。

Rember Cortex-M4 有一个写入缓冲区 - 这意味着时钟寄存器写入在执行下一条指令时不会生效。

由于外围内存是强序的,因此以下虚拟读取必须等待写入操作首先完成,然后才实际读取值。这也是 GPIO 时钟激活并可以访问的时间点。

当外设的时钟比主MCU内核慢时,您经常会看到这种模式。

此存储操作需要一些时间才能在外围总线上传播。您需要确保商店操作已完成。最简单的方法是在按顺序执行外围总线操作时读回位置。

最新更新