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