main.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /*----------------------------------------------------------------------------
  2. * Name: main.c
  3. *----------------------------------------------------------------------------*/
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include "RTE_Components.h"
  7. #include CMSIS_device_header
  8. #ifdef RTE_Compiler_EventRecorder
  9. #include "EventRecorder.h"
  10. #endif
  11. #include "cmsis_cv.h"
  12. #include "CV_Report.h"
  13. //lint -e970 allow using int for main
  14. int main (void)
  15. {
  16. // System Initialization
  17. SystemCoreClockUpdate();
  18. #ifdef RTE_Compiler_EventRecorder
  19. // Initialize and start Event Recorder
  20. (void)EventRecorderInitialize(EventRecordError, 1U);
  21. (void)EventRecorderEnable(EventRecordAll, 0xFEU, 0xFEU);
  22. #endif
  23. cmsis_cv();
  24. #ifdef __MICROLIB
  25. for(;;) {}
  26. #else
  27. exit(0);
  28. #endif
  29. }
  30. #if defined(__CORTEX_A)
  31. #include "irq_ctrl.h"
  32. #if (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) || \
  33. (defined ( __GNUC__ ))
  34. #define __IRQ __attribute__((interrupt("IRQ")))
  35. #elif defined ( __CC_ARM )
  36. #define __IRQ __irq
  37. #elif defined ( __ICCARM__ )
  38. #define __IRQ __irq __arm
  39. #else
  40. #error "Unsupported compiler!"
  41. #endif
  42. __IRQ
  43. void IRQ_Handler(void);
  44. __IRQ
  45. void IRQ_Handler(void) {
  46. const IRQn_ID_t irqn = IRQ_GetActiveIRQ();
  47. IRQHandler_t const handler = IRQ_GetHandler(irqn);
  48. if (handler != NULL) {
  49. __enable_irq();
  50. handler();
  51. __disable_irq();
  52. }
  53. IRQ_EndOfInterrupt(irqn);
  54. }
  55. __IRQ __NO_RETURN
  56. void Undef_Handler (void);
  57. __IRQ __NO_RETURN
  58. void Undef_Handler (void) {
  59. cmsis_cv_abort(__FILENAME__, __LINE__, "Undefined Instruction!");
  60. exit(0);
  61. }
  62. __IRQ
  63. void SVC_Handler (void);
  64. __IRQ
  65. void SVC_Handler (void) {
  66. }
  67. __IRQ __NO_RETURN
  68. void PAbt_Handler (void);
  69. __IRQ __NO_RETURN
  70. void PAbt_Handler (void) {
  71. cmsis_cv_abort(__FILENAME__, __LINE__, "Prefetch Abort!");
  72. exit(0);
  73. }
  74. __IRQ __NO_RETURN
  75. void DAbt_Handler (void);
  76. __IRQ __NO_RETURN
  77. void DAbt_Handler (void) {
  78. cmsis_cv_abort(__FILENAME__, __LINE__, "Data Abort!");
  79. exit(0);
  80. }
  81. __IRQ
  82. void FIQ_Handler (void);
  83. __IRQ
  84. void FIQ_Handler (void) {
  85. }
  86. #endif
  87. #if defined(__CORTEX_M)
  88. __NO_RETURN
  89. void HardFault_Handler(void);
  90. __NO_RETURN
  91. void HardFault_Handler(void) {
  92. cmsis_cv_abort(__FILENAME__, __LINE__, "HardFault!");
  93. #ifdef __MICROLIB
  94. for(;;) {}
  95. #else
  96. exit(0);
  97. #endif
  98. }
  99. #endif