d0b402f24a24ea29b366d8072956c0049355fb5a
[rpikern] / src / startup.s
1         .extern main
2
3         .section .startup
4         .code 32
5
6 startup:
7         ldr sp, =_stacktop
8
9         mov r0, #2
10         bl dbgled
11
12         @ clear bss
13         ldr r0, =_bss_start
14         ldr r1, =_bss_size
15         cmp r1, #0
16         beq 1f          @ 0-sized bss, skip clear
17         mov r2, #0
18 0:      str r2, [r0], #4
19         subs r1, #4
20         bne 0b
21 1:
22         bl main
23
24         mov r0, #0
25         bl dbgled
26
27         .global exit
28 exit:   wfe
29         b exit
30
31         .global dbgled
32 dbgled:
33         ldr r3, =0x3f200000     @ gpio base
34         ldr r2, =0x9000         @ gpio 24 and 25 -> output
35         str r2, [r3, #8]        @ store to GPFSEL2
36         ldr r2, =0x01000000     @ bit 24
37         tst r0, #1
38         strne r2, [r3, #0x1c]   @ GPSET0
39         streq r2, [r3, #0x28]   @ GPCLR0
40         lsl r2, #1
41         tst r0, #2
42         strne r2, [r3, #0x1c]   @ GPSET0
43         streq r2, [r3, #0x28]   @ GPCLR0
44         bx lr
45
46 @ vi:set filetype=armasm: