Advertisement
Guest User

Untitled

a guest
Jan 30th, 2018
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <avr32/io.h>
  2.   .section  .reset, "ax", @progbits
  3.   .global _start
  4.   .type _start, @function
  5. _start:  
  6. //Reset Vector
  7. //1. WDT off
  8.   mov     r9, -61440
  9.   eor     r2, r2
  10.   orh     r2, 0x5500
  11.   st.w    r9[0], r2
  12.   eorh    r2, 0xff00
  13.   st.w    r9[0], r2
  14. //2. Stack setup
  15.   lda.w   sp, _estack
  16. //3. Exceptions off
  17.   ssrf 21
  18. //4. Setup EVBA for interrupts
  19.   lda.w   r0, _evba
  20.   mtsr    AVR32_EVBA, r0
  21. //5. Load init data section
  22.   mov     r0, _data
  23.   mov     r1, _edata
  24.   sub     r2, pc, $ - _data_lma
  25.   rcall   load_data
  26. //6. Load const data section
  27.   mov     r0, _const
  28.   mov     r1, _econst
  29.   sub     r2, pc, $ - _const_lma
  30.   rcall   load_data
  31. //7. Zero out uninitialized data section
  32.   mov     r0, __bss_start
  33.   mov     r1, _end
  34.   eor     r2, r2
  35.   eor     r3, r3
  36.   rjmp    clear_udata
  37. clear_udata_loop:
  38.   st.d    r0++, r2
  39. clear_udata:
  40.   cp.w    r0, r1
  41.   brlo    clear_udata_loop
  42. //8. Start main
  43.   lda.w   pc, main
  44.  
  45.  
  46. //Loading helper
  47. load_data_loop:
  48.   ld.d    r4, r2++
  49.   st.d    r0++, r4
  50. load_data:
  51.   cp.w    r0, r1
  52.   brle    load_data_loop
  53.   mov     pc, lr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement