raspberry pi模型3b +活动导致沿gpio 4闪烁

问题描述 投票:0回答:1

我试图使连接到GPIO 4的led闪烁,然后闪烁。但是让我感到困惑的是,活动LED(绿色的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指示灯也将关闭。为什么将这两件事联系起来?

arm raspberry-pi3 bare-metal
1个回答
0
投票

GPSET和GPCLR寄存器无意进行读取-修改写操作。它们打算在要执行该操作的位置写入1,因此要设置gpio 4,请向GPSET写1 << 4,要清除gpio4,请向GPCLR写1 << 4。]

在您的读-修改-写操作中,您可能正在读取某些内容,然后将其写回也可能会更改这些引脚的状态。对于CLR / SET,写入0不会更改gpio引脚的状态,写入1可以更改gpio引脚的状态,您可以在一次写入中更改一个或部分或全部(到该状态)。

© www.soinside.com 2019 - 2024. All rights reserved.