startup_LPC54114_cm4.S 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767
  1. /* ---------------------------------------------------------------------------------------*/
  2. /* @file: startup_LPC54114_cm4.S */
  3. /* @purpose: CMSIS Cortex-M4 Core Device Startup File */
  4. /* LPC54114_cm4 */
  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 MemManage_Handler /* MPU Fault Handler*/
  55. .long BusFault_Handler /* Bus Fault Handler*/
  56. .long UsageFault_Handler /* Usage Fault Handler*/
  57. .long 0 /* Reserved*/
  58. .long 0 /* Reserved*/
  59. .long 0 /* Reserved*/
  60. .long 0 /* Reserved*/
  61. .long SVC_Handler /* SVCall Handler*/
  62. .long DebugMon_Handler /* Debug Monitor Handler*/
  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. .long PIN_INT4_IRQHandler /* Pin interrupt 4 or pattern match engine slice 4 int */
  100. .long PIN_INT5_IRQHandler /* Pin interrupt 5 or pattern match engine slice 5 int */
  101. .long PIN_INT6_IRQHandler /* Pin interrupt 6 or pattern match engine slice 6 int */
  102. .long PIN_INT7_IRQHandler /* Pin interrupt 7 or pattern match engine slice 7 int */
  103. .long CTIMER2_IRQHandler /* Standard counter/timer CTIMER2 */
  104. .long CTIMER4_IRQHandler /* Standard counter/timer CTIMER4 */
  105. .long 0 /* Reserved interrupt */
  106. .long SPIFI0_IRQHandler /* SPI flash interface */
  107. .size __Vectors, . - __Vectors
  108. .text
  109. .thumb
  110. #ifndef SLAVEBOOT
  111. rel_vals:
  112. .long 0xE000ED00 /* cpu_id */
  113. .long 0x40000800 /* cpu_ctrl */
  114. .long 0x40000804 /* coproc_boot */
  115. .long 0x40000808 /* coproc_stack */
  116. .short 0x0FFF
  117. .short 0x0C24
  118. #endif
  119. /* Reset Handler */
  120. .thumb_func
  121. .align 2
  122. .globl Reset_Handler
  123. .weak Reset_Handler
  124. .type Reset_Handler, %function
  125. Reset_Handler:
  126. #ifndef SLAVEBOOT
  127. /* Both the M0+ and M4 core come via this shared startup code,
  128. * but the M0+ and M4 core have different vector tables.
  129. * Determine if the core executing this code is the master or
  130. * the slave and handle each core state individually. */
  131. shared_boot_entry:
  132. ldr r6, =rel_vals
  133. /* Flag for slave core (0) */
  134. movs r4, 0
  135. movs r5, 1
  136. /* Determine which core (M0+ or M4) this code is running on */
  137. /* r2 = (((*cpu_id) >> 4) & 0xFFF); (M4 core == 0xC24) */
  138. get_current_core_id:
  139. ldr r0, [r6, #0]
  140. ldr r1, [r0] /* r1 = CPU ID status */
  141. lsrs r1, r1, #4 /* Right justify 12 CPU ID bits */
  142. ldrh r2, [r6, #16] /* Mask for CPU ID bits */
  143. ands r2, r1, r2 /* r2 = ARM COrtex CPU ID */
  144. ldrh r3, [r6, #18] /* Mask for CPU ID bits */
  145. cmp r3, r2 /* Core ID matches M4 identifier */
  146. bne get_master_status
  147. mov r4, r5 /* Set flag for master core (1) */
  148. /* Determine if M4 core is the master or slave */
  149. /* r3 = ((*cpu_ctrl) & 1); (0 == m0+, 1 == M4) */
  150. get_master_status:
  151. ldr r0, [r6, #4]
  152. ldr r3, [r0] /* r3 = SYSCON co-processor CPU control status */
  153. ands r3, r3, r5 /* r3 = (Bit 0: 1 = M4 is master, 0 = M4 is slave) */
  154. /* Select boot based on selected master core and core ID */
  155. select_boot:
  156. eors r3, r3, r4 /* r4 = (Bit 0: 0 = master, 1 = slave) */
  157. bne slave_boot
  158. b normal_boot
  159. /* Slave boot */
  160. slave_boot:
  161. ldr r0, [r6, #8]
  162. ldr r2, [r0] /* r1 = SYSCON co-processor boot address */
  163. cmp r2, #0 /* Slave boot address = 0 (not set up)? */
  164. beq cpu_sleep
  165. ldr r0, [r6, #12]
  166. ldr r1, [r0] /* r5 = SYSCON co-processor stack address */
  167. mov sp, r1 /* Update slave CPU stack pointer */
  168. /* Be sure to update VTOR for the slave MCU to point to the */
  169. /* slave vector table in boot memory */
  170. bx r2 /* Jump to slave boot address */
  171. /* Slave isn't yet setup for system boot from the master */
  172. /* so sleep until the master sets it up and then reboots it */
  173. cpu_sleep:
  174. mov sp, r5 /* Will force exception if something happens */
  175. cpu_sleep_wfi:
  176. wfi /* Sleep forever until master reboots */
  177. b cpu_sleep_wfi
  178. #endif /* defined(SLAVEBOOT) */
  179. #ifndef __START
  180. #define __START _start
  181. #endif
  182. #ifndef __ATOLLIC__
  183. normal_boot:
  184. #ifndef __NO_SYSTEM_INIT
  185. ldr r0,=SystemInit
  186. blx r0
  187. #endif
  188. /* Loop to copy data from read only memory to RAM. The ranges
  189. * of copy from/to are specified by following symbols evaluated in
  190. * linker script.
  191. * __etext: End of code section, i.e., begin of data sections to copy from.
  192. * __data_start__/__data_end__: RAM address range that data should be
  193. * copied to. Both must be aligned to 4 bytes boundary. */
  194. ldr r1, =__etext
  195. ldr r2, =__data_start__
  196. ldr r3, =__data_end__
  197. #if 1
  198. /* Here are two copies of loop implemenations. First one favors code size
  199. * and the second one favors performance. Default uses the first one.
  200. * Change to "#if 0" to use the second one */
  201. .LC0:
  202. cmp r2, r3
  203. ittt lt
  204. ldrlt r0, [r1], #4
  205. strlt r0, [r2], #4
  206. blt .LC0
  207. #else
  208. subs r3, r2
  209. ble .LC1
  210. .LC0:
  211. subs r3, #4
  212. ldr r0, [r1, r3]
  213. str r0, [r2, r3]
  214. bgt .LC0
  215. .LC1:
  216. #endif
  217. #ifdef __STARTUP_CLEAR_BSS
  218. /* This part of work usually is done in C library startup code. Otherwise,
  219. * define this macro to enable it in this startup.
  220. *
  221. * Loop to zero out BSS section, which uses following symbols
  222. * in linker script:
  223. * __bss_start__: start of BSS section. Must align to 4
  224. * __bss_end__: end of BSS section. Must align to 4
  225. */
  226. ldr r1, =__bss_start__
  227. ldr r2, =__bss_end__
  228. movs r0, 0
  229. .LC2:
  230. cmp r1, r2
  231. itt lt
  232. strlt r0, [r1], #4
  233. blt .LC2
  234. #endif /* __STARTUP_CLEAR_BSS */
  235. ldr r0,=entry
  236. blx r0
  237. #else
  238. ldr r0,=__libc_init_array
  239. blx r0
  240. ldr r0,=main
  241. bx r0
  242. #endif
  243. .pool
  244. .size Reset_Handler, . - Reset_Handler
  245. .align 1
  246. .thumb_func
  247. .weak DefaultISR
  248. .type DefaultISR, %function
  249. DefaultISR:
  250. b DefaultISR
  251. .size DefaultISR, . - DefaultISR
  252. .align 1
  253. .thumb_func
  254. .weak NMI_Handler
  255. .type NMI_Handler, %function
  256. NMI_Handler:
  257. ldr r0,=NMI_Handler
  258. bx r0
  259. .size NMI_Handler, . - NMI_Handler
  260. .align 1
  261. .thumb_func
  262. .weak HardFault_Handler
  263. .type HardFault_Handler, %function
  264. HardFault_Handler:
  265. ldr r0,=HardFault_Handler
  266. bx r0
  267. .size HardFault_Handler, . - HardFault_Handler
  268. .align 1
  269. .thumb_func
  270. .weak MemManage_Handler
  271. .type MemManage_Handler, %function
  272. MemManage_Handler:
  273. ldr r0,=MemManage_Handler
  274. bx r0
  275. .size MemManage_Handler, . - MemManage_Handler
  276. .align 1
  277. .thumb_func
  278. .weak BusFault_Handler
  279. .type BusFault_Handler, %function
  280. BusFault_Handler:
  281. ldr r0,=BusFault_Handler
  282. bx r0
  283. .size BusFault_Handler, . - BusFault_Handler
  284. .align 1
  285. .thumb_func
  286. .weak UsageFault_Handler
  287. .type UsageFault_Handler, %function
  288. UsageFault_Handler:
  289. ldr r0,=UsageFault_Handler
  290. bx r0
  291. .size UsageFault_Handler, . - UsageFault_Handler
  292. .align 1
  293. .thumb_func
  294. .weak SVC_Handler
  295. .type SVC_Handler, %function
  296. SVC_Handler:
  297. ldr r0,=SVC_Handler
  298. bx r0
  299. .size SVC_Handler, . - SVC_Handler
  300. .align 1
  301. .thumb_func
  302. .weak DebugMon_Handler
  303. .type DebugMon_Handler, %function
  304. DebugMon_Handler:
  305. ldr r0,=DebugMon_Handler
  306. bx r0
  307. .size DebugMon_Handler, . - DebugMon_Handler
  308. .align 1
  309. .thumb_func
  310. .weak PendSV_Handler
  311. .type PendSV_Handler, %function
  312. PendSV_Handler:
  313. ldr r0,=PendSV_Handler
  314. bx r0
  315. .size PendSV_Handler, . - PendSV_Handler
  316. .align 1
  317. .thumb_func
  318. .weak SysTick_Handler
  319. .type SysTick_Handler, %function
  320. SysTick_Handler:
  321. ldr r0,=SysTick_Handler
  322. bx r0
  323. .size SysTick_Handler, . - SysTick_Handler
  324. .align 1
  325. .thumb_func
  326. .weak WDT_BOD_IRQHandler
  327. .type WDT_BOD_IRQHandler, %function
  328. WDT_BOD_IRQHandler:
  329. ldr r0,=WDT_BOD_DriverIRQHandler
  330. bx r0
  331. .size WDT_BOD_IRQHandler, . - WDT_BOD_IRQHandler
  332. .align 1
  333. .thumb_func
  334. .weak DMA0_IRQHandler
  335. .type DMA0_IRQHandler, %function
  336. DMA0_IRQHandler:
  337. ldr r0,=DMA0_DriverIRQHandler
  338. bx r0
  339. .size DMA0_IRQHandler, . - DMA0_IRQHandler
  340. .align 1
  341. .thumb_func
  342. .weak GINT0_IRQHandler
  343. .type GINT0_IRQHandler, %function
  344. GINT0_IRQHandler:
  345. ldr r0,=GINT0_DriverIRQHandler
  346. bx r0
  347. .size GINT0_IRQHandler, . - GINT0_IRQHandler
  348. .align 1
  349. .thumb_func
  350. .weak GINT1_IRQHandler
  351. .type GINT1_IRQHandler, %function
  352. GINT1_IRQHandler:
  353. ldr r0,=GINT1_DriverIRQHandler
  354. bx r0
  355. .size GINT1_IRQHandler, . - GINT1_IRQHandler
  356. .align 1
  357. .thumb_func
  358. .weak PIN_INT0_IRQHandler
  359. .type PIN_INT0_IRQHandler, %function
  360. PIN_INT0_IRQHandler:
  361. ldr r0,=PIN_INT0_DriverIRQHandler
  362. bx r0
  363. .size PIN_INT0_IRQHandler, . - PIN_INT0_IRQHandler
  364. .align 1
  365. .thumb_func
  366. .weak PIN_INT1_IRQHandler
  367. .type PIN_INT1_IRQHandler, %function
  368. PIN_INT1_IRQHandler:
  369. ldr r0,=PIN_INT1_DriverIRQHandler
  370. bx r0
  371. .size PIN_INT1_IRQHandler, . - PIN_INT1_IRQHandler
  372. .align 1
  373. .thumb_func
  374. .weak PIN_INT2_IRQHandler
  375. .type PIN_INT2_IRQHandler, %function
  376. PIN_INT2_IRQHandler:
  377. ldr r0,=PIN_INT2_DriverIRQHandler
  378. bx r0
  379. .size PIN_INT2_IRQHandler, . - PIN_INT2_IRQHandler
  380. .align 1
  381. .thumb_func
  382. .weak PIN_INT3_IRQHandler
  383. .type PIN_INT3_IRQHandler, %function
  384. PIN_INT3_IRQHandler:
  385. ldr r0,=PIN_INT3_DriverIRQHandler
  386. bx r0
  387. .size PIN_INT3_IRQHandler, . - PIN_INT3_IRQHandler
  388. .align 1
  389. .thumb_func
  390. .weak UTICK0_IRQHandler
  391. .type UTICK0_IRQHandler, %function
  392. UTICK0_IRQHandler:
  393. ldr r0,=UTICK0_DriverIRQHandler
  394. bx r0
  395. .size UTICK0_IRQHandler, . - UTICK0_IRQHandler
  396. .align 1
  397. .thumb_func
  398. .weak MRT0_IRQHandler
  399. .type MRT0_IRQHandler, %function
  400. MRT0_IRQHandler:
  401. ldr r0,=MRT0_DriverIRQHandler
  402. bx r0
  403. .size MRT0_IRQHandler, . - MRT0_IRQHandler
  404. .align 1
  405. .thumb_func
  406. .weak CTIMER0_IRQHandler
  407. .type CTIMER0_IRQHandler, %function
  408. CTIMER0_IRQHandler:
  409. ldr r0,=CTIMER0_DriverIRQHandler
  410. bx r0
  411. .size CTIMER0_IRQHandler, . - CTIMER0_IRQHandler
  412. .align 1
  413. .thumb_func
  414. .weak CTIMER1_IRQHandler
  415. .type CTIMER1_IRQHandler, %function
  416. CTIMER1_IRQHandler:
  417. ldr r0,=CTIMER1_DriverIRQHandler
  418. bx r0
  419. .size CTIMER1_IRQHandler, . - CTIMER1_IRQHandler
  420. .align 1
  421. .thumb_func
  422. .weak SCT0_IRQHandler
  423. .type SCT0_IRQHandler, %function
  424. SCT0_IRQHandler:
  425. ldr r0,=SCT0_DriverIRQHandler
  426. bx r0
  427. .size SCT0_IRQHandler, . - SCT0_IRQHandler
  428. .align 1
  429. .thumb_func
  430. .weak CTIMER3_IRQHandler
  431. .type CTIMER3_IRQHandler, %function
  432. CTIMER3_IRQHandler:
  433. ldr r0,=CTIMER3_DriverIRQHandler
  434. bx r0
  435. .size CTIMER3_IRQHandler, . - CTIMER3_IRQHandler
  436. .align 1
  437. .thumb_func
  438. .weak FLEXCOMM0_IRQHandler
  439. .type FLEXCOMM0_IRQHandler, %function
  440. FLEXCOMM0_IRQHandler:
  441. ldr r0,=FLEXCOMM0_DriverIRQHandler
  442. bx r0
  443. .size FLEXCOMM0_IRQHandler, . - FLEXCOMM0_IRQHandler
  444. .align 1
  445. .thumb_func
  446. .weak FLEXCOMM1_IRQHandler
  447. .type FLEXCOMM1_IRQHandler, %function
  448. FLEXCOMM1_IRQHandler:
  449. ldr r0,=FLEXCOMM1_DriverIRQHandler
  450. bx r0
  451. .size FLEXCOMM1_IRQHandler, . - FLEXCOMM1_IRQHandler
  452. .align 1
  453. .thumb_func
  454. .weak FLEXCOMM2_IRQHandler
  455. .type FLEXCOMM2_IRQHandler, %function
  456. FLEXCOMM2_IRQHandler:
  457. ldr r0,=FLEXCOMM2_DriverIRQHandler
  458. bx r0
  459. .size FLEXCOMM2_IRQHandler, . - FLEXCOMM2_IRQHandler
  460. .align 1
  461. .thumb_func
  462. .weak FLEXCOMM3_IRQHandler
  463. .type FLEXCOMM3_IRQHandler, %function
  464. FLEXCOMM3_IRQHandler:
  465. ldr r0,=FLEXCOMM3_DriverIRQHandler
  466. bx r0
  467. .size FLEXCOMM3_IRQHandler, . - FLEXCOMM3_IRQHandler
  468. .align 1
  469. .thumb_func
  470. .weak FLEXCOMM4_IRQHandler
  471. .type FLEXCOMM4_IRQHandler, %function
  472. FLEXCOMM4_IRQHandler:
  473. ldr r0,=FLEXCOMM4_DriverIRQHandler
  474. bx r0
  475. .size FLEXCOMM4_IRQHandler, . - FLEXCOMM4_IRQHandler
  476. .align 1
  477. .thumb_func
  478. .weak FLEXCOMM5_IRQHandler
  479. .type FLEXCOMM5_IRQHandler, %function
  480. FLEXCOMM5_IRQHandler:
  481. ldr r0,=FLEXCOMM5_DriverIRQHandler
  482. bx r0
  483. .size FLEXCOMM5_IRQHandler, . - FLEXCOMM5_IRQHandler
  484. .align 1
  485. .thumb_func
  486. .weak FLEXCOMM6_IRQHandler
  487. .type FLEXCOMM6_IRQHandler, %function
  488. FLEXCOMM6_IRQHandler:
  489. ldr r0,=FLEXCOMM6_DriverIRQHandler
  490. bx r0
  491. .size FLEXCOMM6_IRQHandler, . - FLEXCOMM6_IRQHandler
  492. .align 1
  493. .thumb_func
  494. .weak FLEXCOMM7_IRQHandler
  495. .type FLEXCOMM7_IRQHandler, %function
  496. FLEXCOMM7_IRQHandler:
  497. ldr r0,=FLEXCOMM7_DriverIRQHandler
  498. bx r0
  499. .size FLEXCOMM7_IRQHandler, . - FLEXCOMM7_IRQHandler
  500. .align 1
  501. .thumb_func
  502. .weak ADC0_SEQA_IRQHandler
  503. .type ADC0_SEQA_IRQHandler, %function
  504. ADC0_SEQA_IRQHandler:
  505. ldr r0,=ADC0_SEQA_DriverIRQHandler
  506. bx r0
  507. .size ADC0_SEQA_IRQHandler, . - ADC0_SEQA_IRQHandler
  508. .align 1
  509. .thumb_func
  510. .weak ADC0_SEQB_IRQHandler
  511. .type ADC0_SEQB_IRQHandler, %function
  512. ADC0_SEQB_IRQHandler:
  513. ldr r0,=ADC0_SEQB_DriverIRQHandler
  514. bx r0
  515. .size ADC0_SEQB_IRQHandler, . - ADC0_SEQB_IRQHandler
  516. .align 1
  517. .thumb_func
  518. .weak ADC0_THCMP_IRQHandler
  519. .type ADC0_THCMP_IRQHandler, %function
  520. ADC0_THCMP_IRQHandler:
  521. ldr r0,=ADC0_THCMP_DriverIRQHandler
  522. bx r0
  523. .size ADC0_THCMP_IRQHandler, . - ADC0_THCMP_IRQHandler
  524. .align 1
  525. .thumb_func
  526. .weak DMIC0_IRQHandler
  527. .type DMIC0_IRQHandler, %function
  528. DMIC0_IRQHandler:
  529. ldr r0,=DMIC0_DriverIRQHandler
  530. bx r0
  531. .size DMIC0_IRQHandler, . - DMIC0_IRQHandler
  532. .align 1
  533. .thumb_func
  534. .weak HWVAD0_IRQHandler
  535. .type HWVAD0_IRQHandler, %function
  536. HWVAD0_IRQHandler:
  537. ldr r0,=HWVAD0_DriverIRQHandler
  538. bx r0
  539. .size HWVAD0_IRQHandler, . - HWVAD0_IRQHandler
  540. .align 1
  541. .thumb_func
  542. .weak USB0_NEEDCLK_IRQHandler
  543. .type USB0_NEEDCLK_IRQHandler, %function
  544. USB0_NEEDCLK_IRQHandler:
  545. ldr r0,=USB0_NEEDCLK_DriverIRQHandler
  546. bx r0
  547. .size USB0_NEEDCLK_IRQHandler, . - USB0_NEEDCLK_IRQHandler
  548. .align 1
  549. .thumb_func
  550. .weak USB0_IRQHandler
  551. .type USB0_IRQHandler, %function
  552. USB0_IRQHandler:
  553. ldr r0,=USB0_DriverIRQHandler
  554. bx r0
  555. .size USB0_IRQHandler, . - USB0_IRQHandler
  556. .align 1
  557. .thumb_func
  558. .weak RTC_IRQHandler
  559. .type RTC_IRQHandler, %function
  560. RTC_IRQHandler:
  561. ldr r0,=RTC_DriverIRQHandler
  562. bx r0
  563. .size RTC_IRQHandler, . - RTC_IRQHandler
  564. .align 1
  565. .thumb_func
  566. .weak IOH_IRQHandler
  567. .type IOH_IRQHandler, %function
  568. IOH_IRQHandler:
  569. ldr r0,=IOH_DriverIRQHandler
  570. bx r0
  571. .size IOH_IRQHandler, . - IOH_IRQHandler
  572. .align 1
  573. .thumb_func
  574. .weak MAILBOX_IRQHandler
  575. .type MAILBOX_IRQHandler, %function
  576. MAILBOX_IRQHandler:
  577. ldr r0,=MAILBOX_DriverIRQHandler
  578. bx r0
  579. .size MAILBOX_IRQHandler, . - MAILBOX_IRQHandler
  580. .align 1
  581. .thumb_func
  582. .weak PIN_INT4_IRQHandler
  583. .type PIN_INT4_IRQHandler, %function
  584. PIN_INT4_IRQHandler:
  585. ldr r0,=PIN_INT4_DriverIRQHandler
  586. bx r0
  587. .size PIN_INT4_IRQHandler, . - PIN_INT4_IRQHandler
  588. .align 1
  589. .thumb_func
  590. .weak PIN_INT5_IRQHandler
  591. .type PIN_INT5_IRQHandler, %function
  592. PIN_INT5_IRQHandler:
  593. ldr r0,=PIN_INT5_DriverIRQHandler
  594. bx r0
  595. .size PIN_INT5_IRQHandler, . - PIN_INT5_IRQHandler
  596. .align 1
  597. .thumb_func
  598. .weak PIN_INT6_IRQHandler
  599. .type PIN_INT6_IRQHandler, %function
  600. PIN_INT6_IRQHandler:
  601. ldr r0,=PIN_INT6_DriverIRQHandler
  602. bx r0
  603. .size PIN_INT6_IRQHandler, . - PIN_INT6_IRQHandler
  604. .align 1
  605. .thumb_func
  606. .weak PIN_INT7_IRQHandler
  607. .type PIN_INT7_IRQHandler, %function
  608. PIN_INT7_IRQHandler:
  609. ldr r0,=PIN_INT7_DriverIRQHandler
  610. bx r0
  611. .size PIN_INT7_IRQHandler, . - PIN_INT7_IRQHandler
  612. .align 1
  613. .thumb_func
  614. .weak CTIMER2_IRQHandler
  615. .type CTIMER2_IRQHandler, %function
  616. CTIMER2_IRQHandler:
  617. ldr r0,=CTIMER2_DriverIRQHandler
  618. bx r0
  619. .size CTIMER2_IRQHandler, . - CTIMER2_IRQHandler
  620. .align 1
  621. .thumb_func
  622. .weak CTIMER4_IRQHandler
  623. .type CTIMER4_IRQHandler, %function
  624. CTIMER4_IRQHandler:
  625. ldr r0,=CTIMER4_DriverIRQHandler
  626. bx r0
  627. .size CTIMER4_IRQHandler, . - CTIMER4_IRQHandler
  628. .align 1
  629. .thumb_func
  630. .weak SPIFI0_IRQHandler
  631. .type SPIFI0_IRQHandler, %function
  632. SPIFI0_IRQHandler:
  633. ldr r0,=SPIFI0_DriverIRQHandler
  634. bx r0
  635. .size SPIFI0_IRQHandler, . - SPIFI0_IRQHandler
  636. /* Macro to define default handlers. Default handler
  637. * will be weak symbol and just dead loops. They can be
  638. * overwritten by other handlers */
  639. .macro def_irq_handler handler_name
  640. .weak \handler_name
  641. .set \handler_name, DefaultISR
  642. .endm
  643. /* Exception Handlers */
  644. def_irq_handler WDT_BOD_DriverIRQHandler /* Windowed watchdog timer, Brownout detect */
  645. def_irq_handler DMA0_DriverIRQHandler /* DMA controller */
  646. def_irq_handler GINT0_DriverIRQHandler /* GPIO group 0 */
  647. def_irq_handler GINT1_DriverIRQHandler /* GPIO group 1 */
  648. def_irq_handler PIN_INT0_DriverIRQHandler /* Pin interrupt 0 or pattern match engine slice 0 */
  649. def_irq_handler PIN_INT1_DriverIRQHandler /* Pin interrupt 1or pattern match engine slice 1 */
  650. def_irq_handler PIN_INT2_DriverIRQHandler /* Pin interrupt 2 or pattern match engine slice 2 */
  651. def_irq_handler PIN_INT3_DriverIRQHandler /* Pin interrupt 3 or pattern match engine slice 3 */
  652. def_irq_handler UTICK0_DriverIRQHandler /* Micro-tick Timer */
  653. def_irq_handler MRT0_DriverIRQHandler /* Multi-rate timer */
  654. def_irq_handler CTIMER0_DriverIRQHandler /* Standard counter/timer CTIMER0 */
  655. def_irq_handler CTIMER1_DriverIRQHandler /* Standard counter/timer CTIMER1 */
  656. def_irq_handler SCT0_DriverIRQHandler /* SCTimer/PWM */
  657. def_irq_handler CTIMER3_DriverIRQHandler /* Standard counter/timer CTIMER3 */
  658. def_irq_handler FLEXCOMM0_DriverIRQHandler /* Flexcomm Interface 0 (USART, SPI, I2C) */
  659. def_irq_handler FLEXCOMM1_DriverIRQHandler /* Flexcomm Interface 1 (USART, SPI, I2C) */
  660. def_irq_handler FLEXCOMM2_DriverIRQHandler /* Flexcomm Interface 2 (USART, SPI, I2C) */
  661. def_irq_handler FLEXCOMM3_DriverIRQHandler /* Flexcomm Interface 3 (USART, SPI, I2C) */
  662. def_irq_handler FLEXCOMM4_DriverIRQHandler /* Flexcomm Interface 4 (USART, SPI, I2C) */
  663. def_irq_handler FLEXCOMM5_DriverIRQHandler /* Flexcomm Interface 5 (USART, SPI, I2C) */
  664. def_irq_handler FLEXCOMM6_DriverIRQHandler /* Flexcomm Interface 6 (USART, SPI, I2C, I2S) */
  665. def_irq_handler FLEXCOMM7_DriverIRQHandler /* Flexcomm Interface 7 (USART, SPI, I2C, I2S) */
  666. def_irq_handler ADC0_SEQA_DriverIRQHandler /* ADC0 sequence A completion. */
  667. def_irq_handler ADC0_SEQB_DriverIRQHandler /* ADC0 sequence B completion. */
  668. def_irq_handler ADC0_THCMP_DriverIRQHandler /* ADC0 threshold compare and error. */
  669. def_irq_handler DMIC0_DriverIRQHandler /* Digital microphone and DMIC subsystem */
  670. def_irq_handler HWVAD0_DriverIRQHandler /* Hardware Voice Activity Detector */
  671. def_irq_handler USB0_NEEDCLK_DriverIRQHandler /* USB Activity Wake-up Interrupt */
  672. def_irq_handler USB0_DriverIRQHandler /* USB device */
  673. def_irq_handler RTC_DriverIRQHandler /* RTC alarm and wake-up interrupts */
  674. def_irq_handler IOH_DriverIRQHandler /* IOH */
  675. def_irq_handler MAILBOX_DriverIRQHandler /* Mailbox interrupt (present on selected devices) */
  676. def_irq_handler PIN_INT4_DriverIRQHandler /* Pin interrupt 4 or pattern match engine slice 4 int */
  677. def_irq_handler PIN_INT5_DriverIRQHandler /* Pin interrupt 5 or pattern match engine slice 5 int */
  678. def_irq_handler PIN_INT6_DriverIRQHandler /* Pin interrupt 6 or pattern match engine slice 6 int */
  679. def_irq_handler PIN_INT7_DriverIRQHandler /* Pin interrupt 7 or pattern match engine slice 7 int */
  680. def_irq_handler CTIMER2_DriverIRQHandler /* Standard counter/timer CTIMER2 */
  681. def_irq_handler CTIMER4_DriverIRQHandler /* Standard counter/timer CTIMER4 */
  682. def_irq_handler SPIFI0_DriverIRQHandler /* SPI flash interface */
  683. .end