Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr32/io.h>
- .section .reset, "ax", @progbits
- .global _start
- .type _start, @function
- _start:
- //Reset Vector
- //1. WDT off
- mov r9, -61440
- eor r2, r2
- orh r2, 0x5500
- st.w r9[0], r2
- eorh r2, 0xff00
- st.w r9[0], r2
- //2. Stack setup
- lda.w sp, _estack
- //3. Exceptions off
- ssrf 21
- //4. Setup EVBA for interrupts
- lda.w r0, _evba
- mtsr AVR32_EVBA, r0
- //5. Load init data section
- mov r0, _data
- mov r1, _edata
- sub r2, pc, $ - _data_lma
- rcall load_data
- //6. Load const data section
- mov r0, _const
- mov r1, _econst
- sub r2, pc, $ - _const_lma
- rcall load_data
- //7. Zero out uninitialized data section
- mov r0, __bss_start
- mov r1, _end
- eor r2, r2
- eor r3, r3
- rjmp clear_udata
- clear_udata_loop:
- st.d r0++, r2
- clear_udata:
- cp.w r0, r1
- brlo clear_udata_loop
- //8. Start main
- lda.w pc, main
- //Loading helper
- load_data_loop:
- ld.d r4, r2++
- st.d r0++, r4
- load_data:
- cp.w r0, r1
- brle load_data_loop
- mov pc, lr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement