使用时钟延迟启用 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 内核慢时,您经常会看到这种模式。
此存储操作传播到外设总线需要一些时间。您需要确保商店操作已经完成。最简单的方法是在外围总线操作按顺序执行时读回位置。
我目前刚刚开始研究 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 内核慢时,您经常会看到这种模式。
此存储操作传播到外设总线需要一些时间。您需要确保商店操作已经完成。最简单的方法是在外围总线操作按顺序执行时读回位置。