start_iar.S 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. ;/*
  2. ; * File : context_iar.S
  3. ; * This file is part of RT-Thread RTOS
  4. ; * COPYRIGHT (C) 2009 - 2011, RT-Thread Development Team
  5. ; *
  6. ; * The license and distribution terms for this file may be
  7. ; * found in the file LICENSE in this distribution or at
  8. ; * http://www.rt-thread.org/license/LICENSE
  9. ; *
  10. ; * Change Logs:
  11. ; * Date Author Notes
  12. ; * 2009-01-17 Bernard first version
  13. ; * 2009-09-27 Bernard add protect when contex switch occurs
  14. ; */
  15. #include "rtconfig.h"
  16. MODULE ?cstartup
  17. ;; ICODE is the same segment as cstartup. By placing __low_level_init
  18. ;; in the same segment, we make sure it can be reached with BL. */
  19. SECTION CSTACK:DATA:NOROOT(3)
  20. SECTION .icode:CODE:NOROOT(2)
  21. IMPORT rt_hw_hard_fault
  22. IMPORT rt_hw_pend_sv
  23. IMPORT rt_hw_timer_handler
  24. #ifdef RT_USING_UART2
  25. IMPORT MFS2RX_IRQHandler
  26. #endif
  27. PUBLIC __low_level_init
  28. PUBWEAK SystemInit_ExtMemCtl
  29. SECTION .text:CODE:REORDER(2)
  30. THUMB
  31. SystemInit_ExtMemCtl
  32. BX LR
  33. __low_level_init:
  34. ;; Initialize hardware.
  35. LDR R0, = SystemInit_ExtMemCtl ; initialize external memory controller
  36. MOV R11, LR
  37. BLX R0
  38. LDR R1, =sfe(CSTACK) ; restore original stack pointer
  39. MSR MSP, R1
  40. MOV R0,#1
  41. ;; Return with BX to be independent of mode of caller
  42. BX R11
  43. ;; Forward declaration of sections.
  44. SECTION .intvec:CODE:NOROOT(2)
  45. EXTERN __iar_program_start
  46. PUBLIC __vector_table
  47. DATA
  48. __vector_table
  49. DCD sfe(CSTACK)
  50. DCD __iar_program_start
  51. DCD NMI_Handler ; NMI Handler
  52. DCD rt_hw_hard_fault ; Hard Fault Handler
  53. DCD MemManage_Handler ; MPU Fault Handler
  54. DCD BusFault_Handler ; Bus Fault Handler
  55. DCD UsageFault_Handler ; Usage Fault Handler
  56. DCD 0 ; Reserved
  57. DCD 0 ; Reserved
  58. DCD 0 ; Reserved
  59. DCD 0 ; Reserved
  60. DCD SVC_Handler ; SVCall Handler
  61. DCD DebugMon_Handler ; Debug Monitor Handler
  62. DCD 0 ; Reserved
  63. DCD rt_hw_pend_sv ; PendSV Handler
  64. DCD rt_hw_timer_handler ; SysTick Handler
  65. ; External Interrupts
  66. DCD CSV_IRQHandler ; Clock Super Visor
  67. DCD SWDT_IRQHandler ; Software Watchdog Timer
  68. DCD LVD_IRQHandler ; Low Voltage Detector
  69. DCD WFG_IRQHandler ; Wave Form Generator
  70. DCD EXINT0_7_IRQHandler ; External Interrupt Request ch.0 to ch.7
  71. DCD EXINT8_15_IRQHandler ; External Interrupt Request ch.8 to ch.15
  72. DCD DTIM_QDU_IRQHandler ; Dual Timer / Quad Decoder
  73. DCD MFS0RX_IRQHandler ; MultiFunction Serial ch.0
  74. DCD MFS0TX_IRQHandler ; MultiFunction Serial ch.0
  75. DCD MFS1RX_IRQHandler ; MultiFunction Serial ch.1
  76. DCD MFS1TX_IRQHandler ; MultiFunction Serial ch.1
  77. #ifdef RT_USING_UART2
  78. DCD MFS2RX_IRQHandler ; MultiFunction Serial ch.2
  79. #else
  80. DCD NULL_IRQHandler ; MultiFunction Serial ch.2
  81. #endif
  82. DCD MFS2TX_IRQHandler ; MultiFunction Serial ch.2
  83. DCD MFS3RX_IRQHandler ; MultiFunction Serial ch.3
  84. DCD MFS3TX_IRQHandler ; MultiFunction Serial ch.3
  85. DCD MFS4RX_IRQHandler ; MultiFunction Serial ch.4
  86. DCD MFS4TX_IRQHandler ; MultiFunction Serial ch.4
  87. DCD MFS5RX_IRQHandler ; MultiFunction Serial ch.5
  88. DCD MFS5TX_IRQHandler ; MultiFunction Serial ch.5
  89. DCD MFS6RX_IRQHandler ; MultiFunction Serial ch.6
  90. DCD MFS6TX_IRQHandler ; MultiFunction Serial ch.6
  91. DCD MFS7RX_IRQHandler ; MultiFunction Serial ch.7
  92. DCD MFS7TX_IRQHandler ; MultiFunction Serial ch.7
  93. DCD PPG_IRQHandler ; PPG
  94. DCD OSC_PLL_WC_IRQHandler ; OSC / PLL / Watch Counter
  95. DCD ADC0_IRQHandler ; ADC0
  96. DCD ADC1_IRQHandler ; ADC1
  97. DCD ADC2_IRQHandler ; ADC2
  98. DCD FRTIM_IRQHandler ; Free-run Timer
  99. DCD INCAP_IRQHandler ; Input Capture
  100. DCD OUTCOMP_IRQHandler ; Output Compare
  101. DCD BTIM_IRQHandler ; Base Timer ch.0 to ch.7
  102. DCD CAN0_IRQHandler ; CAN ch.0
  103. DCD CAN1_IRQHandler ; CAN ch.1
  104. DCD USBF_IRQHandler ; USB Function
  105. DCD USBF_USBH_IRQHandler ; USB Function / USB HOST
  106. DCD RESERVED_1_IRQHandler ; Reserved_1
  107. DCD RESERVED_2_IRQHandler ; Reserved_2
  108. DCD DMAC0_IRQHandler ; DMAC ch.0
  109. DCD DMAC1_IRQHandler ; DMAC ch.1
  110. DCD DMAC2_IRQHandler ; DMAC ch.2
  111. DCD DMAC3_IRQHandler ; DMAC ch.3
  112. DCD DMAC4_IRQHandler ; DMAC ch.4
  113. DCD DMAC5_IRQHandler ; DMAC ch.5
  114. DCD DMAC6_IRQHandler ; DMAC ch.6
  115. DCD DMAC7_IRQHandler ; DMAC ch.7
  116. DCD RESERVED_3_IRQHandler ; Reserved_3
  117. DCD RESERVED_4_IRQHandler ; Reserved_4
  118. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  119. ;;
  120. ;; Default interrupt handlers.
  121. ;;
  122. THUMB
  123. PUBWEAK NMI_Handler
  124. SECTION .text:CODE:REORDER(1)
  125. NMI_Handler
  126. B NMI_Handler
  127. PUBWEAK MemManage_Handler
  128. SECTION .text:CODE:REORDER(1)
  129. MemManage_Handler
  130. B MemManage_Handler
  131. PUBWEAK BusFault_Handler
  132. SECTION .text:CODE:REORDER(1)
  133. BusFault_Handler
  134. B BusFault_Handler
  135. PUBWEAK UsageFault_Handler
  136. SECTION .text:CODE:REORDER(1)
  137. UsageFault_Handler
  138. B UsageFault_Handler
  139. PUBWEAK SVC_Handler
  140. SECTION .text:CODE:REORDER(1)
  141. SVC_Handler
  142. B SVC_Handler
  143. PUBWEAK DebugMon_Handler
  144. SECTION .text:CODE:REORDER(1)
  145. DebugMon_Handler
  146. B DebugMon_Handler
  147. PUBWEAK CSV_IRQHandler
  148. SECTION .text:CODE:REORDER(1)
  149. CSV_IRQHandler
  150. B CSV_IRQHandler
  151. PUBWEAK SWDT_IRQHandler
  152. SECTION .text:CODE:REORDER(1)
  153. SWDT_IRQHandler
  154. B SWDT_IRQHandler
  155. PUBWEAK LVD_IRQHandler
  156. SECTION .text:CODE:REORDER(1)
  157. LVD_IRQHandler
  158. B LVD_IRQHandler
  159. PUBWEAK WFG_IRQHandler
  160. SECTION .text:CODE:REORDER(1)
  161. WFG_IRQHandler
  162. B WFG_IRQHandler
  163. PUBWEAK EXINT0_7_IRQHandler
  164. SECTION .text:CODE:REORDER(1)
  165. EXINT0_7_IRQHandler
  166. B EXINT0_7_IRQHandler
  167. PUBWEAK EXINT8_15_IRQHandler
  168. SECTION .text:CODE:REORDER(1)
  169. EXINT8_15_IRQHandler
  170. B EXINT8_15_IRQHandler
  171. PUBWEAK DTIM_QDU_IRQHandler
  172. SECTION .text:CODE:REORDER(1)
  173. DTIM_QDU_IRQHandler
  174. B DTIM_QDU_IRQHandler
  175. PUBWEAK MFS0RX_IRQHandler
  176. SECTION .text:CODE:REORDER(1)
  177. MFS0RX_IRQHandler
  178. B MFS0RX_IRQHandler
  179. PUBWEAK MFS0TX_IRQHandler
  180. SECTION .text:CODE:REORDER(1)
  181. MFS0TX_IRQHandler
  182. B MFS0TX_IRQHandler
  183. PUBWEAK MFS1RX_IRQHandler
  184. SECTION .text:CODE:REORDER(1)
  185. MFS1RX_IRQHandler
  186. B MFS1RX_IRQHandler
  187. PUBWEAK MFS1TX_IRQHandler
  188. SECTION .text:CODE:REORDER(1)
  189. MFS1TX_IRQHandler
  190. B MFS1TX_IRQHandler
  191. PUBWEAK NULL_IRQHandler
  192. SECTION .text:CODE:REORDER(1)
  193. NULL_IRQHandler
  194. B NULL_IRQHandler
  195. PUBWEAK MFS2TX_IRQHandler
  196. SECTION .text:CODE:REORDER(1)
  197. MFS2TX_IRQHandler
  198. B MFS2TX_IRQHandler
  199. PUBWEAK MFS3RX_IRQHandler
  200. SECTION .text:CODE:REORDER(1)
  201. MFS3RX_IRQHandler
  202. B MFS3RX_IRQHandler
  203. PUBWEAK MFS3TX_IRQHandler
  204. SECTION .text:CODE:REORDER(1)
  205. MFS3TX_IRQHandler
  206. B MFS3TX_IRQHandler
  207. PUBWEAK MFS4RX_IRQHandler
  208. SECTION .text:CODE:REORDER(1)
  209. MFS4RX_IRQHandler
  210. B MFS4RX_IRQHandler
  211. PUBWEAK MFS4TX_IRQHandler
  212. SECTION .text:CODE:REORDER(1)
  213. MFS4TX_IRQHandler
  214. B MFS4TX_IRQHandler
  215. PUBWEAK MFS5RX_IRQHandler
  216. SECTION .text:CODE:REORDER(1)
  217. MFS5RX_IRQHandler
  218. B MFS5RX_IRQHandler
  219. PUBWEAK MFS5TX_IRQHandler
  220. SECTION .text:CODE:REORDER(1)
  221. MFS5TX_IRQHandler
  222. B MFS5TX_IRQHandler
  223. PUBWEAK MFS6RX_IRQHandler
  224. SECTION .text:CODE:REORDER(1)
  225. MFS6RX_IRQHandler
  226. B MFS6RX_IRQHandler
  227. PUBWEAK MFS6TX_IRQHandler
  228. SECTION .text:CODE:REORDER(1)
  229. MFS6TX_IRQHandler
  230. B MFS6TX_IRQHandler
  231. PUBWEAK MFS7RX_IRQHandler
  232. SECTION .text:CODE:REORDER(1)
  233. MFS7RX_IRQHandler
  234. B MFS7RX_IRQHandler
  235. PUBWEAK MFS7TX_IRQHandler
  236. SECTION .text:CODE:REORDER(1)
  237. MFS7TX_IRQHandler
  238. B MFS7TX_IRQHandler
  239. PUBWEAK PPG_IRQHandler
  240. SECTION .text:CODE:REORDER(1)
  241. PPG_IRQHandler
  242. B PPG_IRQHandler
  243. PUBWEAK OSC_PLL_WC_IRQHandler
  244. SECTION .text:CODE:REORDER(1)
  245. OSC_PLL_WC_IRQHandler
  246. B OSC_PLL_WC_IRQHandler
  247. PUBWEAK ADC0_IRQHandler
  248. SECTION .text:CODE:REORDER(1)
  249. ADC0_IRQHandler
  250. B ADC0_IRQHandler
  251. PUBWEAK ADC1_IRQHandler
  252. SECTION .text:CODE:REORDER(1)
  253. ADC1_IRQHandler
  254. B ADC1_IRQHandler
  255. PUBWEAK ADC2_IRQHandler
  256. SECTION .text:CODE:REORDER(1)
  257. ADC2_IRQHandler
  258. B ADC2_IRQHandler
  259. PUBWEAK FRTIM_IRQHandler
  260. SECTION .text:CODE:REORDER(1)
  261. FRTIM_IRQHandler
  262. B FRTIM_IRQHandler
  263. PUBWEAK INCAP_IRQHandler
  264. SECTION .text:CODE:REORDER(1)
  265. INCAP_IRQHandler
  266. B INCAP_IRQHandler
  267. PUBWEAK OUTCOMP_IRQHandler
  268. SECTION .text:CODE:REORDER(1)
  269. OUTCOMP_IRQHandler
  270. B OUTCOMP_IRQHandler
  271. PUBWEAK BTIM_IRQHandler
  272. SECTION .text:CODE:REORDER(1)
  273. BTIM_IRQHandler
  274. B BTIM_IRQHandler
  275. PUBWEAK CAN0_IRQHandler
  276. SECTION .text:CODE:REORDER(1)
  277. CAN0_IRQHandler
  278. B CAN0_IRQHandler
  279. PUBWEAK CAN1_IRQHandler
  280. SECTION .text:CODE:REORDER(1)
  281. CAN1_IRQHandler
  282. B CAN1_IRQHandler
  283. PUBWEAK USBF_IRQHandler
  284. SECTION .text:CODE:REORDER(1)
  285. USBF_IRQHandler
  286. B USBF_IRQHandler
  287. PUBWEAK USBF_USBH_IRQHandler
  288. SECTION .text:CODE:REORDER(1)
  289. USBF_USBH_IRQHandler
  290. B USBF_USBH_IRQHandler
  291. PUBWEAK RESERVED_1_IRQHandler
  292. SECTION .text:CODE:REORDER(1)
  293. RESERVED_1_IRQHandler
  294. B RESERVED_1_IRQHandler
  295. PUBWEAK RESERVED_2_IRQHandler
  296. SECTION .text:CODE:REORDER(1)
  297. RESERVED_2_IRQHandler
  298. B RESERVED_2_IRQHandler
  299. PUBWEAK DMAC0_IRQHandler
  300. SECTION .text:CODE:REORDER(1)
  301. DMAC0_IRQHandler
  302. B DMAC0_IRQHandler
  303. PUBWEAK DMAC1_IRQHandler
  304. SECTION .text:CODE:REORDER(1)
  305. DMAC1_IRQHandler
  306. B DMAC1_IRQHandler
  307. PUBWEAK DMAC2_IRQHandler
  308. SECTION .text:CODE:REORDER(1)
  309. DMAC2_IRQHandler
  310. B DMAC2_IRQHandler
  311. PUBWEAK DMAC3_IRQHandler
  312. SECTION .text:CODE:REORDER(1)
  313. DMAC3_IRQHandler
  314. B DMAC3_IRQHandler
  315. PUBWEAK DMAC4_IRQHandler
  316. SECTION .text:CODE:REORDER(1)
  317. DMAC4_IRQHandler
  318. B DMAC4_IRQHandler
  319. PUBWEAK DMAC5_IRQHandler
  320. SECTION .text:CODE:REORDER(1)
  321. DMAC5_IRQHandler
  322. B DMAC5_IRQHandler
  323. PUBWEAK DMAC6_IRQHandler
  324. SECTION .text:CODE:REORDER(1)
  325. DMAC6_IRQHandler
  326. B DMAC6_IRQHandler
  327. PUBWEAK DMAC7_IRQHandler
  328. SECTION .text:CODE:REORDER(1)
  329. DMAC7_IRQHandler
  330. B DMAC7_IRQHandler
  331. PUBWEAK RESERVED_3_IRQHandler
  332. SECTION .text:CODE:REORDER(1)
  333. RESERVED_3_IRQHandler
  334. B RESERVED_3_IRQHandler
  335. PUBWEAK RESERVED_4_IRQHandler
  336. SECTION .text:CODE:REORDER(1)
  337. RESERVED_4_IRQHandler
  338. B RESERVED_4_IRQHandler
  339. END