aboutsummaryrefslogtreecommitdiff
path: root/gpio.s
blob: 1ef296c9155fe4302b2fc57d0e1c1ace58dcfe47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
.syntax unified
.cpu cortex-m0plus
.thumb

.equ RESETS_BASE,     0x4000c000
.equ RESET_OFST,      0x0
.equ RESET_DONE_OFST, 0x8

.equ ATOMIC_CLEAR,    0x3000

.type setup_gpio, %function
.global setup_gpio

setup_gpio:
  // clear reset
  ldr r1, =(RESETS_BASE + ATOMIC_CLEAR)
  movs r0, 0x20 // IO_BANK0 is bit 5
  str r0, [r1, RESET_OFST]
  ldr r1, =RESETS_BASE
1:
  ldr r2, [r1, RESET_DONE_OFST]
  tst r0, r2 // IO_BANK0 is still bit 5
  // wait for reset done
  beq 1b
  bx lr