startup_n32g45x_gcc.s 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  1. /**
  2. ****************************************************************************
  3. Copyright (c) 2019, Nations Technologies Inc.
  4. All rights reserved.
  5. ****************************************************************************
  6. Redistribution and use in source and binary forms, with or without
  7. modification, are permitted provided that the following conditions are met:
  8. - Redistributions of source code must retain the above copyright notice,
  9. this list of conditions and the disclaimer below.
  10. Nations' name may not be used to endorse or promote products derived from
  11. this software without specific prior written permission.
  12. DISCLAIMER: THIS SOFTWARE IS PROVIDED BY NATIONS "AS IS" AND ANY EXPRESS OR
  13. IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  14. MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
  15. DISCLAIMED. IN NO EVENT SHALL NATIONS BE LIABLE FOR ANY DIRECT, INDIRECT,
  16. INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  17. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  18. OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  19. LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  20. NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  21. EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  22. ****************************************************************************
  23. **/
  24. .syntax unified
  25. .cpu cortex-m4
  26. .fpu softvfp
  27. .thumb
  28. .global g_pfnVectors
  29. .global Default_Handler
  30. /* start address for the initialization values of the .data section.
  31. defined in linker script */
  32. .word _sidata
  33. /* start address for the .data section. defined in linker script */
  34. .word _sdata
  35. /* end address for the .data section. defined in linker script */
  36. .word _edata
  37. /* start address for the .bss section. defined in linker script */
  38. .word _sbss
  39. /* end address for the .bss section. defined in linker script */
  40. .word _ebss
  41. /* stack used for SystemInit_ExtMemCtl; always internal RAM used */
  42. /**
  43. * @brief This is the code that gets called when the processor first
  44. * starts execution following a reset event. Only the absolutely
  45. * necessary set is performed, after which the application
  46. * supplied main() routine is called.
  47. * @param None
  48. * @retval : None
  49. */
  50. .section .text.Reset_Handler
  51. .weak Reset_Handler
  52. .type Reset_Handler, %function
  53. Reset_Handler:
  54. /* Copy the data segment initializers from flash to SRAM */
  55. movs r1, #0
  56. b LoopCopyDataInit
  57. CopyDataInit:
  58. ldr r3, =_sidata
  59. ldr r3, [r3, r1]
  60. str r3, [r0, r1]
  61. adds r1, r1, #4
  62. LoopCopyDataInit:
  63. ldr r0, =_sdata
  64. ldr r3, =_edata
  65. adds r2, r0, r1
  66. cmp r2, r3
  67. bcc CopyDataInit
  68. ldr r2, =_sbss
  69. b LoopFillZerobss
  70. /* Zero fill the bss segment. */
  71. FillZerobss:
  72. movs r3, #0
  73. str r3, [r2], #4
  74. LoopFillZerobss:
  75. ldr r3, = _ebss
  76. cmp r2, r3
  77. bcc FillZerobss
  78. /* Call the clock system intitialization function.*/
  79. bl SystemInit
  80. /* Call static constructors */
  81. bl __libc_init_array
  82. /* Call the application's entry point.*/
  83. bl main
  84. bx lr
  85. .size Reset_Handler, .-Reset_Handler
  86. /**
  87. * @brief This is the code that gets called when the processor receives an
  88. * unexpected interrupt. This simply enters an infinite loop, preserving
  89. * the system state for examination by a debugger.
  90. * @param None
  91. * @retval None
  92. */
  93. .section .text.Default_Handler,"ax",%progbits
  94. Default_Handler:
  95. Infinite_Loop:
  96. b Infinite_Loop
  97. .size Default_Handler, .-Default_Handler
  98. /******************************************************************************
  99. *
  100. * The minimal vector table for a Cortex M3. Note that the proper constructs
  101. * must be placed on this to ensure that it ends up at physical address
  102. * 0x0000.0000.
  103. *
  104. *******************************************************************************/
  105. .section .isr_vector,"a",%progbits
  106. .type g_pfnVectors, %object
  107. .size g_pfnVectors, .-g_pfnVectors
  108. g_pfnVectors:
  109. .word _estack
  110. .word Reset_Handler
  111. .word NMI_Handler
  112. .word HardFault_Handler
  113. .word MemManage_Handler
  114. .word BusFault_Handler
  115. .word UsageFault_Handler
  116. .word 0
  117. .word 0
  118. .word 0
  119. .word 0
  120. .word SVC_Handler
  121. .word DebugMon_Handler
  122. .word 0
  123. .word PendSV_Handler
  124. .word SysTick_Handler
  125. /* External Interrupts */
  126. .word WWDG_IRQHandler /* Window WatchDog */
  127. .word PVD_IRQHandler /* PVD through EXTI Line detection */
  128. .word TAMPER_IRQHandler /* Tamper */
  129. .word RTC_WKUP_IRQHandler /* RTC Wakeup */
  130. .word FLASH_IRQHandler /* FLASH */
  131. .word RCC_IRQHandler /* RCC */
  132. .word EXTI0_IRQHandler /* EXTI Line0 */
  133. .word EXTI1_IRQHandler /* EXTI Line1 */
  134. .word EXTI2_IRQHandler /* EXTI Line2 */
  135. .word EXTI3_IRQHandler /* EXTI Line3 */
  136. .word EXTI4_IRQHandler /* EXTI Line4 */
  137. .word DMA1_Channel1_IRQHandler /* DMA1 Channel 1 */
  138. .word DMA1_Channel2_IRQHandler /* DMA1 Channel 2 */
  139. .word DMA1_Channel3_IRQHandler /* DMA1 Channel 3 */
  140. .word DMA1_Channel4_IRQHandler /* DMA1 Channel 4 */
  141. .word DMA1_Channel5_IRQHandler /* DMA1 Channel 5 */
  142. .word DMA1_Channel6_IRQHandler /* DMA1 Channel 6 */
  143. .word DMA1_Channel7_IRQHandler /* DMA1 Channel 7 */
  144. .word ADC1_2_IRQHandler /* ADC1, ADC2 */
  145. .word USB_HP_CAN1_TX_IRQHandler /* USB High Priority or CAN1 TX */
  146. .word USB_LP_CAN1_RX0_IRQHandler /* USB Low Priority or CAN1 RX0 */
  147. .word CAN1_RX1_IRQHandler /* CAN1 RX1 */
  148. .word CAN1_SCE_IRQHandler /* CAN1 SCE */
  149. .word EXTI9_5_IRQHandler /* EXTI Line 9..5 */
  150. .word TIM1_BRK_IRQHandler /* TIM1 Break */
  151. .word TIM1_UP_IRQHandler /* TIM1 Update */
  152. .word TIM1_TRG_COM_IRQHandler /* TIM1 Trigger and Commutation */
  153. .word TIM1_CC_IRQHandler /* TIM1 Capture Compare */
  154. .word TIM2_IRQHandler /* TIM2 */
  155. .word TIM3_IRQHandler /* TIM3 */
  156. .word TIM4_IRQHandler /* TIM4 */
  157. .word I2C1_EV_IRQHandler /* I2C1 Event */
  158. .word I2C1_ER_IRQHandler /* I2C1 Error */
  159. .word I2C2_EV_IRQHandler /* I2C2 Event */
  160. .word I2C2_ER_IRQHandler /* I2C2 Error */
  161. .word SPI1_IRQHandler /* SPI1 */
  162. .word SPI2_IRQHandler /* SPI2 */
  163. .word USART1_IRQHandler /* USART1 */
  164. .word USART2_IRQHandler /* USART2 */
  165. .word USART3_IRQHandler /* USART3 */
  166. .word EXTI15_10_IRQHandler /* EXTI Line 15..10 */
  167. .word RTCAlarm_IRQHandler /* RTC Alarm through EXTI Line */
  168. .word USBWakeUp_IRQHandler /* USB Wakeup from suspend */
  169. .word TIM8_BRK_IRQHandler /* TIM8 Break */
  170. .word TIM8_UP_IRQHandler /* TIM8 Update */
  171. .word TIM8_TRG_COM_IRQHandler /* TIM8 Trigger and Commutation */
  172. .word TIM8_CC_IRQHandler /* TIM8 Capture Compare */
  173. .word ADC3_4_IRQHandler /* ADC3 & ADC4 */
  174. .word XFMC_IRQHandler /* XFMC */
  175. .word SDIO_IRQHandler /* SDIO */
  176. .word TIM5_IRQHandler /* TIM5 */
  177. .word SPI3_IRQHandler /* SPI3 */
  178. .word UART4_IRQHandler /* UART4 */
  179. .word UART5_IRQHandler /* UART5 */
  180. .word TIM6_IRQHandler /* TIM6 */
  181. .word TIM7_IRQHandler /* TIM7 */
  182. .word DMA2_Channel1_IRQHandler /* DMA2 Channel1 */
  183. .word DMA2_Channel2_IRQHandler /* DMA2 Channel2 */
  184. .word DMA2_Channel3_IRQHandler /* DMA2 Channel3 */
  185. .word DMA2_Channel4_IRQHandler /* DMA2 Channel4 */
  186. .word DMA2_Channel5_IRQHandler /* DMA2 Channel5 */
  187. .word ETH_IRQHandler /* Ethernet global interrupt */
  188. .word ETH_WKUP_IRQHandler /* Ethernet Wakeup through EXTI line interrupt */
  189. .word CAN2_TX_IRQHandler /* CAN2 TX */
  190. .word CAN2_RX0_IRQHandler /* CAN2 RX0 */
  191. .word CAN2_RX1_IRQHandler /* CAN2 RX1 */
  192. .word CAN2_SCE_IRQHandler /* CAN2 SCE */
  193. .word QSPI_IRQHandler /* QSPI */
  194. .word DMA2_Channel6_IRQHandler /* DMA2 Channel6 */
  195. .word DMA2_Channel7_IRQHandler /* DMA2 Channel7 */
  196. .word I2C3_EV_IRQHandler /* I2C3 event */
  197. .word I2C3_ER_IRQHandler /* I2C3 error */
  198. .word I2C4_EV_IRQHandler /* I2C4 event */
  199. .word I2C4_ER_IRQHandler /* I2C4 error */
  200. .word UART6_IRQHandler /* UART6 */
  201. .word UART7_IRQHandler /* UART7 */
  202. .word DMA1_Channel8_IRQHandler /* DMA1 Channel8 */
  203. .word DMA2_Channel8_IRQHandler /* DMA2 Channel8 */
  204. .word DVP_IRQHandler /* DVP */
  205. .word SAC_IRQHandler /* SAC */
  206. .word MMU_IRQHandler /* MMU */
  207. .word TSC_IRQHandler /* TSC */
  208. /*******************************************************************************
  209. *
  210. * Provide weak aliases for each Exception handler to the Default_Handler.
  211. * As they are weak aliases, any function with the same name will override
  212. * this definition.
  213. *
  214. *******************************************************************************/
  215. .weak NMI_Handler
  216. .thumb_set NMI_Handler,Default_Handler
  217. .weak HardFault_Handler
  218. .thumb_set HardFault_Handler,Default_Handler
  219. .weak MemManage_Handler
  220. .thumb_set MemManage_Handler,Default_Handler
  221. .weak BusFault_Handler
  222. .thumb_set BusFault_Handler,Default_Handler
  223. .weak UsageFault_Handler
  224. .thumb_set UsageFault_Handler,Default_Handler
  225. .weak SVC_Handler
  226. .thumb_set SVC_Handler,Default_Handler
  227. .weak DebugMon_Handler
  228. .thumb_set DebugMon_Handler,Default_Handler
  229. .weak PendSV_Handler
  230. .thumb_set PendSV_Handler,Default_Handler
  231. .weak SysTick_Handler
  232. .thumb_set SysTick_Handler,Default_Handler
  233. .weak WWDG_IRQHandler
  234. .thumb_set WWDG_IRQHandler,Default_Handler
  235. .weak PVD_IRQHandler
  236. .thumb_set PVD_IRQHandler,Default_Handler
  237. .weak TAMPER_IRQHandler
  238. .thumb_set TAMPER_IRQHandler,Default_Handler
  239. .weak RTC_WKUP_IRQHandler
  240. .thumb_set RTC_WKUP_IRQHandler,Default_Handler
  241. .weak FLASH_IRQHandler
  242. .thumb_set FLASH_IRQHandler,Default_Handler
  243. .weak RCC_IRQHandler
  244. .thumb_set RCC_IRQHandler,Default_Handler
  245. .weak EXTI0_IRQHandler
  246. .thumb_set EXTI0_IRQHandler,Default_Handler
  247. .weak EXTI1_IRQHandler
  248. .thumb_set EXTI1_IRQHandler,Default_Handler
  249. .weak EXTI2_IRQHandler
  250. .thumb_set EXTI2_IRQHandler,Default_Handler
  251. .weak EXTI3_IRQHandler
  252. .thumb_set EXTI3_IRQHandler,Default_Handler
  253. .weak EXTI4_IRQHandler
  254. .thumb_set EXTI4_IRQHandler,Default_Handler
  255. .weak DMA1_Channel1_IRQHandler
  256. .thumb_set DMA1_Channel1_IRQHandler,Default_Handler
  257. .weak DMA1_Channel2_IRQHandler
  258. .thumb_set DMA1_Channel2_IRQHandler,Default_Handler
  259. .weak DMA1_Channel3_IRQHandler
  260. .thumb_set DMA1_Channel3_IRQHandler,Default_Handler
  261. .weak DMA1_Channel4_IRQHandler
  262. .thumb_set DMA1_Channel4_IRQHandler,Default_Handler
  263. .weak DMA1_Channel5_IRQHandler
  264. .thumb_set DMA1_Channel5_IRQHandler,Default_Handler
  265. .weak DMA1_Channel6_IRQHandler
  266. .thumb_set DMA1_Channel6_IRQHandler,Default_Handler
  267. .weak DMA1_Channel7_IRQHandler
  268. .thumb_set DMA1_Channel7_IRQHandler,Default_Handler
  269. .weak ADC1_2_IRQHandler
  270. .thumb_set ADC1_2_IRQHandler,Default_Handler
  271. .weak USB_HP_CAN1_TX_IRQHandler
  272. .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler
  273. .weak USB_LP_CAN1_RX0_IRQHandler
  274. .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler
  275. .weak CAN1_RX1_IRQHandler
  276. .thumb_set CAN1_RX1_IRQHandler,Default_Handler
  277. .weak CAN1_SCE_IRQHandler
  278. .thumb_set CAN1_SCE_IRQHandler,Default_Handler
  279. .weak EXTI9_5_IRQHandler
  280. .thumb_set EXTI9_5_IRQHandler,Default_Handler
  281. .weak TIM1_BRK_IRQHandler
  282. .thumb_set TIM1_BRK_IRQHandler,Default_Handler
  283. .weak TIM1_UP_IRQHandler
  284. .thumb_set TIM1_UP_IRQHandler,Default_Handler
  285. .weak TIM1_TRG_COM_IRQHandler
  286. .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler
  287. .weak TIM1_CC_IRQHandler
  288. .thumb_set TIM1_CC_IRQHandler,Default_Handler
  289. .weak TIM2_IRQHandler
  290. .thumb_set TIM2_IRQHandler,Default_Handler
  291. .weak TIM3_IRQHandler
  292. .thumb_set TIM3_IRQHandler,Default_Handler
  293. .weak TIM4_IRQHandler
  294. .thumb_set TIM4_IRQHandler,Default_Handler
  295. .weak I2C1_EV_IRQHandler
  296. .thumb_set I2C1_EV_IRQHandler,Default_Handler
  297. .weak I2C1_ER_IRQHandler
  298. .thumb_set I2C1_ER_IRQHandler,Default_Handler
  299. .weak I2C2_EV_IRQHandler
  300. .thumb_set I2C2_EV_IRQHandler,Default_Handler
  301. .weak I2C2_ER_IRQHandler
  302. .thumb_set I2C2_ER_IRQHandler,Default_Handler
  303. .weak SPI1_IRQHandler
  304. .thumb_set SPI1_IRQHandler,Default_Handler
  305. .weak SPI2_IRQHandler
  306. .thumb_set SPI2_IRQHandler,Default_Handler
  307. .weak USART1_IRQHandler
  308. .thumb_set USART1_IRQHandler,Default_Handler
  309. .weak USART2_IRQHandler
  310. .thumb_set USART2_IRQHandler,Default_Handler
  311. .weak USART3_IRQHandler
  312. .thumb_set USART3_IRQHandler,Default_Handler
  313. .weak EXTI15_10_IRQHandler
  314. .thumb_set EXTI15_10_IRQHandler,Default_Handler
  315. .weak RTCAlarm_IRQHandler
  316. .thumb_set RTCAlarm_IRQHandler,Default_Handler
  317. .weak USBWakeUp_IRQHandler
  318. .thumb_set USBWakeUp_IRQHandler,Default_Handler
  319. .weak TIM8_BRK_IRQHandler
  320. .thumb_set TIM8_BRK_IRQHandler,Default_Handler
  321. .weak TIM8_UP_IRQHandler
  322. .thumb_set TIM8_UP_IRQHandler,Default_Handler
  323. .weak TIM8_TRG_COM_IRQHandler
  324. .thumb_set TIM8_TRG_COM_IRQHandler,Default_Handler
  325. .weak TIM8_CC_IRQHandler
  326. .thumb_set TIM8_CC_IRQHandler,Default_Handler
  327. .weak ADC3_4_IRQHandler
  328. .thumb_set ADC3_4_IRQHandler,Default_Handler
  329. .weak XFMC_IRQHandler
  330. .thumb_set XFMC_IRQHandler,Default_Handler
  331. .weak SDIO_IRQHandler
  332. .thumb_set SDIO_IRQHandler,Default_Handler
  333. .weak TIM5_IRQHandler
  334. .thumb_set TIM5_IRQHandler,Default_Handler
  335. .weak SPI3_IRQHandler
  336. .thumb_set SPI3_IRQHandler,Default_Handler
  337. .weak UART4_IRQHandler
  338. .thumb_set UART4_IRQHandler,Default_Handler
  339. .weak UART5_IRQHandler
  340. .thumb_set UART5_IRQHandler,Default_Handler
  341. .weak TIM6_IRQHandler
  342. .thumb_set TIM6_IRQHandler,Default_Handler
  343. .weak TIM7_IRQHandler
  344. .thumb_set TIM7_IRQHandler,Default_Handler
  345. .weak DMA2_Channel1_IRQHandler
  346. .thumb_set DMA2_Channel1_IRQHandler,Default_Handler
  347. .weak DMA2_Channel2_IRQHandler
  348. .thumb_set DMA2_Channel2_IRQHandler,Default_Handler
  349. .weak DMA2_Channel3_IRQHandler
  350. .thumb_set DMA2_Channel3_IRQHandler,Default_Handler
  351. .weak DMA2_Channel4_IRQHandler
  352. .thumb_set DMA2_Channel4_IRQHandler,Default_Handler
  353. .weak DMA2_Channel5_IRQHandler
  354. .thumb_set DMA2_Channel5_IRQHandler,Default_Handler
  355. .weak ETH_IRQHandler
  356. .thumb_set ETH_IRQHandler,Default_Handler
  357. .weak ETH_WKUP_IRQHandler
  358. .thumb_set ETH_WKUP_IRQHandler,Default_Handler
  359. .weak CAN2_TX_IRQHandler
  360. .thumb_set CAN2_TX_IRQHandler,Default_Handler
  361. .weak CAN2_RX0_IRQHandler
  362. .thumb_set CAN2_RX0_IRQHandler,Default_Handler
  363. .weak CAN2_RX1_IRQHandler
  364. .thumb_set CAN2_RX1_IRQHandler,Default_Handler
  365. .weak CAN2_SCE_IRQHandler
  366. .thumb_set CAN2_SCE_IRQHandler,Default_Handler
  367. .weak QSPI_IRQHandler
  368. .thumb_set QSPI_IRQHandler,Default_Handler
  369. .weak DMA2_Channel6_IRQHandler
  370. .thumb_set DMA2_Channel6_IRQHandler,Default_Handler
  371. .weak DMA2_Channel7_IRQHandler
  372. .thumb_set DMA2_Channel7_IRQHandler,Default_Handler
  373. .weak I2C3_EV_IRQHandler
  374. .thumb_set I2C3_EV_IRQHandler,Default_Handler
  375. .weak I2C3_ER_IRQHandler
  376. .thumb_set I2C3_ER_IRQHandler,Default_Handler
  377. .weak I2C4_EV_IRQHandler
  378. .thumb_set I2C4_EV_IRQHandler,Default_Handler
  379. .weak I2C4_ER_IRQHandler
  380. .thumb_set I2C4_ER_IRQHandler,Default_Handler
  381. .weak UART6_IRQHandler
  382. .thumb_set UART6_IRQHandler,Default_Handler
  383. .weak UART7_IRQHandler
  384. .thumb_set UART7_IRQHandler,Default_Handler
  385. .weak DMA1_Channel8_IRQHandler
  386. .thumb_set DMA1_Channel8_IRQHandler,Default_Handler
  387. .weak DMA2_Channel8_IRQHandler
  388. .thumb_set DMA2_Channel8_IRQHandler,Default_Handler
  389. .weak DVP_IRQHandler
  390. .thumb_set DVP_IRQHandler,Default_Handler
  391. .weak SAC_IRQHandler
  392. .thumb_set SAC_IRQHandler,Default_Handler
  393. .weak MMU_IRQHandler
  394. .thumb_set MMU_IRQHandler,Default_Handler
  395. .weak TSC_IRQHandler
  396. .thumb_set TSC_IRQHandler,Default_Handler