.syntax unified
.set IO_BANK0_BASE, 0x40014000
.set SIO_BASE, 0xd0000000
.set GPIO16_CTRL, IO_BANK0_BASE + 0x84
.set GPIO_OE_SET, SIO_BASE + 0x24
.set GPIO_OUT_XOR, SIO_BASE + 0x1c
.set PPB_BASE, 0xe0000000
.set SYST_CSR, PPB_BASE + 0xe010
.set SYST_RVR, PPB_BASE + 0xe014
.set SYST_CVR, PPB_BASE + 0xe018
.global main
main:
// Enable SysTick and its interrupt
ldr r0, =SYST_CSR
movs r1, 0b11
str r1, [r0]
// Reload SysTick to 2^26
ldr r0, =SYST_RVR
movs r1, 1
lsls r1, 26
str r1, [r0]
// Set GPIO to function 5 - SIO
ldr r0, =GPIO16_CTRL
movs r1, 5
str r1, [r0]
// Pin mask in r1
movs r1, 1
lsls r1, 16
// Set GPIO to OUTPUT
ldr r0, =GPIO_OE_SET
str r1, [r0]
ldr r0, =GPIO_OUT_XOR
ldr r2, =SYST_CVR
blink:
// gpio0_state ^= 1
str r1, [r0]
// Reset SysTick (written value ignored)
str r0, [r2]
wfi
b blink