startup_LPC54114_cm0plus.S 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644
  1. /* ---------------------------------------------------------------------------------------*/
  2. /* @file: startup_LPC54114_cm0plus.S */
  3. /* @purpose: CMSIS Cortex-M0 Core Device Startup File */
  4. /* LPC54114_cm0plus */
  5. /* @version: 1.0 */
  6. /* @date: 2016-11-2 */
  7. /* @build: b161214 */
  8. /* ---------------------------------------------------------------------------------------*/
  9. /* */
  10. /* The Clear BSD License */
  11. /* Copyright 1997-2016 Freescale Semiconductor, Inc. */
  12. /* Copyright 2016-2017 NXP */
  13. /* All rights reserved. */
  14. /* */
  15. /* Redistribution and use in source and binary forms, with or without modification, */
  16. /* are permitted (subject to the limitations in the disclaimer below) provided */
  17. /* that the following conditions are met: */
  18. /* */
  19. /* 1. Redistributions of source code must retain the above copyright notice, this list */
  20. /* of conditions and the following disclaimer. */
  21. /* */
  22. /* 2. Redistributions in binary form must reproduce the above copyright notice, this */
  23. /* list of conditions and the following disclaimer in the documentation and/or */
  24. /* other materials provided with the distribution. */
  25. /* */
  26. /* 3. Neither the name of the copyright holder nor the names of its */
  27. /* contributors may be used to endorse or promote products derived from this */
  28. /* software without specific prior written permission. */
  29. /* */
  30. /* NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S' PATENT RIGHTS ARE GRANTED BY THIS LICENSE.*/
  31. /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND */
  32. /* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED */
  33. /* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */
  34. /* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR */
  35. /* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES */
  36. /* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */
  37. /* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON */
  38. /* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */
  39. /* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */
  40. /* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
  41. /*****************************************************************************/
  42. /* Version: GCC for ARM Embedded Processors */
  43. /*****************************************************************************/
  44. .syntax unified
  45. .arch armv7-m
  46. .section .isr_vector, "a"
  47. .align 2
  48. .globl __Vectors
  49. __Vectors:
  50. .long __StackTop /* Top of Stack */
  51. .long Reset_Handler /* Reset Handler */
  52. .long NMI_Handler /* NMI Handler*/
  53. .long HardFault_Handler /* Hard Fault Handler*/
  54. .long 0 /* Reserved*/
  55. .long 0 /* Reserved*/
  56. .long 0 /* Reserved*/
  57. .long 0 /* Reserved*/
  58. .long 0 /* Reserved*/
  59. .long 0 /* Reserved*/
  60. .long 0 /* Reserved*/
  61. .long SVC_Handler /* SVCall Handler*/
  62. .long 0 /* Reserved*/
  63. .long 0 /* Reserved*/
  64. .long PendSV_Handler /* PendSV Handler*/
  65. .long SysTick_Handler /* SysTick Handler*/
  66. /* External Interrupts*/
  67. .long WDT_BOD_IRQHandler /* Watchdog Timer, Brownout detect */
  68. .long DMA0_IRQHandler /* DMA controller interrupt */
  69. .long GINT0_IRQHandler /* GPIO group 0 */
  70. .long GINT1_IRQHandler /* GPIO group 1 */
  71. .long PIN_INT0_IRQHandler /* Pin interrupt 0 or pattern match engine slice 0 */
  72. .long PIN_INT1_IRQHandler /* Pin interrupt 1 or pattern match engine slice 1 */
  73. .long PIN_INT2_IRQHandler /* Pin interrupt 2 or pattern match engine slice 2 */
  74. .long PIN_INT3_IRQHandler /* Pin interrupt 3 or pattern match engine slice 3 */
  75. .long UTICK0_IRQHandler /* Micro-tick Timer */
  76. .long MRT0_IRQHandler /* Multi-rate timer */
  77. .long CTIMER0_IRQHandler /* Standard counter/timer CTIMER0 */
  78. .long CTIMER1_IRQHandler /* Standard counter/timer CTIMER1 */
  79. .long SCT0_IRQHandler /* SCTimer/PWM */
  80. .long CTIMER3_IRQHandler /* Standard counter/timer CTIMER3 */
  81. .long FLEXCOMM0_IRQHandler /* Flexcomm Interface 0 (USART, SPI, I2C, FLEXCOMM) */
  82. .long FLEXCOMM1_IRQHandler /* Flexcomm Interface 1 (USART, SPI, I2C, FLEXCOMM) */
  83. .long FLEXCOMM2_IRQHandler /* Flexcomm Interface 2 (USART, SPI, I2C, FLEXCOMM) */
  84. .long FLEXCOMM3_IRQHandler /* Flexcomm Interface 3 (USART, SPI, I2C, FLEXCOMM) */
  85. .long FLEXCOMM4_IRQHandler /* Flexcomm Interface 4 (USART, SPI, I2C, FLEXCOMM) */
  86. .long FLEXCOMM5_IRQHandler /* Flexcomm Interface 5 (USART, SPI, I2C, FLEXCOMM) */
  87. .long FLEXCOMM6_IRQHandler /* Flexcomm Interface 6 (USART, SPI, I2C, FLEXCOMM) */
  88. .long FLEXCOMM7_IRQHandler /* Flexcomm Interface 7 (USART, SPI, I2C, FLEXCOMM) */
  89. .long ADC0_SEQA_IRQHandler /* ADC0 sequence A completion */
  90. .long ADC0_SEQB_IRQHandler /* ADC0 sequence B completion */
  91. .long ADC0_THCMP_IRQHandler /* ADC0 threshold compare and error. */
  92. .long DMIC0_IRQHandler /* RTC alarm and wake-up interrupts */
  93. .long HWVAD0_IRQHandler /* Hardware Voice Activity Detector */
  94. .long USB0_NEEDCLK_IRQHandler /* USB Activity Wake-up Interrupt */
  95. .long USB0_IRQHandler /* USB device */
  96. .long RTC_IRQHandler /* RTC alarm and wake-up interrupts */
  97. .long IOH_IRQHandler /* IOH interrupt */
  98. .long MAILBOX_IRQHandler /* Mailbox interrupt */
  99. .size __Vectors, . - __Vectors
  100. .text
  101. .thumb
  102. #ifndef SLAVEBOOT
  103. rel_vals:
  104. .long 0xE000ED00 /* cpu_id */
  105. .long 0x40000800 /* cpu_ctrl */
  106. .long 0x40000804 /* coproc_boot */
  107. .long 0x40000808 /* coproc_stack */
  108. .short 0x0FFF
  109. .short 0x0C24
  110. #endif
  111. /* Reset Handler */
  112. .thumb_func
  113. .align 2
  114. .globl Reset_Handler
  115. .weak Reset_Handler
  116. .type Reset_Handler, %function
  117. Reset_Handler:
  118. #ifndef SLAVEBOOT
  119. /* Both the M0+ and M4 core come via this shared startup code,
  120. * but the M0+ and M4 core have different vector tables.
  121. * Determine if the core executing this code is the master or
  122. * the slave and handle each core state individually. */
  123. shared_boot_entry:
  124. ldr r6, =rel_vals
  125. /* Flag for slave core (0) */
  126. movs r4, 0
  127. movs r5, 1
  128. /* Determine which core (M0+ or M4) this code is running on */
  129. /* r2 = (((*cpu_id) >> 4) & 0xFFF); (M4 core == 0xC24) */
  130. get_current_core_id:
  131. ldr r0, [r6, #0]
  132. ldr r1, [r0] /* r1 = CPU ID status */
  133. lsrs r1, r1, #4 /* Right justify 12 CPU ID bits */
  134. ldrh r2, [r6, #16] /* Mask for CPU ID bits */
  135. ands r2, r1, r2 /* r2 = ARM COrtex CPU ID */
  136. ldrh r3, [r6, #18] /* Mask for CPU ID bits */
  137. cmp r3, r2 /* Core ID matches M4 identifier */
  138. bne get_master_status
  139. mov r4, r5 /* Set flag for master core (1) */
  140. /* Determine if M4 core is the master or slave */
  141. /* r3 = ((*cpu_ctrl) & 1); (0 == m0+, 1 == M4) */
  142. get_master_status:
  143. ldr r0, [r6, #4]
  144. ldr r3, [r0] /* r3 = SYSCON co-processor CPU control status */
  145. ands r3, r3, r5 /* r3 = (Bit 0: 1 = M4 is master, 0 = M4 is slave) */
  146. /* Select boot based on selected master core and core ID */
  147. select_boot:
  148. eors r3, r3, r4 /* r4 = (Bit 0: 0 = master, 1 = slave) */
  149. bne slave_boot
  150. b normal_boot
  151. /* Slave boot */
  152. slave_boot:
  153. ldr r0, [r6, #8]
  154. ldr r2, [r0] /* r1 = SYSCON co-processor boot address */
  155. cmp r2, #0 /* Slave boot address = 0 (not set up)? */
  156. beq cpu_sleep
  157. ldr r0, [r6, #12]
  158. ldr r1, [r0] /* r5 = SYSCON co-processor stack address */
  159. mov sp, r1 /* Update slave CPU stack pointer */
  160. /* Be sure to update VTOR for the slave MCU to point to the */
  161. /* slave vector table in boot memory */
  162. bx r2 /* Jump to slave boot address */
  163. /* Slave isn't yet setup for system boot from the master */
  164. /* so sleep until the master sets it up and then reboots it */
  165. cpu_sleep:
  166. mov sp, r5 /* Will force exception if something happens */
  167. cpu_sleep_wfi:
  168. wfi /* Sleep forever until master reboots */
  169. b cpu_sleep_wfi
  170. #endif /* defined(SLAVEBOOT) */
  171. #ifndef __START
  172. #define __START _start
  173. #endif
  174. #ifndef __ATOLLIC__
  175. normal_boot:
  176. #ifndef __NO_SYSTEM_INIT
  177. ldr r0,=SystemInit
  178. blx r0
  179. #endif
  180. /* Loop to copy data from read only memory to RAM. The ranges
  181. * of copy from/to are specified by following symbols evaluated in
  182. * linker script.
  183. * __etext: End of code section, i.e., begin of data sections to copy from.
  184. * __data_start__/__data_end__: RAM address range that data should be
  185. * copied to. Both must be aligned to 4 bytes boundary. */
  186. ldr r1, =__etext
  187. ldr r2, =__data_start__
  188. ldr r3, =__data_end__
  189. subs r3, r2
  190. ble .LC0
  191. .LC1:
  192. subs r3, 4
  193. ldr r0, [r1,r3]
  194. str r0, [r2,r3]
  195. bgt .LC1
  196. .LC0:
  197. #ifdef __STARTUP_CLEAR_BSS
  198. /* This part of work usually is done in C library startup code. Otherwise,
  199. * define this macro to enable it in this startup.
  200. *
  201. * Loop to zero out BSS section, which uses following symbols
  202. * in linker script:
  203. * __bss_start__: start of BSS section. Must align to 4
  204. * __bss_end__: end of BSS section. Must align to 4
  205. */
  206. ldr r1, =__bss_start__
  207. ldr r2, =__bss_end__
  208. subs r2, r1
  209. ble .LC3
  210. movs r0, 0
  211. .LC2:
  212. str r0, [r1, r2]
  213. subs r2, 4
  214. bge .LC2
  215. .LC3:
  216. #endif /* __STARTUP_CLEAR_BSS */
  217. ldr r0,=__START
  218. blx r0
  219. #else
  220. ldr r0,=__libc_init_array
  221. blx r0
  222. ldr r0,=main
  223. bx r0
  224. #endif
  225. .pool
  226. .size Reset_Handler, . - Reset_Handler
  227. .align 1
  228. .thumb_func
  229. .weak DefaultISR
  230. .type DefaultISR, %function
  231. DefaultISR:
  232. b DefaultISR
  233. .size DefaultISR, . - DefaultISR
  234. .align 1
  235. .thumb_func
  236. .weak NMI_Handler
  237. .type NMI_Handler, %function
  238. NMI_Handler:
  239. ldr r0,=NMI_Handler
  240. bx r0
  241. .size NMI_Handler, . - NMI_Handler
  242. .align 1
  243. .thumb_func
  244. .weak HardFault_Handler
  245. .type HardFault_Handler, %function
  246. HardFault_Handler:
  247. ldr r0,=HardFault_Handler
  248. bx r0
  249. .size HardFault_Handler, . - HardFault_Handler
  250. .align 1
  251. .thumb_func
  252. .weak SVC_Handler
  253. .type SVC_Handler, %function
  254. SVC_Handler:
  255. ldr r0,=SVC_Handler
  256. bx r0
  257. .size SVC_Handler, . - SVC_Handler
  258. .align 1
  259. .thumb_func
  260. .weak PendSV_Handler
  261. .type PendSV_Handler, %function
  262. PendSV_Handler:
  263. ldr r0,=PendSV_Handler
  264. bx r0
  265. .size PendSV_Handler, . - PendSV_Handler
  266. .align 1
  267. .thumb_func
  268. .weak SysTick_Handler
  269. .type SysTick_Handler, %function
  270. SysTick_Handler:
  271. ldr r0,=SysTick_Handler
  272. bx r0
  273. .size SysTick_Handler, . - SysTick_Handler
  274. .align 1
  275. .thumb_func
  276. .weak WDT_BOD_IRQHandler
  277. .type WDT_BOD_IRQHandler, %function
  278. WDT_BOD_IRQHandler:
  279. ldr r0,=WDT_BOD_DriverIRQHandler
  280. bx r0
  281. .size WDT_BOD_IRQHandler, . - WDT_BOD_IRQHandler
  282. .align 1
  283. .thumb_func
  284. .weak DMA0_IRQHandler
  285. .type DMA0_IRQHandler, %function
  286. DMA0_IRQHandler:
  287. ldr r0,=DMA0_DriverIRQHandler
  288. bx r0
  289. .size DMA0_IRQHandler, . - DMA0_IRQHandler
  290. .align 1
  291. .thumb_func
  292. .weak GINT0_IRQHandler
  293. .type GINT0_IRQHandler, %function
  294. GINT0_IRQHandler:
  295. ldr r0,=GINT0_DriverIRQHandler
  296. bx r0
  297. .size GINT0_IRQHandler, . - GINT0_IRQHandler
  298. .align 1
  299. .thumb_func
  300. .weak GINT1_IRQHandler
  301. .type GINT1_IRQHandler, %function
  302. GINT1_IRQHandler:
  303. ldr r0,=GINT1_DriverIRQHandler
  304. bx r0
  305. .size GINT1_IRQHandler, . - GINT1_IRQHandler
  306. .align 1
  307. .thumb_func
  308. .weak PIN_INT0_IRQHandler
  309. .type PIN_INT0_IRQHandler, %function
  310. PIN_INT0_IRQHandler:
  311. ldr r0,=PIN_INT0_DriverIRQHandler
  312. bx r0
  313. .size PIN_INT0_IRQHandler, . - PIN_INT0_IRQHandler
  314. .align 1
  315. .thumb_func
  316. .weak PIN_INT1_IRQHandler
  317. .type PIN_INT1_IRQHandler, %function
  318. PIN_INT1_IRQHandler:
  319. ldr r0,=PIN_INT1_DriverIRQHandler
  320. bx r0
  321. .size PIN_INT1_IRQHandler, . - PIN_INT1_IRQHandler
  322. .align 1
  323. .thumb_func
  324. .weak PIN_INT2_IRQHandler
  325. .type PIN_INT2_IRQHandler, %function
  326. PIN_INT2_IRQHandler:
  327. ldr r0,=PIN_INT2_DriverIRQHandler
  328. bx r0
  329. .size PIN_INT2_IRQHandler, . - PIN_INT2_IRQHandler
  330. .align 1
  331. .thumb_func
  332. .weak PIN_INT3_IRQHandler
  333. .type PIN_INT3_IRQHandler, %function
  334. PIN_INT3_IRQHandler:
  335. ldr r0,=PIN_INT3_DriverIRQHandler
  336. bx r0
  337. .size PIN_INT3_IRQHandler, . - PIN_INT3_IRQHandler
  338. .align 1
  339. .thumb_func
  340. .weak UTICK0_IRQHandler
  341. .type UTICK0_IRQHandler, %function
  342. UTICK0_IRQHandler:
  343. ldr r0,=UTICK0_DriverIRQHandler
  344. bx r0
  345. .size UTICK0_IRQHandler, . - UTICK0_IRQHandler
  346. .align 1
  347. .thumb_func
  348. .weak MRT0_IRQHandler
  349. .type MRT0_IRQHandler, %function
  350. MRT0_IRQHandler:
  351. ldr r0,=MRT0_DriverIRQHandler
  352. bx r0
  353. .size MRT0_IRQHandler, . - MRT0_IRQHandler
  354. .align 1
  355. .thumb_func
  356. .weak CTIMER0_IRQHandler
  357. .type CTIMER0_IRQHandler, %function
  358. CTIMER0_IRQHandler:
  359. ldr r0,=CTIMER0_DriverIRQHandler
  360. bx r0
  361. .size CTIMER0_IRQHandler, . - CTIMER0_IRQHandler
  362. .align 1
  363. .thumb_func
  364. .weak CTIMER1_IRQHandler
  365. .type CTIMER1_IRQHandler, %function
  366. CTIMER1_IRQHandler:
  367. ldr r0,=CTIMER1_DriverIRQHandler
  368. bx r0
  369. .size CTIMER1_IRQHandler, . - CTIMER1_IRQHandler
  370. .align 1
  371. .thumb_func
  372. .weak SCT0_IRQHandler
  373. .type SCT0_IRQHandler, %function
  374. SCT0_IRQHandler:
  375. ldr r0,=SCT0_DriverIRQHandler
  376. bx r0
  377. .size SCT0_IRQHandler, . - SCT0_IRQHandler
  378. .align 1
  379. .thumb_func
  380. .weak CTIMER3_IRQHandler
  381. .type CTIMER3_IRQHandler, %function
  382. CTIMER3_IRQHandler:
  383. ldr r0,=CTIMER3_DriverIRQHandler
  384. bx r0
  385. .size CTIMER3_IRQHandler, . - CTIMER3_IRQHandler
  386. .align 1
  387. .thumb_func
  388. .weak FLEXCOMM0_IRQHandler
  389. .type FLEXCOMM0_IRQHandler, %function
  390. FLEXCOMM0_IRQHandler:
  391. ldr r0,=FLEXCOMM0_DriverIRQHandler
  392. bx r0
  393. .size FLEXCOMM0_IRQHandler, . - FLEXCOMM0_IRQHandler
  394. .align 1
  395. .thumb_func
  396. .weak FLEXCOMM1_IRQHandler
  397. .type FLEXCOMM1_IRQHandler, %function
  398. FLEXCOMM1_IRQHandler:
  399. ldr r0,=FLEXCOMM1_DriverIRQHandler
  400. bx r0
  401. .size FLEXCOMM1_IRQHandler, . - FLEXCOMM1_IRQHandler
  402. .align 1
  403. .thumb_func
  404. .weak FLEXCOMM2_IRQHandler
  405. .type FLEXCOMM2_IRQHandler, %function
  406. FLEXCOMM2_IRQHandler:
  407. ldr r0,=FLEXCOMM2_DriverIRQHandler
  408. bx r0
  409. .size FLEXCOMM2_IRQHandler, . - FLEXCOMM2_IRQHandler
  410. .align 1
  411. .thumb_func
  412. .weak FLEXCOMM3_IRQHandler
  413. .type FLEXCOMM3_IRQHandler, %function
  414. FLEXCOMM3_IRQHandler:
  415. ldr r0,=FLEXCOMM3_DriverIRQHandler
  416. bx r0
  417. .size FLEXCOMM3_IRQHandler, . - FLEXCOMM3_IRQHandler
  418. .align 1
  419. .thumb_func
  420. .weak FLEXCOMM4_IRQHandler
  421. .type FLEXCOMM4_IRQHandler, %function
  422. FLEXCOMM4_IRQHandler:
  423. ldr r0,=FLEXCOMM4_DriverIRQHandler
  424. bx r0
  425. .size FLEXCOMM4_IRQHandler, . - FLEXCOMM4_IRQHandler
  426. .align 1
  427. .thumb_func
  428. .weak FLEXCOMM5_IRQHandler
  429. .type FLEXCOMM5_IRQHandler, %function
  430. FLEXCOMM5_IRQHandler:
  431. ldr r0,=FLEXCOMM5_DriverIRQHandler
  432. bx r0
  433. .size FLEXCOMM5_IRQHandler, . - FLEXCOMM5_IRQHandler
  434. .align 1
  435. .thumb_func
  436. .weak FLEXCOMM6_IRQHandler
  437. .type FLEXCOMM6_IRQHandler, %function
  438. FLEXCOMM6_IRQHandler:
  439. ldr r0,=FLEXCOMM6_DriverIRQHandler
  440. bx r0
  441. .size FLEXCOMM6_IRQHandler, . - FLEXCOMM6_IRQHandler
  442. .align 1
  443. .thumb_func
  444. .weak FLEXCOMM7_IRQHandler
  445. .type FLEXCOMM7_IRQHandler, %function
  446. FLEXCOMM7_IRQHandler:
  447. ldr r0,=FLEXCOMM7_DriverIRQHandler
  448. bx r0
  449. .size FLEXCOMM7_IRQHandler, . - FLEXCOMM7_IRQHandler
  450. .align 1
  451. .thumb_func
  452. .weak ADC0_SEQA_IRQHandler
  453. .type ADC0_SEQA_IRQHandler, %function
  454. ADC0_SEQA_IRQHandler:
  455. ldr r0,=ADC0_SEQA_DriverIRQHandler
  456. bx r0
  457. .size ADC0_SEQA_IRQHandler, . - ADC0_SEQA_IRQHandler
  458. .align 1
  459. .thumb_func
  460. .weak ADC0_SEQB_IRQHandler
  461. .type ADC0_SEQB_IRQHandler, %function
  462. ADC0_SEQB_IRQHandler:
  463. ldr r0,=ADC0_SEQB_DriverIRQHandler
  464. bx r0
  465. .size ADC0_SEQB_IRQHandler, . - ADC0_SEQB_IRQHandler
  466. .align 1
  467. .thumb_func
  468. .weak ADC0_THCMP_IRQHandler
  469. .type ADC0_THCMP_IRQHandler, %function
  470. ADC0_THCMP_IRQHandler:
  471. ldr r0,=ADC0_THCMP_DriverIRQHandler
  472. bx r0
  473. .size ADC0_THCMP_IRQHandler, . - ADC0_THCMP_IRQHandler
  474. .align 1
  475. .thumb_func
  476. .weak DMIC0_IRQHandler
  477. .type DMIC0_IRQHandler, %function
  478. DMIC0_IRQHandler:
  479. ldr r0,=DMIC0_DriverIRQHandler
  480. bx r0
  481. .size DMIC0_IRQHandler, . - DMIC0_IRQHandler
  482. .align 1
  483. .thumb_func
  484. .weak HWVAD0_IRQHandler
  485. .type HWVAD0_IRQHandler, %function
  486. HWVAD0_IRQHandler:
  487. ldr r0,=HWVAD0_DriverIRQHandler
  488. bx r0
  489. .size HWVAD0_IRQHandler, . - HWVAD0_IRQHandler
  490. .align 1
  491. .thumb_func
  492. .weak USB0_NEEDCLK_IRQHandler
  493. .type USB0_NEEDCLK_IRQHandler, %function
  494. USB0_NEEDCLK_IRQHandler:
  495. ldr r0,=USB0_NEEDCLK_DriverIRQHandler
  496. bx r0
  497. .size USB0_NEEDCLK_IRQHandler, . - USB0_NEEDCLK_IRQHandler
  498. .align 1
  499. .thumb_func
  500. .weak USB0_IRQHandler
  501. .type USB0_IRQHandler, %function
  502. USB0_IRQHandler:
  503. ldr r0,=USB0_DriverIRQHandler
  504. bx r0
  505. .size USB0_IRQHandler, . - USB0_IRQHandler
  506. .align 1
  507. .thumb_func
  508. .weak RTC_IRQHandler
  509. .type RTC_IRQHandler, %function
  510. RTC_IRQHandler:
  511. ldr r0,=RTC_DriverIRQHandler
  512. bx r0
  513. .size RTC_IRQHandler, . - RTC_IRQHandler
  514. .align 1
  515. .thumb_func
  516. .weak IOH_IRQHandler
  517. .type IOH_IRQHandler, %function
  518. IOH_IRQHandler:
  519. ldr r0,=IOH_DriverIRQHandler
  520. bx r0
  521. .size IOH_IRQHandler, . - IOH_IRQHandler
  522. .align 1
  523. .thumb_func
  524. .weak MAILBOX_IRQHandler
  525. .type MAILBOX_IRQHandler, %function
  526. MAILBOX_IRQHandler:
  527. ldr r0,=MAILBOX_DriverIRQHandler
  528. bx r0
  529. .size MAILBOX_IRQHandler, . - MAILBOX_IRQHandler
  530. /* Macro to define default handlers. Default handler
  531. * will be weak symbol and just dead loops. They can be
  532. * overwritten by other handlers */
  533. .macro def_irq_handler handler_name
  534. .weak \handler_name
  535. .set \handler_name, DefaultISR
  536. .endm
  537. /* Exception Handlers */
  538. def_irq_handler WDT_BOD_DriverIRQHandler /* Windowed watchdog timer, Brownout detect */
  539. def_irq_handler DMA0_DriverIRQHandler /* DMA controller */
  540. def_irq_handler GINT0_DriverIRQHandler /* GPIO group 0 */
  541. def_irq_handler GINT1_DriverIRQHandler /* GPIO group 1 */
  542. def_irq_handler PIN_INT0_DriverIRQHandler /* Pin interrupt 0 or pattern match engine slice 0 */
  543. def_irq_handler PIN_INT1_DriverIRQHandler /* Pin interrupt 1or pattern match engine slice 1 */
  544. def_irq_handler PIN_INT2_DriverIRQHandler /* Pin interrupt 2 or pattern match engine slice 2 */
  545. def_irq_handler PIN_INT3_DriverIRQHandler /* Pin interrupt 3 or pattern match engine slice 3 */
  546. def_irq_handler UTICK0_DriverIRQHandler /* Micro-tick Timer */
  547. def_irq_handler MRT0_DriverIRQHandler /* Multi-rate timer */
  548. def_irq_handler CTIMER0_DriverIRQHandler /* Standard counter/timer CTIMER0 */
  549. def_irq_handler CTIMER1_DriverIRQHandler /* Standard counter/timer CTIMER1 */
  550. def_irq_handler SCT0_DriverIRQHandler /* SCTimer/PWM */
  551. def_irq_handler CTIMER3_DriverIRQHandler /* Standard counter/timer CTIMER3 */
  552. def_irq_handler FLEXCOMM0_DriverIRQHandler /* Flexcomm Interface 0 (USART, SPI, I2C) */
  553. def_irq_handler FLEXCOMM1_DriverIRQHandler /* Flexcomm Interface 1 (USART, SPI, I2C) */
  554. def_irq_handler FLEXCOMM2_DriverIRQHandler /* Flexcomm Interface 2 (USART, SPI, I2C) */
  555. def_irq_handler FLEXCOMM3_DriverIRQHandler /* Flexcomm Interface 3 (USART, SPI, I2C) */
  556. def_irq_handler FLEXCOMM4_DriverIRQHandler /* Flexcomm Interface 4 (USART, SPI, I2C) */
  557. def_irq_handler FLEXCOMM5_DriverIRQHandler /* Flexcomm Interface 5 (USART, SPI, I2C) */
  558. def_irq_handler FLEXCOMM6_DriverIRQHandler /* Flexcomm Interface 6 (USART, SPI, I2C, I2S) */
  559. def_irq_handler FLEXCOMM7_DriverIRQHandler /* Flexcomm Interface 7 (USART, SPI, I2C, I2S) */
  560. def_irq_handler ADC0_SEQA_DriverIRQHandler /* ADC0 sequence A completion. */
  561. def_irq_handler ADC0_SEQB_DriverIRQHandler /* ADC0 sequence B completion. */
  562. def_irq_handler ADC0_THCMP_DriverIRQHandler /* ADC0 threshold compare and error. */
  563. def_irq_handler DMIC0_DriverIRQHandler /* Digital microphone and DMIC subsystem */
  564. def_irq_handler HWVAD0_DriverIRQHandler /* Hardware Voice sActivity Detector */
  565. def_irq_handler USB0_NEEDCLK_DriverIRQHandler /* USB Activity Wake-up Interrupt */
  566. def_irq_handler USB0_DriverIRQHandler /* USB device */
  567. def_irq_handler RTC_DriverIRQHandler /* RTC alarm and wake-up interrupts */
  568. def_irq_handler IOH_DriverIRQHandler /* IOH */
  569. def_irq_handler MAILBOX_DriverIRQHandler /* Mailbox interrupt (present on selected devices) */
  570. .end