startup.S 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /* startup code for LPC17xx
  2. *
  3. * Written 2010 by Ingo Korb
  4. */
  5. .syntax unified
  6. .section .vectors
  7. .macro except label
  8. .weak \label
  9. .set \label, __unhandled_exception
  10. .word \label
  11. .endm
  12. /* Cortex M3 standard except vectors */
  13. .word __stack
  14. .word _start
  15. except NMI_Handler
  16. except HardFault_Handler
  17. except MemManage_Handler
  18. except BusFault_Handler
  19. except UsageFault_Handler
  20. .word 0
  21. .word 0
  22. .word 0
  23. .word 0
  24. except SVC_Handler
  25. except DebugMon_Handler
  26. .word 0
  27. except PendSV_Handler
  28. except SysTick_Handler
  29. /* External interrupt vectors */
  30. except WDT_IRQHandler
  31. except TIMER0_IRQHandler
  32. except TIMER1_IRQHandler
  33. except TIMER2_IRQHandler
  34. except TIMER3_IRQHandler
  35. except UART0_IRQHandler
  36. except UART1_IRQHandler
  37. except UART2_IRQHandler
  38. except UART3_IRQHandler
  39. except PWM1_IRQHandler
  40. except I2C0_IRQHandler
  41. except I2C1_IRQHandler
  42. except I2C2_IRQHandler
  43. except SPI_IRQHandler
  44. except SSP0_IRQHandler
  45. except SSP1_IRQHandler
  46. except PLL0_IRQHandler
  47. except RTC_IRQHandler
  48. except EINT0_IRQHandler
  49. except EINT1_IRQHandler
  50. except EINT2_IRQHandler
  51. except EINT3_IRQHandler
  52. except ADC_IRQHandler
  53. except BOD_IRQHandler
  54. except USB_IRQHandler
  55. except CAN_IRQHandler
  56. except DMA_IRQHandler
  57. except I2S_IRQHandler
  58. except ENET_IRQHandler
  59. except RIT_IRQHandler
  60. except MCPWM_IRQHandler
  61. except QEI_IRQHandler
  62. except PLL1_IRQHandler
  63. .section .text
  64. .global _start
  65. .thumb_func
  66. _start:
  67. /* copy data section to ram */
  68. ldr r0, =__data_load_start
  69. ldr r1, =__data_load_end
  70. ldr r2, =__data_start
  71. dataloop:
  72. ldr.w r3, [r0], #4
  73. str.w r3, [r2], #4
  74. cmp r0, r1
  75. blo dataloop
  76. /* clear bss section */
  77. ldr r0, =__bss_start__
  78. ldr r1, =__bss_end__
  79. ldr r2, =0
  80. bssloop:
  81. str.w r2, [r0], #4
  82. cmp r0, r1
  83. blo bssloop
  84. /* start main() */
  85. b main
  86. /* endless loop */
  87. .weak __unhandled_exception
  88. .thumb_func
  89. __unhandled_exception:
  90. b __unhandled_exception
  91. .end