使用时钟延迟启用 GPIO

Usage of delay in clock enabling 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 分配给 delay 有什么作用?怎么样 "allow time for clock to start"

What does assigning SYSCTL_RCGC2_R to delay do?

它实际上是一个特定的延迟,只使用一条指令(优化时)。

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

因为外设内存是强序的,后面的dummy read要先等write操作完成,然后才真正读取值。这也是GPIO时钟激活并可以访问的时间点。

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

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