树莓派模型 3B+ 活动 LED 沿 GPIO 4 闪烁



我试图闪烁连接到GPIO 4的指示灯,它闪烁。但让我感到困惑的是,活动 LED(绿色(也与 GPIO 4 上的 LED 一起闪烁。这是我刚刚打开 GPIO 4 的代码:

.section ".text.boot"
.globl notmain
.equ GPIOBASE, 0x3f200000
.equ FSEL0, 0x0
.equ SET_BIT12, 0x00001000
.equ SET_BIT12_MASK, 0x00007000
.equ SET_BIT4, 0x00000010
.equ GPSET0, 0x1c
.equ GPCLR0, 0x28
notmain:
ldr r0, =GPIOBASE
ldr r1, [r0, #FSEL0]
ldr r2, =SET_BIT12_MASK
mvn r2, r2
and r1, r1, r2
orr r1, r1, #SET_BIT12
ldr r0, =GPIOBASE
str r1, [r0, #FSEL0]
ldr r0, =GPIOBASE
ldr r1, [r0, #GPSET0]
orr r1, r1, #SET_BIT4
ldr r0, =GPIOBASE
str r1, [r0, #GPSET0]
loop:
b loop

如果我将 #GPSET0 替换为 #GPCLR0,则活动 LED 也将关闭。为什么这两件事会联系在一起?

GPSET和GPCLR寄存器不用于读写。 它们旨在在您想要该操作的地方使用 1 编写,因此要设置 gpio 4,您需要将 1<<4 写入 GPSET,要清除 gpio4,您需要将 1<<4 写入 GPCLR。

在您的读取-修改-写入中,您可能正在读取某些引脚,然后将它们写回可能会改变这些引脚的状态。 对于 CLR/SET 写入,0 不会更改 GPIO 引脚的状态,而 1 会更改,您可以在一次写入中更改一个或部分或全部(到该状态(。

最新更新