startup_mimxrt1052.cpp 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368
  1. //*****************************************************************************
  2. // MIMXRT1052 startup code for use with MCUXpresso IDE
  3. //
  4. // Version : 210918
  5. //*****************************************************************************
  6. //
  7. // Copyright 2016-2018 NXP
  8. // All rights reserved.
  9. //
  10. // SPDX-License-Identifier: BSD-3-Clause
  11. //*****************************************************************************
  12. #if defined (DEBUG)
  13. #pragma GCC push_options
  14. #pragma GCC optimize ("Og")
  15. #endif // (DEBUG)
  16. #if defined (__cplusplus)
  17. #ifdef __REDLIB__
  18. #error Redlib does not support C++
  19. #else
  20. //*****************************************************************************
  21. //
  22. // The entry point for the C++ library startup
  23. //
  24. //*****************************************************************************
  25. extern "C" {
  26. extern void __libc_init_array(void);
  27. }
  28. #endif
  29. #endif
  30. #define WEAK __attribute__ ((weak))
  31. #define WEAK_AV __attribute__ ((weak, section(".after_vectors")))
  32. #define ALIAS(f) __attribute__ ((weak, alias (#f)))
  33. //*****************************************************************************
  34. #if defined (__cplusplus)
  35. extern "C" {
  36. #endif
  37. //*****************************************************************************
  38. // Variable to store CRP value in. Will be placed automatically
  39. // by the linker when "Enable Code Read Protect" selected.
  40. // See crp.h header for more information
  41. //*****************************************************************************
  42. //*****************************************************************************
  43. // Declaration of external SystemInit function
  44. //*****************************************************************************
  45. #if defined (__USE_CMSIS)
  46. extern void SystemInit(void);
  47. #endif // (__USE_CMSIS)
  48. //*****************************************************************************
  49. // Forward declaration of the core exception handlers.
  50. // When the application defines a handler (with the same name), this will
  51. // automatically take precedence over these weak definitions.
  52. // If your application is a C++ one, then any interrupt handlers defined
  53. // in C++ files within in your main application will need to have C linkage
  54. // rather than C++ linkage. To do this, make sure that you are using extern "C"
  55. // { .... } around the interrupt handler within your main application code.
  56. //*****************************************************************************
  57. void ResetISR(void);
  58. WEAK void NMI_Handler(void);
  59. WEAK void HardFault_Handler(void);
  60. WEAK void SVC_Handler(void);
  61. WEAK void PendSV_Handler(void);
  62. WEAK void SysTick_Handler(void);
  63. WEAK void IntDefaultHandler(void);
  64. //*****************************************************************************
  65. // Forward declaration of the application IRQ handlers. When the application
  66. // defines a handler (with the same name), this will automatically take
  67. // precedence over weak definitions below
  68. //*****************************************************************************
  69. WEAK void DMA0_DMA16_IRQHandler(void);
  70. WEAK void DMA1_DMA17_IRQHandler(void);
  71. WEAK void DMA2_DMA18_IRQHandler(void);
  72. WEAK void DMA3_DMA19_IRQHandler(void);
  73. WEAK void DMA4_DMA20_IRQHandler(void);
  74. WEAK void DMA5_DMA21_IRQHandler(void);
  75. WEAK void DMA6_DMA22_IRQHandler(void);
  76. WEAK void DMA7_DMA23_IRQHandler(void);
  77. WEAK void DMA8_DMA24_IRQHandler(void);
  78. WEAK void DMA9_DMA25_IRQHandler(void);
  79. WEAK void DMA10_DMA26_IRQHandler(void);
  80. WEAK void DMA11_DMA27_IRQHandler(void);
  81. WEAK void DMA12_DMA28_IRQHandler(void);
  82. WEAK void DMA13_DMA29_IRQHandler(void);
  83. WEAK void DMA14_DMA30_IRQHandler(void);
  84. WEAK void DMA15_DMA31_IRQHandler(void);
  85. WEAK void DMA_ERROR_IRQHandler(void);
  86. WEAK void CTI0_ERROR_IRQHandler(void);
  87. WEAK void CTI1_ERROR_IRQHandler(void);
  88. WEAK void CORE_IRQHandler(void);
  89. WEAK void LPUART1_IRQHandler(void);
  90. WEAK void LPUART2_IRQHandler(void);
  91. WEAK void LPUART3_IRQHandler(void);
  92. WEAK void LPUART4_IRQHandler(void);
  93. WEAK void LPUART5_IRQHandler(void);
  94. WEAK void LPUART6_IRQHandler(void);
  95. WEAK void LPUART7_IRQHandler(void);
  96. WEAK void LPUART8_IRQHandler(void);
  97. WEAK void LPI2C1_IRQHandler(void);
  98. WEAK void LPI2C2_IRQHandler(void);
  99. WEAK void LPI2C3_IRQHandler(void);
  100. WEAK void LPI2C4_IRQHandler(void);
  101. WEAK void LPSPI1_IRQHandler(void);
  102. WEAK void LPSPI2_IRQHandler(void);
  103. WEAK void LPSPI3_IRQHandler(void);
  104. WEAK void LPSPI4_IRQHandler(void);
  105. WEAK void CAN1_IRQHandler(void);
  106. WEAK void CAN2_IRQHandler(void);
  107. WEAK void FLEXRAM_IRQHandler(void);
  108. WEAK void KPP_IRQHandler(void);
  109. WEAK void TSC_DIG_IRQHandler(void);
  110. WEAK void GPR_IRQ_IRQHandler(void);
  111. WEAK void LCDIF_IRQHandler(void);
  112. WEAK void CSI_IRQHandler(void);
  113. WEAK void PXP_IRQHandler(void);
  114. WEAK void WDOG2_IRQHandler(void);
  115. WEAK void SNVS_HP_WRAPPER_IRQHandler(void);
  116. WEAK void SNVS_HP_WRAPPER_TZ_IRQHandler(void);
  117. WEAK void SNVS_LP_WRAPPER_IRQHandler(void);
  118. WEAK void CSU_IRQHandler(void);
  119. WEAK void DCP_IRQHandler(void);
  120. WEAK void DCP_VMI_IRQHandler(void);
  121. WEAK void Reserved68_IRQHandler(void);
  122. WEAK void TRNG_IRQHandler(void);
  123. WEAK void SJC_IRQHandler(void);
  124. WEAK void BEE_IRQHandler(void);
  125. WEAK void SAI1_IRQHandler(void);
  126. WEAK void SAI2_IRQHandler(void);
  127. WEAK void SAI3_RX_IRQHandler(void);
  128. WEAK void SAI3_TX_IRQHandler(void);
  129. WEAK void SPDIF_IRQHandler(void);
  130. WEAK void PMU_EVENT_IRQHandler(void);
  131. WEAK void Reserved78_IRQHandler(void);
  132. WEAK void TEMP_LOW_HIGH_IRQHandler(void);
  133. WEAK void TEMP_PANIC_IRQHandler(void);
  134. WEAK void USB_PHY1_IRQHandler(void);
  135. WEAK void USB_PHY2_IRQHandler(void);
  136. WEAK void ADC1_IRQHandler(void);
  137. WEAK void ADC2_IRQHandler(void);
  138. WEAK void DCDC_IRQHandler(void);
  139. WEAK void Reserved86_IRQHandler(void);
  140. WEAK void Reserved87_IRQHandler(void);
  141. WEAK void GPIO1_INT0_IRQHandler(void);
  142. WEAK void GPIO1_INT1_IRQHandler(void);
  143. WEAK void GPIO1_INT2_IRQHandler(void);
  144. WEAK void GPIO1_INT3_IRQHandler(void);
  145. WEAK void GPIO1_INT4_IRQHandler(void);
  146. WEAK void GPIO1_INT5_IRQHandler(void);
  147. WEAK void GPIO1_INT6_IRQHandler(void);
  148. WEAK void GPIO1_INT7_IRQHandler(void);
  149. WEAK void GPIO1_Combined_0_15_IRQHandler(void);
  150. WEAK void GPIO1_Combined_16_31_IRQHandler(void);
  151. WEAK void GPIO2_Combined_0_15_IRQHandler(void);
  152. WEAK void GPIO2_Combined_16_31_IRQHandler(void);
  153. WEAK void GPIO3_Combined_0_15_IRQHandler(void);
  154. WEAK void GPIO3_Combined_16_31_IRQHandler(void);
  155. WEAK void GPIO4_Combined_0_15_IRQHandler(void);
  156. WEAK void GPIO4_Combined_16_31_IRQHandler(void);
  157. WEAK void GPIO5_Combined_0_15_IRQHandler(void);
  158. WEAK void GPIO5_Combined_16_31_IRQHandler(void);
  159. WEAK void FLEXIO1_IRQHandler(void);
  160. WEAK void FLEXIO2_IRQHandler(void);
  161. WEAK void WDOG1_IRQHandler(void);
  162. WEAK void RTWDOG_IRQHandler(void);
  163. WEAK void EWM_IRQHandler(void);
  164. WEAK void CCM_1_IRQHandler(void);
  165. WEAK void CCM_2_IRQHandler(void);
  166. WEAK void GPC_IRQHandler(void);
  167. WEAK void SRC_IRQHandler(void);
  168. WEAK void Reserved115_IRQHandler(void);
  169. WEAK void GPT1_IRQHandler(void);
  170. WEAK void GPT2_IRQHandler(void);
  171. WEAK void PWM1_0_IRQHandler(void);
  172. WEAK void PWM1_1_IRQHandler(void);
  173. WEAK void PWM1_2_IRQHandler(void);
  174. WEAK void PWM1_3_IRQHandler(void);
  175. WEAK void PWM1_FAULT_IRQHandler(void);
  176. WEAK void Reserved123_IRQHandler(void);
  177. WEAK void FLEXSPI_IRQHandler(void);
  178. WEAK void SEMC_IRQHandler(void);
  179. WEAK void USDHC1_IRQHandler(void);
  180. WEAK void USDHC2_IRQHandler(void);
  181. WEAK void USB_OTG2_IRQHandler(void);
  182. WEAK void USB_OTG1_IRQHandler(void);
  183. WEAK void ENET_IRQHandler(void);
  184. WEAK void ENET_1588_Timer_IRQHandler(void);
  185. WEAK void XBAR1_IRQ_0_1_IRQHandler(void);
  186. WEAK void XBAR1_IRQ_2_3_IRQHandler(void);
  187. WEAK void ADC_ETC_IRQ0_IRQHandler(void);
  188. WEAK void ADC_ETC_IRQ1_IRQHandler(void);
  189. WEAK void ADC_ETC_IRQ2_IRQHandler(void);
  190. WEAK void ADC_ETC_ERROR_IRQ_IRQHandler(void);
  191. WEAK void PIT_IRQHandler(void);
  192. WEAK void ACMP1_IRQHandler(void);
  193. WEAK void ACMP2_IRQHandler(void);
  194. WEAK void ACMP3_IRQHandler(void);
  195. WEAK void ACMP4_IRQHandler(void);
  196. WEAK void Reserved143_IRQHandler(void);
  197. WEAK void Reserved144_IRQHandler(void);
  198. WEAK void ENC1_IRQHandler(void);
  199. WEAK void ENC2_IRQHandler(void);
  200. WEAK void ENC3_IRQHandler(void);
  201. WEAK void ENC4_IRQHandler(void);
  202. WEAK void TMR1_IRQHandler(void);
  203. WEAK void TMR2_IRQHandler(void);
  204. WEAK void TMR3_IRQHandler(void);
  205. WEAK void TMR4_IRQHandler(void);
  206. WEAK void PWM2_0_IRQHandler(void);
  207. WEAK void PWM2_1_IRQHandler(void);
  208. WEAK void PWM2_2_IRQHandler(void);
  209. WEAK void PWM2_3_IRQHandler(void);
  210. WEAK void PWM2_FAULT_IRQHandler(void);
  211. WEAK void PWM3_0_IRQHandler(void);
  212. WEAK void PWM3_1_IRQHandler(void);
  213. WEAK void PWM3_2_IRQHandler(void);
  214. WEAK void PWM3_3_IRQHandler(void);
  215. WEAK void PWM3_FAULT_IRQHandler(void);
  216. WEAK void PWM4_0_IRQHandler(void);
  217. WEAK void PWM4_1_IRQHandler(void);
  218. WEAK void PWM4_2_IRQHandler(void);
  219. WEAK void PWM4_3_IRQHandler(void);
  220. WEAK void PWM4_FAULT_IRQHandler(void);
  221. //*****************************************************************************
  222. // Forward declaration of the driver IRQ handlers. These are aliased
  223. // to the IntDefaultHandler, which is a 'forever' loop. When the driver
  224. // defines a handler (with the same name), this will automatically take
  225. // precedence over these weak definitions
  226. //*****************************************************************************
  227. void DMA0_DMA16_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  228. void DMA1_DMA17_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  229. void DMA2_DMA18_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  230. void DMA3_DMA19_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  231. void DMA4_DMA20_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  232. void DMA5_DMA21_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  233. void DMA6_DMA22_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  234. void DMA7_DMA23_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  235. void DMA8_DMA24_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  236. void DMA9_DMA25_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  237. void DMA10_DMA26_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  238. void DMA11_DMA27_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  239. void DMA12_DMA28_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  240. void DMA13_DMA29_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  241. void DMA14_DMA30_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  242. void DMA15_DMA31_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  243. void DMA_ERROR_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  244. void CTI0_ERROR_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  245. void CTI1_ERROR_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  246. void CORE_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  247. void LPUART1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  248. void LPUART2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  249. void LPUART3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  250. void LPUART4_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  251. void LPUART5_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  252. void LPUART6_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  253. void LPUART7_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  254. void LPUART8_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  255. void LPI2C1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  256. void LPI2C2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  257. void LPI2C3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  258. void LPI2C4_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  259. void LPSPI1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  260. void LPSPI2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  261. void LPSPI3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  262. void LPSPI4_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  263. void CAN1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  264. void CAN2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  265. void FLEXRAM_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  266. void KPP_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  267. void TSC_DIG_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  268. void GPR_IRQ_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  269. void LCDIF_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  270. void CSI_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  271. void PXP_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  272. void WDOG2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  273. void SNVS_HP_WRAPPER_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  274. void SNVS_HP_WRAPPER_TZ_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  275. void SNVS_LP_WRAPPER_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  276. void CSU_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  277. void DCP_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  278. void DCP_VMI_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  279. void Reserved68_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  280. void TRNG_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  281. void SJC_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  282. void BEE_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  283. void SAI1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  284. void SAI2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  285. void SAI3_RX_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  286. void SAI3_TX_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  287. void SPDIF_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  288. void PMU_EVENT_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  289. void Reserved78_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  290. void TEMP_LOW_HIGH_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  291. void TEMP_PANIC_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  292. void USB_PHY1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  293. void USB_PHY2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  294. void ADC1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  295. void ADC2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  296. void DCDC_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  297. void Reserved86_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  298. void Reserved87_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  299. void GPIO1_INT0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  300. void GPIO1_INT1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  301. void GPIO1_INT2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  302. void GPIO1_INT3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  303. void GPIO1_INT4_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  304. void GPIO1_INT5_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  305. void GPIO1_INT6_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  306. void GPIO1_INT7_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  307. void GPIO1_Combined_0_15_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  308. void GPIO1_Combined_16_31_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  309. void GPIO2_Combined_0_15_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  310. void GPIO2_Combined_16_31_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  311. void GPIO3_Combined_0_15_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  312. void GPIO3_Combined_16_31_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  313. void GPIO4_Combined_0_15_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  314. void GPIO4_Combined_16_31_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  315. void GPIO5_Combined_0_15_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  316. void GPIO5_Combined_16_31_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  317. void FLEXIO1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  318. void FLEXIO2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  319. void WDOG1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  320. void RTWDOG_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  321. void EWM_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  322. void CCM_1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  323. void CCM_2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  324. void GPC_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  325. void SRC_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  326. void Reserved115_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  327. void GPT1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  328. void GPT2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  329. void PWM1_0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  330. void PWM1_1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  331. void PWM1_2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  332. void PWM1_3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  333. void PWM1_FAULT_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  334. void Reserved123_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  335. void FLEXSPI_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  336. void SEMC_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  337. void USDHC1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  338. void USDHC2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  339. void USB_OTG2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  340. void USB_OTG1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  341. void ENET_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  342. void ENET_1588_Timer_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  343. void XBAR1_IRQ_0_1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  344. void XBAR1_IRQ_2_3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  345. void ADC_ETC_IRQ0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  346. void ADC_ETC_IRQ1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  347. void ADC_ETC_IRQ2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  348. void ADC_ETC_ERROR_IRQ_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  349. void PIT_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  350. void ACMP1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  351. void ACMP2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  352. void ACMP3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  353. void ACMP4_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  354. void Reserved143_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  355. void Reserved144_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  356. void ENC1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  357. void ENC2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  358. void ENC3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  359. void ENC4_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  360. void TMR1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  361. void TMR2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  362. void TMR3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  363. void TMR4_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  364. void PWM2_0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  365. void PWM2_1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  366. void PWM2_2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  367. void PWM2_3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  368. void PWM2_FAULT_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  369. void PWM3_0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  370. void PWM3_1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  371. void PWM3_2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  372. void PWM3_3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  373. void PWM3_FAULT_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  374. void PWM4_0_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  375. void PWM4_1_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  376. void PWM4_2_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  377. void PWM4_3_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  378. void PWM4_FAULT_DriverIRQHandler(void) ALIAS(IntDefaultHandler);
  379. //*****************************************************************************
  380. // The entry point for the application.
  381. // __main() is the entry point for Redlib based applications
  382. // main() is the entry point for Newlib based applications
  383. //*****************************************************************************
  384. #if defined (__REDLIB__)
  385. extern void __main(void);
  386. #endif
  387. extern int main(void);
  388. //*****************************************************************************
  389. // External declaration for the pointer to the stack top from the Linker Script
  390. //*****************************************************************************
  391. extern void _vStackTop(void);
  392. //*****************************************************************************
  393. #if defined (__cplusplus)
  394. } // extern "C"
  395. #endif
  396. //*****************************************************************************
  397. // The vector table.
  398. // This relies on the linker script to place at correct location in memory.
  399. //*****************************************************************************
  400. extern void (* const g_pfnVectors[])(void);
  401. extern void * __Vectors __attribute__ ((alias ("g_pfnVectors")));
  402. __attribute__ ((used, section(".isr_vector")))
  403. void (* const g_pfnVectors[])(void) = {
  404. // Core Level - CM7
  405. &_vStackTop, // The initial stack pointer
  406. ResetISR, // The reset handler
  407. NMI_Handler, // The NMI handler
  408. HardFault_Handler, // The hard fault handler
  409. 0, // Reserved
  410. 0, // Reserved
  411. 0, // Reserved
  412. 0, // Reserved
  413. 0, // Reserved
  414. 0, // Reserved
  415. 0, // Reserved
  416. SVC_Handler, // SVCall handler
  417. 0, // Reserved
  418. 0, // Reserved
  419. PendSV_Handler, // The PendSV handler
  420. SysTick_Handler, // The SysTick handler
  421. // Chip Level - MIMXRT1052
  422. DMA0_DMA16_IRQHandler, // 16 : DMA channel 0/16 transfer complete
  423. DMA1_DMA17_IRQHandler, // 17 : DMA channel 1/17 transfer complete
  424. DMA2_DMA18_IRQHandler, // 18 : DMA channel 2/18 transfer complete
  425. DMA3_DMA19_IRQHandler, // 19 : DMA channel 3/19 transfer complete
  426. DMA4_DMA20_IRQHandler, // 20 : DMA channel 4/20 transfer complete
  427. DMA5_DMA21_IRQHandler, // 21 : DMA channel 5/21 transfer complete
  428. DMA6_DMA22_IRQHandler, // 22 : DMA channel 6/22 transfer complete
  429. DMA7_DMA23_IRQHandler, // 23 : DMA channel 7/23 transfer complete
  430. DMA8_DMA24_IRQHandler, // 24 : DMA channel 8/24 transfer complete
  431. DMA9_DMA25_IRQHandler, // 25 : DMA channel 9/25 transfer complete
  432. DMA10_DMA26_IRQHandler, // 26 : DMA channel 10/26 transfer complete
  433. DMA11_DMA27_IRQHandler, // 27 : DMA channel 11/27 transfer complete
  434. DMA12_DMA28_IRQHandler, // 28 : DMA channel 12/28 transfer complete
  435. DMA13_DMA29_IRQHandler, // 29 : DMA channel 13/29 transfer complete
  436. DMA14_DMA30_IRQHandler, // 30 : DMA channel 14/30 transfer complete
  437. DMA15_DMA31_IRQHandler, // 31 : DMA channel 15/31 transfer complete
  438. DMA_ERROR_IRQHandler, // 32 : DMA error interrupt channels 0-15 / 16-31
  439. CTI0_ERROR_IRQHandler, // 33 : CTI0_Error
  440. CTI1_ERROR_IRQHandler, // 34 : CTI1_Error
  441. CORE_IRQHandler, // 35 : CorePlatform exception IRQ
  442. LPUART1_IRQHandler, // 36 : LPUART1 TX interrupt and RX interrupt
  443. LPUART2_IRQHandler, // 37 : LPUART2 TX interrupt and RX interrupt
  444. LPUART3_IRQHandler, // 38 : LPUART3 TX interrupt and RX interrupt
  445. LPUART4_IRQHandler, // 39 : LPUART4 TX interrupt and RX interrupt
  446. LPUART5_IRQHandler, // 40 : LPUART5 TX interrupt and RX interrupt
  447. LPUART6_IRQHandler, // 41 : LPUART6 TX interrupt and RX interrupt
  448. LPUART7_IRQHandler, // 42 : LPUART7 TX interrupt and RX interrupt
  449. LPUART8_IRQHandler, // 43 : LPUART8 TX interrupt and RX interrupt
  450. LPI2C1_IRQHandler, // 44 : LPI2C1 interrupt
  451. LPI2C2_IRQHandler, // 45 : LPI2C2 interrupt
  452. LPI2C3_IRQHandler, // 46 : LPI2C3 interrupt
  453. LPI2C4_IRQHandler, // 47 : LPI2C4 interrupt
  454. LPSPI1_IRQHandler, // 48 : LPSPI1 single interrupt vector for all sources
  455. LPSPI2_IRQHandler, // 49 : LPSPI2 single interrupt vector for all sources
  456. LPSPI3_IRQHandler, // 50 : LPSPI3 single interrupt vector for all sources
  457. LPSPI4_IRQHandler, // 51 : LPSPI4 single interrupt vector for all sources
  458. CAN1_IRQHandler, // 52 : CAN1 interrupt
  459. CAN2_IRQHandler, // 53 : CAN2 interrupt
  460. FLEXRAM_IRQHandler, // 54 : FlexRAM address out of range Or access hit IRQ
  461. KPP_IRQHandler, // 55 : Keypad nterrupt
  462. TSC_DIG_IRQHandler, // 56 : TSC interrupt
  463. GPR_IRQ_IRQHandler, // 57 : GPR interrupt
  464. LCDIF_IRQHandler, // 58 : LCDIF interrupt
  465. CSI_IRQHandler, // 59 : CSI interrupt
  466. PXP_IRQHandler, // 60 : PXP interrupt
  467. WDOG2_IRQHandler, // 61 : WDOG2 interrupt
  468. SNVS_HP_WRAPPER_IRQHandler, // 62 : SRTC Consolidated Interrupt. Non TZ
  469. SNVS_HP_WRAPPER_TZ_IRQHandler, // 63 : SRTC Security Interrupt. TZ
  470. SNVS_LP_WRAPPER_IRQHandler, // 64 : ON-OFF button press shorter than 5 secs (pulse event)
  471. CSU_IRQHandler, // 65 : CSU interrupt
  472. DCP_IRQHandler, // 66 : DCP_IRQ interrupt
  473. DCP_VMI_IRQHandler, // 67 : DCP_VMI_IRQ interrupt
  474. Reserved68_IRQHandler, // 68 : Reserved interrupt
  475. TRNG_IRQHandler, // 69 : TRNG interrupt
  476. SJC_IRQHandler, // 70 : SJC interrupt
  477. BEE_IRQHandler, // 71 : BEE interrupt
  478. SAI1_IRQHandler, // 72 : SAI1 interrupt
  479. SAI2_IRQHandler, // 73 : SAI1 interrupt
  480. SAI3_RX_IRQHandler, // 74 : SAI3 interrupt
  481. SAI3_TX_IRQHandler, // 75 : SAI3 interrupt
  482. SPDIF_IRQHandler, // 76 : SPDIF interrupt
  483. PMU_EVENT_IRQHandler, // 77 : Brown-out event interrupt
  484. Reserved78_IRQHandler, // 78 : Reserved interrupt
  485. TEMP_LOW_HIGH_IRQHandler, // 79 : TempSensor low/high interrupt
  486. TEMP_PANIC_IRQHandler, // 80 : TempSensor panic interrupt
  487. USB_PHY1_IRQHandler, // 81 : USBPHY (UTMI0), Interrupt
  488. USB_PHY2_IRQHandler, // 82 : USBPHY (UTMI0), Interrupt
  489. ADC1_IRQHandler, // 83 : ADC1 interrupt
  490. ADC2_IRQHandler, // 84 : ADC2 interrupt
  491. DCDC_IRQHandler, // 85 : DCDC interrupt
  492. Reserved86_IRQHandler, // 86 : Reserved interrupt
  493. Reserved87_IRQHandler, // 87 : Reserved interrupt
  494. GPIO1_INT0_IRQHandler, // 88 : Active HIGH Interrupt from INT0 from GPIO
  495. GPIO1_INT1_IRQHandler, // 89 : Active HIGH Interrupt from INT1 from GPIO
  496. GPIO1_INT2_IRQHandler, // 90 : Active HIGH Interrupt from INT2 from GPIO
  497. GPIO1_INT3_IRQHandler, // 91 : Active HIGH Interrupt from INT3 from GPIO
  498. GPIO1_INT4_IRQHandler, // 92 : Active HIGH Interrupt from INT4 from GPIO
  499. GPIO1_INT5_IRQHandler, // 93 : Active HIGH Interrupt from INT5 from GPIO
  500. GPIO1_INT6_IRQHandler, // 94 : Active HIGH Interrupt from INT6 from GPIO
  501. GPIO1_INT7_IRQHandler, // 95 : Active HIGH Interrupt from INT7 from GPIO
  502. GPIO1_Combined_0_15_IRQHandler, // 96 : Combined interrupt indication for GPIO1 signal 0 throughout 15
  503. GPIO1_Combined_16_31_IRQHandler, // 97 : Combined interrupt indication for GPIO1 signal 16 throughout 31
  504. GPIO2_Combined_0_15_IRQHandler, // 98 : Combined interrupt indication for GPIO2 signal 0 throughout 15
  505. GPIO2_Combined_16_31_IRQHandler, // 99 : Combined interrupt indication for GPIO2 signal 16 throughout 31
  506. GPIO3_Combined_0_15_IRQHandler, // 100: Combined interrupt indication for GPIO3 signal 0 throughout 15
  507. GPIO3_Combined_16_31_IRQHandler, // 101: Combined interrupt indication for GPIO3 signal 16 throughout 31
  508. GPIO4_Combined_0_15_IRQHandler, // 102: Combined interrupt indication for GPIO4 signal 0 throughout 15
  509. GPIO4_Combined_16_31_IRQHandler, // 103: Combined interrupt indication for GPIO4 signal 16 throughout 31
  510. GPIO5_Combined_0_15_IRQHandler, // 104: Combined interrupt indication for GPIO5 signal 0 throughout 15
  511. GPIO5_Combined_16_31_IRQHandler, // 105: Combined interrupt indication for GPIO5 signal 16 throughout 31
  512. FLEXIO1_IRQHandler, // 106: FLEXIO1 interrupt
  513. FLEXIO2_IRQHandler, // 107: FLEXIO2 interrupt
  514. WDOG1_IRQHandler, // 108: WDOG1 interrupt
  515. RTWDOG_IRQHandler, // 109: RTWDOG interrupt
  516. EWM_IRQHandler, // 110: EWM interrupt
  517. CCM_1_IRQHandler, // 111: CCM IRQ1 interrupt
  518. CCM_2_IRQHandler, // 112: CCM IRQ2 interrupt
  519. GPC_IRQHandler, // 113: GPC interrupt
  520. SRC_IRQHandler, // 114: SRC interrupt
  521. Reserved115_IRQHandler, // 115: Reserved interrupt
  522. GPT1_IRQHandler, // 116: GPT1 interrupt
  523. GPT2_IRQHandler, // 117: GPT2 interrupt
  524. PWM1_0_IRQHandler, // 118: PWM1 capture 0, compare 0, or reload 0 interrupt
  525. PWM1_1_IRQHandler, // 119: PWM1 capture 1, compare 1, or reload 0 interrupt
  526. PWM1_2_IRQHandler, // 120: PWM1 capture 2, compare 2, or reload 0 interrupt
  527. PWM1_3_IRQHandler, // 121: PWM1 capture 3, compare 3, or reload 0 interrupt
  528. PWM1_FAULT_IRQHandler, // 122: PWM1 fault or reload error interrupt
  529. Reserved123_IRQHandler, // 123: Reserved interrupt
  530. FLEXSPI_IRQHandler, // 124: FlexSPI0 interrupt
  531. SEMC_IRQHandler, // 125: Reserved interrupt
  532. USDHC1_IRQHandler, // 126: USDHC1 interrupt
  533. USDHC2_IRQHandler, // 127: USDHC2 interrupt
  534. USB_OTG2_IRQHandler, // 128: USBO2 USB OTG2
  535. USB_OTG1_IRQHandler, // 129: USBO2 USB OTG1
  536. ENET_IRQHandler, // 130: ENET interrupt
  537. ENET_1588_Timer_IRQHandler, // 131: ENET_1588_Timer interrupt
  538. XBAR1_IRQ_0_1_IRQHandler, // 132: XBAR1 interrupt
  539. XBAR1_IRQ_2_3_IRQHandler, // 133: XBAR1 interrupt
  540. ADC_ETC_IRQ0_IRQHandler, // 134: ADCETC IRQ0 interrupt
  541. ADC_ETC_IRQ1_IRQHandler, // 135: ADCETC IRQ1 interrupt
  542. ADC_ETC_IRQ2_IRQHandler, // 136: ADCETC IRQ2 interrupt
  543. ADC_ETC_ERROR_IRQ_IRQHandler, // 137: ADCETC Error IRQ interrupt
  544. PIT_IRQHandler, // 138: PIT interrupt
  545. ACMP1_IRQHandler, // 139: ACMP interrupt
  546. ACMP2_IRQHandler, // 140: ACMP interrupt
  547. ACMP3_IRQHandler, // 141: ACMP interrupt
  548. ACMP4_IRQHandler, // 142: ACMP interrupt
  549. Reserved143_IRQHandler, // 143: Reserved interrupt
  550. Reserved144_IRQHandler, // 144: Reserved interrupt
  551. ENC1_IRQHandler, // 145: ENC1 interrupt
  552. ENC2_IRQHandler, // 146: ENC2 interrupt
  553. ENC3_IRQHandler, // 147: ENC3 interrupt
  554. ENC4_IRQHandler, // 148: ENC4 interrupt
  555. TMR1_IRQHandler, // 149: TMR1 interrupt
  556. TMR2_IRQHandler, // 150: TMR2 interrupt
  557. TMR3_IRQHandler, // 151: TMR3 interrupt
  558. TMR4_IRQHandler, // 152: TMR4 interrupt
  559. PWM2_0_IRQHandler, // 153: PWM2 capture 0, compare 0, or reload 0 interrupt
  560. PWM2_1_IRQHandler, // 154: PWM2 capture 1, compare 1, or reload 0 interrupt
  561. PWM2_2_IRQHandler, // 155: PWM2 capture 2, compare 2, or reload 0 interrupt
  562. PWM2_3_IRQHandler, // 156: PWM2 capture 3, compare 3, or reload 0 interrupt
  563. PWM2_FAULT_IRQHandler, // 157: PWM2 fault or reload error interrupt
  564. PWM3_0_IRQHandler, // 158: PWM3 capture 0, compare 0, or reload 0 interrupt
  565. PWM3_1_IRQHandler, // 159: PWM3 capture 1, compare 1, or reload 0 interrupt
  566. PWM3_2_IRQHandler, // 160: PWM3 capture 2, compare 2, or reload 0 interrupt
  567. PWM3_3_IRQHandler, // 161: PWM3 capture 3, compare 3, or reload 0 interrupt
  568. PWM3_FAULT_IRQHandler, // 162: PWM3 fault or reload error interrupt
  569. PWM4_0_IRQHandler, // 163: PWM4 capture 0, compare 0, or reload 0 interrupt
  570. PWM4_1_IRQHandler, // 164: PWM4 capture 1, compare 1, or reload 0 interrupt
  571. PWM4_2_IRQHandler, // 165: PWM4 capture 2, compare 2, or reload 0 interrupt
  572. PWM4_3_IRQHandler, // 166: PWM4 capture 3, compare 3, or reload 0 interrupt
  573. PWM4_FAULT_IRQHandler, // 167: PWM4 fault or reload error interrupt
  574. }; /* End of g_pfnVectors */
  575. //*****************************************************************************
  576. // Functions to carry out the initialization of RW and BSS data sections. These
  577. // are written as separate functions rather than being inlined within the
  578. // ResetISR() function in order to cope with MCUs with multiple banks of
  579. // memory.
  580. //*****************************************************************************
  581. __attribute__ ((section(".after_vectors.init_data")))
  582. void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
  583. unsigned int *pulDest = (unsigned int*) start;
  584. unsigned int *pulSrc = (unsigned int*) romstart;
  585. unsigned int loop;
  586. for (loop = 0; loop < len; loop = loop + 4)
  587. *pulDest++ = *pulSrc++;
  588. }
  589. __attribute__ ((section(".after_vectors.init_bss")))
  590. void bss_init(unsigned int start, unsigned int len) {
  591. unsigned int *pulDest = (unsigned int*) start;
  592. unsigned int loop;
  593. for (loop = 0; loop < len; loop = loop + 4)
  594. *pulDest++ = 0;
  595. }
  596. //*****************************************************************************
  597. // The following symbols are constructs generated by the linker, indicating
  598. // the location of various points in the "Global Section Table". This table is
  599. // created by the linker via the Code Red managed linker script mechanism. It
  600. // contains the load address, execution address and length of each RW data
  601. // section and the execution and length of each BSS (zero initialized) section.
  602. //*****************************************************************************
  603. extern unsigned int __data_section_table;
  604. extern unsigned int __data_section_table_end;
  605. extern unsigned int __bss_section_table;
  606. extern unsigned int __bss_section_table_end;
  607. //*****************************************************************************
  608. // Reset entry point for your code.
  609. // Sets up a simple runtime environment and initializes the C/C++
  610. // library.
  611. //*****************************************************************************
  612. __attribute__ ((section(".after_vectors.reset")))
  613. void ResetISR(void) {
  614. // Disable interrupts
  615. __asm volatile ("cpsid i");
  616. #if defined (__USE_CMSIS)
  617. // If __USE_CMSIS defined, then call CMSIS SystemInit code
  618. SystemInit();
  619. #else
  620. // Disable Watchdog
  621. volatile unsigned int *WDOG1_WCR = (unsigned int *) 0x400B8000;
  622. *WDOG1_WCR = *WDOG1_WCR & ~(1 << 2);
  623. volatile unsigned int *WDOG2_WCR = (unsigned int *) 0x400D0000;
  624. *WDOG2_WCR = *WDOG2_WCR & ~(1 << 2);
  625. // Write watchdog update key to unlock
  626. *((volatile unsigned int *)0x400BC004) = 0xD928C520;
  627. // Set timeout value
  628. *((volatile unsigned int *)0x400BC008) = 0xFFFF;
  629. // Now disable watchdog via control register
  630. volatile unsigned int *RTWDOG_CS = (unsigned int *) 0x400BC000;
  631. *RTWDOG_CS = (*RTWDOG_CS & ~(1 << 7)) | (1 << 5);
  632. #endif // (__USE_CMSIS)
  633. //
  634. // Copy the data sections from flash to SRAM.
  635. //
  636. unsigned int LoadAddr, ExeAddr, SectionLen;
  637. unsigned int *SectionTableAddr;
  638. // Load base address of Global Section Table
  639. SectionTableAddr = &__data_section_table;
  640. // Copy the data sections from flash to SRAM.
  641. while (SectionTableAddr < &__data_section_table_end) {
  642. LoadAddr = *SectionTableAddr++;
  643. ExeAddr = *SectionTableAddr++;
  644. SectionLen = *SectionTableAddr++;
  645. data_init(LoadAddr, ExeAddr, SectionLen);
  646. }
  647. // At this point, SectionTableAddr = &__bss_section_table;
  648. // Zero fill the bss segment
  649. while (SectionTableAddr < &__bss_section_table_end) {
  650. ExeAddr = *SectionTableAddr++;
  651. SectionLen = *SectionTableAddr++;
  652. bss_init(ExeAddr, SectionLen);
  653. }
  654. #if !defined (__USE_CMSIS)
  655. // Assume that if __USE_CMSIS defined, then CMSIS SystemInit code
  656. // will setup the VTOR register
  657. // Check to see if we are running the code from a non-zero
  658. // address (eg RAM, external flash), in which case we need
  659. // to modify the VTOR register to tell the CPU that the
  660. // vector table is located at a non-0x0 address.
  661. unsigned int * pSCB_VTOR = (unsigned int *) 0xE000ED08;
  662. if ((unsigned int *)g_pfnVectors!=(unsigned int *) 0x00000000) {
  663. *pSCB_VTOR = (unsigned int)g_pfnVectors;
  664. }
  665. #endif // (__USE_CMSIS)
  666. #if defined (__cplusplus)
  667. //
  668. // Call C++ library initialisation
  669. //
  670. __libc_init_array();
  671. #endif
  672. // Reenable interrupts
  673. __asm volatile ("cpsie i");
  674. #if defined (__REDLIB__)
  675. // Call the Redlib library, which in turn calls main()
  676. __main();
  677. #else
  678. main();
  679. #endif
  680. //
  681. // main() shouldn't return, but if it does, we'll just enter an infinite loop
  682. //
  683. while (1) {
  684. ;
  685. }
  686. }
  687. //*****************************************************************************
  688. // Default core exception handlers. Override the ones here by defining your own
  689. // handler routines in your application code.
  690. //*****************************************************************************
  691. WEAK_AV void NMI_Handler(void)
  692. { while(1) {}
  693. }
  694. WEAK_AV void HardFault_Handler(void)
  695. { while(1) {}
  696. }
  697. WEAK_AV void SVC_Handler(void)
  698. { while(1) {}
  699. }
  700. WEAK_AV void PendSV_Handler(void)
  701. { while(1) {}
  702. }
  703. WEAK_AV void SysTick_Handler(void)
  704. { while(1) {}
  705. }
  706. //*****************************************************************************
  707. // Processor ends up here if an unexpected interrupt occurs or a specific
  708. // handler is not present in the application code.
  709. //*****************************************************************************
  710. WEAK_AV void IntDefaultHandler(void)
  711. { while(1) {}
  712. }
  713. //*****************************************************************************
  714. // Default application exception handlers. Override the ones here by defining
  715. // your own handler routines in your application code. These routines call
  716. // driver exception handlers or IntDefaultHandler() if no driver exception
  717. // handler is included.
  718. //*****************************************************************************
  719. WEAK void DMA0_DMA16_IRQHandler(void)
  720. { DMA0_DMA16_DriverIRQHandler();
  721. }
  722. WEAK void DMA1_DMA17_IRQHandler(void)
  723. { DMA1_DMA17_DriverIRQHandler();
  724. }
  725. WEAK void DMA2_DMA18_IRQHandler(void)
  726. { DMA2_DMA18_DriverIRQHandler();
  727. }
  728. WEAK void DMA3_DMA19_IRQHandler(void)
  729. { DMA3_DMA19_DriverIRQHandler();
  730. }
  731. WEAK void DMA4_DMA20_IRQHandler(void)
  732. { DMA4_DMA20_DriverIRQHandler();
  733. }
  734. WEAK void DMA5_DMA21_IRQHandler(void)
  735. { DMA5_DMA21_DriverIRQHandler();
  736. }
  737. WEAK void DMA6_DMA22_IRQHandler(void)
  738. { DMA6_DMA22_DriverIRQHandler();
  739. }
  740. WEAK void DMA7_DMA23_IRQHandler(void)
  741. { DMA7_DMA23_DriverIRQHandler();
  742. }
  743. WEAK void DMA8_DMA24_IRQHandler(void)
  744. { DMA8_DMA24_DriverIRQHandler();
  745. }
  746. WEAK void DMA9_DMA25_IRQHandler(void)
  747. { DMA9_DMA25_DriverIRQHandler();
  748. }
  749. WEAK void DMA10_DMA26_IRQHandler(void)
  750. { DMA10_DMA26_DriverIRQHandler();
  751. }
  752. WEAK void DMA11_DMA27_IRQHandler(void)
  753. { DMA11_DMA27_DriverIRQHandler();
  754. }
  755. WEAK void DMA12_DMA28_IRQHandler(void)
  756. { DMA12_DMA28_DriverIRQHandler();
  757. }
  758. WEAK void DMA13_DMA29_IRQHandler(void)
  759. { DMA13_DMA29_DriverIRQHandler();
  760. }
  761. WEAK void DMA14_DMA30_IRQHandler(void)
  762. { DMA14_DMA30_DriverIRQHandler();
  763. }
  764. WEAK void DMA15_DMA31_IRQHandler(void)
  765. { DMA15_DMA31_DriverIRQHandler();
  766. }
  767. WEAK void DMA_ERROR_IRQHandler(void)
  768. { DMA_ERROR_DriverIRQHandler();
  769. }
  770. WEAK void CTI0_ERROR_IRQHandler(void)
  771. { CTI0_ERROR_DriverIRQHandler();
  772. }
  773. WEAK void CTI1_ERROR_IRQHandler(void)
  774. { CTI1_ERROR_DriverIRQHandler();
  775. }
  776. WEAK void CORE_IRQHandler(void)
  777. { CORE_DriverIRQHandler();
  778. }
  779. WEAK void LPUART1_IRQHandler(void)
  780. { LPUART1_DriverIRQHandler();
  781. }
  782. WEAK void LPUART2_IRQHandler(void)
  783. { LPUART2_DriverIRQHandler();
  784. }
  785. WEAK void LPUART3_IRQHandler(void)
  786. { LPUART3_DriverIRQHandler();
  787. }
  788. WEAK void LPUART4_IRQHandler(void)
  789. { LPUART4_DriverIRQHandler();
  790. }
  791. WEAK void LPUART5_IRQHandler(void)
  792. { LPUART5_DriverIRQHandler();
  793. }
  794. WEAK void LPUART6_IRQHandler(void)
  795. { LPUART6_DriverIRQHandler();
  796. }
  797. WEAK void LPUART7_IRQHandler(void)
  798. { LPUART7_DriverIRQHandler();
  799. }
  800. WEAK void LPUART8_IRQHandler(void)
  801. { LPUART8_DriverIRQHandler();
  802. }
  803. WEAK void LPI2C1_IRQHandler(void)
  804. { LPI2C1_DriverIRQHandler();
  805. }
  806. WEAK void LPI2C2_IRQHandler(void)
  807. { LPI2C2_DriverIRQHandler();
  808. }
  809. WEAK void LPI2C3_IRQHandler(void)
  810. { LPI2C3_DriverIRQHandler();
  811. }
  812. WEAK void LPI2C4_IRQHandler(void)
  813. { LPI2C4_DriverIRQHandler();
  814. }
  815. WEAK void LPSPI1_IRQHandler(void)
  816. { LPSPI1_DriverIRQHandler();
  817. }
  818. WEAK void LPSPI2_IRQHandler(void)
  819. { LPSPI2_DriverIRQHandler();
  820. }
  821. WEAK void LPSPI3_IRQHandler(void)
  822. { LPSPI3_DriverIRQHandler();
  823. }
  824. WEAK void LPSPI4_IRQHandler(void)
  825. { LPSPI4_DriverIRQHandler();
  826. }
  827. WEAK void CAN1_IRQHandler(void)
  828. { CAN1_DriverIRQHandler();
  829. }
  830. WEAK void CAN2_IRQHandler(void)
  831. { CAN2_DriverIRQHandler();
  832. }
  833. WEAK void FLEXRAM_IRQHandler(void)
  834. { FLEXRAM_DriverIRQHandler();
  835. }
  836. WEAK void KPP_IRQHandler(void)
  837. { KPP_DriverIRQHandler();
  838. }
  839. WEAK void TSC_DIG_IRQHandler(void)
  840. { TSC_DIG_DriverIRQHandler();
  841. }
  842. WEAK void GPR_IRQ_IRQHandler(void)
  843. { GPR_IRQ_DriverIRQHandler();
  844. }
  845. WEAK void LCDIF_IRQHandler(void)
  846. { LCDIF_DriverIRQHandler();
  847. }
  848. WEAK void CSI_IRQHandler(void)
  849. { CSI_DriverIRQHandler();
  850. }
  851. WEAK void PXP_IRQHandler(void)
  852. { PXP_DriverIRQHandler();
  853. }
  854. WEAK void WDOG2_IRQHandler(void)
  855. { WDOG2_DriverIRQHandler();
  856. }
  857. WEAK void SNVS_HP_WRAPPER_IRQHandler(void)
  858. { SNVS_HP_WRAPPER_DriverIRQHandler();
  859. }
  860. WEAK void SNVS_HP_WRAPPER_TZ_IRQHandler(void)
  861. { SNVS_HP_WRAPPER_TZ_DriverIRQHandler();
  862. }
  863. WEAK void SNVS_LP_WRAPPER_IRQHandler(void)
  864. { SNVS_LP_WRAPPER_DriverIRQHandler();
  865. }
  866. WEAK void CSU_IRQHandler(void)
  867. { CSU_DriverIRQHandler();
  868. }
  869. WEAK void DCP_IRQHandler(void)
  870. { DCP_DriverIRQHandler();
  871. }
  872. WEAK void DCP_VMI_IRQHandler(void)
  873. { DCP_VMI_DriverIRQHandler();
  874. }
  875. WEAK void Reserved68_IRQHandler(void)
  876. { Reserved68_DriverIRQHandler();
  877. }
  878. WEAK void TRNG_IRQHandler(void)
  879. { TRNG_DriverIRQHandler();
  880. }
  881. WEAK void SJC_IRQHandler(void)
  882. { SJC_DriverIRQHandler();
  883. }
  884. WEAK void BEE_IRQHandler(void)
  885. { BEE_DriverIRQHandler();
  886. }
  887. WEAK void SAI1_IRQHandler(void)
  888. { SAI1_DriverIRQHandler();
  889. }
  890. WEAK void SAI2_IRQHandler(void)
  891. { SAI2_DriverIRQHandler();
  892. }
  893. WEAK void SAI3_RX_IRQHandler(void)
  894. { SAI3_RX_DriverIRQHandler();
  895. }
  896. WEAK void SAI3_TX_IRQHandler(void)
  897. { SAI3_TX_DriverIRQHandler();
  898. }
  899. WEAK void SPDIF_IRQHandler(void)
  900. { SPDIF_DriverIRQHandler();
  901. }
  902. WEAK void PMU_EVENT_IRQHandler(void)
  903. { PMU_EVENT_DriverIRQHandler();
  904. }
  905. WEAK void Reserved78_IRQHandler(void)
  906. { Reserved78_DriverIRQHandler();
  907. }
  908. WEAK void TEMP_LOW_HIGH_IRQHandler(void)
  909. { TEMP_LOW_HIGH_DriverIRQHandler();
  910. }
  911. WEAK void TEMP_PANIC_IRQHandler(void)
  912. { TEMP_PANIC_DriverIRQHandler();
  913. }
  914. WEAK void USB_PHY1_IRQHandler(void)
  915. { USB_PHY1_DriverIRQHandler();
  916. }
  917. WEAK void USB_PHY2_IRQHandler(void)
  918. { USB_PHY2_DriverIRQHandler();
  919. }
  920. WEAK void ADC1_IRQHandler(void)
  921. { ADC1_DriverIRQHandler();
  922. }
  923. WEAK void ADC2_IRQHandler(void)
  924. { ADC2_DriverIRQHandler();
  925. }
  926. WEAK void DCDC_IRQHandler(void)
  927. { DCDC_DriverIRQHandler();
  928. }
  929. WEAK void Reserved86_IRQHandler(void)
  930. { Reserved86_DriverIRQHandler();
  931. }
  932. WEAK void Reserved87_IRQHandler(void)
  933. { Reserved87_DriverIRQHandler();
  934. }
  935. WEAK void GPIO1_INT0_IRQHandler(void)
  936. { GPIO1_INT0_DriverIRQHandler();
  937. }
  938. WEAK void GPIO1_INT1_IRQHandler(void)
  939. { GPIO1_INT1_DriverIRQHandler();
  940. }
  941. WEAK void GPIO1_INT2_IRQHandler(void)
  942. { GPIO1_INT2_DriverIRQHandler();
  943. }
  944. WEAK void GPIO1_INT3_IRQHandler(void)
  945. { GPIO1_INT3_DriverIRQHandler();
  946. }
  947. WEAK void GPIO1_INT4_IRQHandler(void)
  948. { GPIO1_INT4_DriverIRQHandler();
  949. }
  950. WEAK void GPIO1_INT5_IRQHandler(void)
  951. { GPIO1_INT5_DriverIRQHandler();
  952. }
  953. WEAK void GPIO1_INT6_IRQHandler(void)
  954. { GPIO1_INT6_DriverIRQHandler();
  955. }
  956. WEAK void GPIO1_INT7_IRQHandler(void)
  957. { GPIO1_INT7_DriverIRQHandler();
  958. }
  959. WEAK void GPIO1_Combined_0_15_IRQHandler(void)
  960. { GPIO1_Combined_0_15_DriverIRQHandler();
  961. }
  962. WEAK void GPIO1_Combined_16_31_IRQHandler(void)
  963. { GPIO1_Combined_16_31_DriverIRQHandler();
  964. }
  965. WEAK void GPIO2_Combined_0_15_IRQHandler(void)
  966. { GPIO2_Combined_0_15_DriverIRQHandler();
  967. }
  968. WEAK void GPIO2_Combined_16_31_IRQHandler(void)
  969. { GPIO2_Combined_16_31_DriverIRQHandler();
  970. }
  971. WEAK void GPIO3_Combined_0_15_IRQHandler(void)
  972. { GPIO3_Combined_0_15_DriverIRQHandler();
  973. }
  974. WEAK void GPIO3_Combined_16_31_IRQHandler(void)
  975. { GPIO3_Combined_16_31_DriverIRQHandler();
  976. }
  977. WEAK void GPIO4_Combined_0_15_IRQHandler(void)
  978. { GPIO4_Combined_0_15_DriverIRQHandler();
  979. }
  980. WEAK void GPIO4_Combined_16_31_IRQHandler(void)
  981. { GPIO4_Combined_16_31_DriverIRQHandler();
  982. }
  983. WEAK void GPIO5_Combined_0_15_IRQHandler(void)
  984. { GPIO5_Combined_0_15_DriverIRQHandler();
  985. }
  986. WEAK void GPIO5_Combined_16_31_IRQHandler(void)
  987. { GPIO5_Combined_16_31_DriverIRQHandler();
  988. }
  989. WEAK void FLEXIO1_IRQHandler(void)
  990. { FLEXIO1_DriverIRQHandler();
  991. }
  992. WEAK void FLEXIO2_IRQHandler(void)
  993. { FLEXIO2_DriverIRQHandler();
  994. }
  995. WEAK void WDOG1_IRQHandler(void)
  996. { WDOG1_DriverIRQHandler();
  997. }
  998. WEAK void RTWDOG_IRQHandler(void)
  999. { RTWDOG_DriverIRQHandler();
  1000. }
  1001. WEAK void EWM_IRQHandler(void)
  1002. { EWM_DriverIRQHandler();
  1003. }
  1004. WEAK void CCM_1_IRQHandler(void)
  1005. { CCM_1_DriverIRQHandler();
  1006. }
  1007. WEAK void CCM_2_IRQHandler(void)
  1008. { CCM_2_DriverIRQHandler();
  1009. }
  1010. WEAK void GPC_IRQHandler(void)
  1011. { GPC_DriverIRQHandler();
  1012. }
  1013. WEAK void SRC_IRQHandler(void)
  1014. { SRC_DriverIRQHandler();
  1015. }
  1016. WEAK void Reserved115_IRQHandler(void)
  1017. { Reserved115_DriverIRQHandler();
  1018. }
  1019. WEAK void GPT1_IRQHandler(void)
  1020. { GPT1_DriverIRQHandler();
  1021. }
  1022. WEAK void GPT2_IRQHandler(void)
  1023. { GPT2_DriverIRQHandler();
  1024. }
  1025. WEAK void PWM1_0_IRQHandler(void)
  1026. { PWM1_0_DriverIRQHandler();
  1027. }
  1028. WEAK void PWM1_1_IRQHandler(void)
  1029. { PWM1_1_DriverIRQHandler();
  1030. }
  1031. WEAK void PWM1_2_IRQHandler(void)
  1032. { PWM1_2_DriverIRQHandler();
  1033. }
  1034. WEAK void PWM1_3_IRQHandler(void)
  1035. { PWM1_3_DriverIRQHandler();
  1036. }
  1037. WEAK void PWM1_FAULT_IRQHandler(void)
  1038. { PWM1_FAULT_DriverIRQHandler();
  1039. }
  1040. WEAK void Reserved123_IRQHandler(void)
  1041. { Reserved123_DriverIRQHandler();
  1042. }
  1043. WEAK void FLEXSPI_IRQHandler(void)
  1044. { FLEXSPI_DriverIRQHandler();
  1045. }
  1046. WEAK void SEMC_IRQHandler(void)
  1047. { SEMC_DriverIRQHandler();
  1048. }
  1049. WEAK void USDHC1_IRQHandler(void)
  1050. { USDHC1_DriverIRQHandler();
  1051. }
  1052. WEAK void USDHC2_IRQHandler(void)
  1053. { USDHC2_DriverIRQHandler();
  1054. }
  1055. WEAK void USB_OTG2_IRQHandler(void)
  1056. { USB_OTG2_DriverIRQHandler();
  1057. }
  1058. WEAK void USB_OTG1_IRQHandler(void)
  1059. { USB_OTG1_DriverIRQHandler();
  1060. }
  1061. WEAK void ENET_IRQHandler(void)
  1062. { ENET_DriverIRQHandler();
  1063. }
  1064. WEAK void ENET_1588_Timer_IRQHandler(void)
  1065. { ENET_1588_Timer_DriverIRQHandler();
  1066. }
  1067. WEAK void XBAR1_IRQ_0_1_IRQHandler(void)
  1068. { XBAR1_IRQ_0_1_DriverIRQHandler();
  1069. }
  1070. WEAK void XBAR1_IRQ_2_3_IRQHandler(void)
  1071. { XBAR1_IRQ_2_3_DriverIRQHandler();
  1072. }
  1073. WEAK void ADC_ETC_IRQ0_IRQHandler(void)
  1074. { ADC_ETC_IRQ0_DriverIRQHandler();
  1075. }
  1076. WEAK void ADC_ETC_IRQ1_IRQHandler(void)
  1077. { ADC_ETC_IRQ1_DriverIRQHandler();
  1078. }
  1079. WEAK void ADC_ETC_IRQ2_IRQHandler(void)
  1080. { ADC_ETC_IRQ2_DriverIRQHandler();
  1081. }
  1082. WEAK void ADC_ETC_ERROR_IRQ_IRQHandler(void)
  1083. { ADC_ETC_ERROR_IRQ_DriverIRQHandler();
  1084. }
  1085. WEAK void PIT_IRQHandler(void)
  1086. { PIT_DriverIRQHandler();
  1087. }
  1088. WEAK void ACMP1_IRQHandler(void)
  1089. { ACMP1_DriverIRQHandler();
  1090. }
  1091. WEAK void ACMP2_IRQHandler(void)
  1092. { ACMP2_DriverIRQHandler();
  1093. }
  1094. WEAK void ACMP3_IRQHandler(void)
  1095. { ACMP3_DriverIRQHandler();
  1096. }
  1097. WEAK void ACMP4_IRQHandler(void)
  1098. { ACMP4_DriverIRQHandler();
  1099. }
  1100. WEAK void Reserved143_IRQHandler(void)
  1101. { Reserved143_DriverIRQHandler();
  1102. }
  1103. WEAK void Reserved144_IRQHandler(void)
  1104. { Reserved144_DriverIRQHandler();
  1105. }
  1106. WEAK void ENC1_IRQHandler(void)
  1107. { ENC1_DriverIRQHandler();
  1108. }
  1109. WEAK void ENC2_IRQHandler(void)
  1110. { ENC2_DriverIRQHandler();
  1111. }
  1112. WEAK void ENC3_IRQHandler(void)
  1113. { ENC3_DriverIRQHandler();
  1114. }
  1115. WEAK void ENC4_IRQHandler(void)
  1116. { ENC4_DriverIRQHandler();
  1117. }
  1118. WEAK void TMR1_IRQHandler(void)
  1119. { TMR1_DriverIRQHandler();
  1120. }
  1121. WEAK void TMR2_IRQHandler(void)
  1122. { TMR2_DriverIRQHandler();
  1123. }
  1124. WEAK void TMR3_IRQHandler(void)
  1125. { TMR3_DriverIRQHandler();
  1126. }
  1127. WEAK void TMR4_IRQHandler(void)
  1128. { TMR4_DriverIRQHandler();
  1129. }
  1130. WEAK void PWM2_0_IRQHandler(void)
  1131. { PWM2_0_DriverIRQHandler();
  1132. }
  1133. WEAK void PWM2_1_IRQHandler(void)
  1134. { PWM2_1_DriverIRQHandler();
  1135. }
  1136. WEAK void PWM2_2_IRQHandler(void)
  1137. { PWM2_2_DriverIRQHandler();
  1138. }
  1139. WEAK void PWM2_3_IRQHandler(void)
  1140. { PWM2_3_DriverIRQHandler();
  1141. }
  1142. WEAK void PWM2_FAULT_IRQHandler(void)
  1143. { PWM2_FAULT_DriverIRQHandler();
  1144. }
  1145. WEAK void PWM3_0_IRQHandler(void)
  1146. { PWM3_0_DriverIRQHandler();
  1147. }
  1148. WEAK void PWM3_1_IRQHandler(void)
  1149. { PWM3_1_DriverIRQHandler();
  1150. }
  1151. WEAK void PWM3_2_IRQHandler(void)
  1152. { PWM3_2_DriverIRQHandler();
  1153. }
  1154. WEAK void PWM3_3_IRQHandler(void)
  1155. { PWM3_3_DriverIRQHandler();
  1156. }
  1157. WEAK void PWM3_FAULT_IRQHandler(void)
  1158. { PWM3_FAULT_DriverIRQHandler();
  1159. }
  1160. WEAK void PWM4_0_IRQHandler(void)
  1161. { PWM4_0_DriverIRQHandler();
  1162. }
  1163. WEAK void PWM4_1_IRQHandler(void)
  1164. { PWM4_1_DriverIRQHandler();
  1165. }
  1166. WEAK void PWM4_2_IRQHandler(void)
  1167. { PWM4_2_DriverIRQHandler();
  1168. }
  1169. WEAK void PWM4_3_IRQHandler(void)
  1170. { PWM4_3_DriverIRQHandler();
  1171. }
  1172. WEAK void PWM4_FAULT_IRQHandler(void)
  1173. { PWM4_FAULT_DriverIRQHandler();
  1174. }
  1175. //*****************************************************************************
  1176. #if defined (DEBUG)
  1177. #pragma GCC pop_options
  1178. #endif // (DEBUG)