start_gcc.S 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. .syntax unified
  2. .cpu cortex-m3
  3. .fpu softvfp
  4. .thumb
  5. .global g_pfnVectors
  6. .global Default_Handler
  7. /* start address for the initialization values of the .data section.
  8. defined in linker script */
  9. .word _sidata
  10. /* start address for the .data section. defined in linker script */
  11. .word _sdata
  12. /* end address for the .data section. defined in linker script */
  13. .word _edata
  14. /* start address for the .bss section. defined in linker script */
  15. .word _sbss
  16. /* end address for the .bss section. defined in linker script */
  17. .word _ebss
  18. /**
  19. * @brief This is the code that gets called when the processor first
  20. * starts execution following a reset event. Only the absolutely
  21. * necessary set is performed, after which the application
  22. * supplied main() routine is called.
  23. * @param None
  24. * @retval : None
  25. */
  26. .section .text.Reset_Handler
  27. .weak Reset_Handler
  28. .type Reset_Handler, %function
  29. Reset_Handler:
  30. /* restore original stack pointer */
  31. ldr sp, =_estack /* set stack pointer */
  32. /* Copy the data segment initializers from flash to SRAM */
  33. movs r1, #0
  34. b LoopCopyDataInit
  35. CopyDataInit:
  36. ldr r3, =_sidata
  37. ldr r3, [r3, r1]
  38. str r3, [r0, r1]
  39. adds r1, r1, #4
  40. LoopCopyDataInit:
  41. ldr r0, =_sdata
  42. ldr r3, =_edata
  43. adds r2, r0, r1
  44. cmp r2, r3
  45. bcc CopyDataInit
  46. ldr r2, =_sbss
  47. b LoopFillZerobss
  48. /* Zero fill the bss segment. */
  49. FillZerobss:
  50. movs r3, #0
  51. str r3, [r2], #4
  52. LoopFillZerobss:
  53. ldr r3, = _ebss
  54. cmp r2, r3
  55. bcc FillZerobss
  56. /* Call the application's entry point.*/
  57. bl main
  58. bx lr
  59. .size Reset_Handler, .-Reset_Handler
  60. /**
  61. * @brief This is the code that gets called when the processor receives an
  62. * unexpected interrupt. This simply enters an infinite loop, preserving
  63. * the system state for examination by a debugger.
  64. *
  65. * @param None
  66. * @retval : None
  67. */
  68. .section .text.Default_Handler,"ax",%progbits
  69. Default_Handler:
  70. Infinite_Loop:
  71. b Infinite_Loop
  72. .size Default_Handler, .-Default_Handler
  73. /******************************************************************************
  74. *
  75. * The minimal vector table for a Cortex M3. Note that the proper constructs
  76. * must be placed on this to ensure that it ends up at physical address
  77. * 0x0000.0000.
  78. *
  79. ******************************************************************************/
  80. .section .isr_vector,"a",%progbits
  81. .type g_pfnVectors, %object
  82. .size g_pfnVectors, .-g_pfnVectors
  83. g_pfnVectors:
  84. .word _estack
  85. .word Reset_Handler
  86. .word Default_Handler //NMI_Handler
  87. .word HardFault_Handler
  88. .word Default_Handler //MemManage_Handler
  89. .word Default_Handler //BusFault_Handler
  90. .word Default_Handler //UsageFault_Handler
  91. .word 0
  92. .word 0
  93. .word 0
  94. .word 0
  95. .word Default_Handler //SVC_Handler
  96. .word Default_Handler //DebugMon_Handler
  97. .word 0
  98. .word PendSV_Handler
  99. .word rt_hw_timer_handler
  100. .word Default_Handler // GPIO Port A
  101. .word Default_Handler // GPIO Port B
  102. .word Default_Handler // GPIO Port C
  103. .word Default_Handler // GPIO Port D
  104. .word Default_Handler // GPIO Port E
  105. .word rt_hw_uart_isr_1 // UART0 Rx and Tx
  106. .word Default_Handler // UART1 Rx and Tx
  107. .word Default_Handler // SSI Rx and Tx
  108. .word Default_Handler // I2C Master and Slave
  109. .word Default_Handler // PWM Fault
  110. .word Default_Handler // PWM Generator 0
  111. .word Default_Handler // PWM Generator 1
  112. .word Default_Handler // PWM Generator 2
  113. .word Default_Handler // Quadrature Encoder
  114. .word Default_Handler // ADC Sequence 0
  115. .word Default_Handler // ADC Sequence 1
  116. .word Default_Handler // ADC Sequence 2
  117. .word Default_Handler // ADC Sequence 3
  118. .word Default_Handler // Watchdog timer
  119. .word Default_Handler // Timer 0 subtimer A
  120. .word Default_Handler // Timer 0 subtimer B
  121. .word Default_Handler // Timer 1 subtimer A
  122. .word Default_Handler // Timer 1 subtimer B
  123. .word Default_Handler // Timer 2 subtimer A
  124. .word Default_Handler // Timer 2 subtimer B
  125. .word Default_Handler // Analog Comparator 0
  126. .word Default_Handler // Analog Comparator 1
  127. .word Default_Handler // Analog Comparator 2
  128. .word Default_Handler // System Control (PLL, OSC,
  129. .word Default_Handler // FLASH Control
  130. .word Default_Handler // GPIO Port F
  131. .word Default_Handler // GPIO Port G
  132. .word Default_Handler // GPIO Port H
  133. .word Default_Handler // UART2 Rx and Tx
  134. .word Default_Handler // SSI1 Rx and Tx
  135. .word Default_Handler // Timer 3 subtimer A
  136. .word Default_Handler // Timer 3 subtimer B
  137. .word Default_Handler // I2C1 Master and Slave
  138. .word Default_Handler // Quadrature Encoder 1
  139. .word Default_Handler // CAN0
  140. .word Default_Handler // CAN1
  141. .word Default_Handler // CAN2
  142. .word luminaryif_isr // Ethernet
  143. .word Default_Handler // Hibernate
  144. .word Default_Handler // USB0
  145. .word Default_Handler // PWM Generator 3
  146. .word Default_Handler // uDMA Software Transfer
  147. .word Default_Handler // uDMA Error