pimoroni-pico/micropython/modules/badger2040/badgerinit.S

39 lines
976 B
ArmAsm

.syntax unified
.cpu cortex-m0plus
.thumb
#include "pico/asm_helper.S"
// This macro tells the pico runtime to call __badger_init very early in boot
__pre_init __badger_init, 00003
.section .data.badger_init
.global badger_buttons_on_wake
.align 4
badger_buttons_on_wake:
.word 0x00000000
.section .text
.thumb_func
__badger_init:
// Read GPIO state for front buttons and store
movs r3, 0xd0
lsls r3, r3, 24
ldr r1, [r3, 4] // Read all GPIOs
movs r2, 0b11111 // Mask the front buttons (pins 15-11)
lsls r2, 11
ands r1, r1, r2
ldr r2, =badger_buttons_on_wake
str r1, [r2]
// Enable 3v3 pin on the badger
ldr r1, =0x40014054 // GPIO control register 10
movs r2, 5 // SIO function
str r2, [r1] // Set Enable 3v3 to SIO
str r2, [r1, 120] // Also set LED (25) to SIO
ldr r2, =0x02000400 // Pins 25 and 10
str r2, [r3, 36] // Enable pins out
str r2, [r3, 20] // Set pins high
bx lr