Raspberry Pi модель 3B + активность мигает вдоль gpio 4 - PullRequest
0 голосов
/ 29 января 2020

Я пытался мигать светодиодом, подключенным к GPIO 4, и он мигает. Но меня смущает то, что индикатор активности (зеленый) также мигает вместе со светодиодом на GPIO 4. Вот мой код, который просто включает 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 Индикатор активности также отключится. Почему эти две вещи связаны?

1 Ответ

0 голосов
/ 03 февраля 2020

Регистры GPSET и GPCLR не предназначены для чтения-изменения-записи. Они предназначены для записи с 1, где вы хотите выполнить это действие, поэтому для установки gpio 4 вы пишете 1 << 4 в GPSET, для очистки gpio4 вы пишете 1 << 4 в GPCLR. </p>

В вашем чтении -modify-write, которую вы, вероятно, читаете в некоторых из них, а затем их обратная запись также может изменить состояние этих выводов. для CLR / SET запись 0 не изменяет состояние вывода gpio, а 1 делает, вы можете изменить один или несколько или все (в это состояние) за одну запись.

...