isr.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /*
  2. * Copyright (C) 2017-2019 Alibaba Group Holding Limited
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2020-08-20 zx.chen source file for the interrupt server route
  9. */
  10. #include <drv_common.h>
  11. #include <csi_config.h>
  12. #include "soc.h"
  13. #ifndef CONFIG_SYSTICK_HZ
  14. #define CONFIG_SYSTICK_HZ 100
  15. #endif
  16. extern volatile uint32_t rt_thread_switch_interrupt_flag;
  17. extern void ck_usart_irqhandler(int32_t idx);
  18. extern void dw_timer_irqhandler(int32_t idx);
  19. extern void dw_gpio_irqhandler(int32_t idx);
  20. extern void systick_handler(void);
  21. extern void xPortSysTickHandler(void);
  22. extern void OSTimeTick(void);
  23. #define ATTRIBUTE_ISR __attribute__ ((interrupt ("machine")))
  24. #define readl(addr) \
  25. ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; })
  26. #if(CONFIG_KERNEL_RTTHREAD == 1)
  27. #define CSI_INTRPT_ENTER() rt_interrupt_enter()
  28. #define CSI_INTRPT_EXIT() rt_interrupt_leave()
  29. #endif
  30. ATTRIBUTE_ISR void SysTick_Handler(void)
  31. {
  32. #if(CONFIG_KERNEL_RTTHREAD == 1)
  33. CSI_INTRPT_ENTER();
  34. #endif
  35. csi_coret_config(drv_get_sys_freq() / CONFIG_SYSTICK_HZ, CORET_IRQn);
  36. #if defined(CONFIG_KERNEL_RHINO)
  37. systick_handler();
  38. #elif defined(CONFIG_KERNEL_FREERTOS)
  39. xPortSysTickHandler();
  40. #elif defined(CONFIG_KERNEL_RTTHREAD)
  41. rt_tick_increase();
  42. #elif defined(CONFIG_KERNEL_UCOS)
  43. OSTimeTick();
  44. #endif
  45. #if(CONFIG_KERNEL_RTTHREAD == 1)
  46. CSI_INTRPT_EXIT();
  47. #endif
  48. }
  49. ATTRIBUTE_ISR void USART_IRQHandler(void)
  50. {
  51. CSI_INTRPT_ENTER();
  52. ck_usart0_irqhandler();
  53. CSI_INTRPT_EXIT();
  54. }
  55. ATTRIBUTE_ISR void TIM0_IRQHandler(void)
  56. {
  57. CSI_INTRPT_ENTER();
  58. dw_timer_irqhandler(0);
  59. CSI_INTRPT_EXIT();
  60. }
  61. ATTRIBUTE_ISR void TIM1_IRQHandler(void)
  62. {
  63. CSI_INTRPT_ENTER();
  64. dw_timer_irqhandler(1);
  65. CSI_INTRPT_EXIT();
  66. }
  67. ATTRIBUTE_ISR void TIM2_IRQHandler(void)
  68. {
  69. CSI_INTRPT_ENTER();
  70. dw_timer_irqhandler(2);
  71. CSI_INTRPT_EXIT();
  72. }
  73. ATTRIBUTE_ISR void TIM3_IRQHandler(void)
  74. {
  75. CSI_INTRPT_ENTER();
  76. dw_timer_irqhandler(3);
  77. CSI_INTRPT_EXIT();
  78. }
  79. ATTRIBUTE_ISR void TIM4_NMIHandler(void)
  80. {
  81. dw_timer_irqhandler(4);
  82. }
  83. ATTRIBUTE_ISR void TIM6_IRQHandler(void)
  84. {
  85. CSI_INTRPT_ENTER();
  86. dw_timer_irqhandler(6);
  87. CSI_INTRPT_EXIT();
  88. }
  89. ATTRIBUTE_ISR void TIM7_IRQHandler(void)
  90. {
  91. dw_timer_irqhandler(7);
  92. }
  93. ATTRIBUTE_ISR void TIM8_IRQHandler(void)
  94. {
  95. CSI_INTRPT_ENTER();
  96. dw_timer_irqhandler(8);
  97. CSI_INTRPT_EXIT();
  98. }
  99. ATTRIBUTE_ISR void TIM9_IRQHandler(void)
  100. {
  101. CSI_INTRPT_ENTER();
  102. dw_timer_irqhandler(9);
  103. CSI_INTRPT_EXIT();
  104. }
  105. ATTRIBUTE_ISR void TIM10_IRQHandler(void)
  106. {
  107. CSI_INTRPT_ENTER();
  108. dw_timer_irqhandler(10);
  109. CSI_INTRPT_EXIT();
  110. }
  111. ATTRIBUTE_ISR void TIM11_IRQHandler(void)
  112. {
  113. CSI_INTRPT_ENTER();
  114. dw_timer_irqhandler(11);
  115. CSI_INTRPT_EXIT();
  116. }
  117. ATTRIBUTE_ISR void GPIO0_IRQHandler(void)
  118. {
  119. CSI_INTRPT_ENTER();
  120. dw_gpio_irqhandler(0);
  121. CSI_INTRPT_EXIT();
  122. }
  123. ATTRIBUTE_ISR void GPIO1_IRQHandler(void)
  124. {
  125. CSI_INTRPT_ENTER();
  126. dw_gpio_irqhandler(1);
  127. CSI_INTRPT_EXIT();
  128. }
  129. ATTRIBUTE_ISR void GPIO2_IRQHandler(void)
  130. {
  131. CSI_INTRPT_ENTER();
  132. dw_gpio_irqhandler(2);
  133. CSI_INTRPT_EXIT();
  134. }
  135. ATTRIBUTE_ISR void GPIO3_IRQHandler(void)
  136. {
  137. CSI_INTRPT_ENTER();
  138. dw_gpio_irqhandler(3);
  139. CSI_INTRPT_EXIT();
  140. }
  141. ATTRIBUTE_ISR void GPIO4_IRQHandler(void)
  142. {
  143. CSI_INTRPT_ENTER();
  144. dw_gpio_irqhandler(4);
  145. CSI_INTRPT_EXIT();
  146. }
  147. ATTRIBUTE_ISR void GPIO5_IRQHandler(void)
  148. {
  149. CSI_INTRPT_ENTER();
  150. dw_gpio_irqhandler(5);
  151. CSI_INTRPT_EXIT();
  152. }
  153. ATTRIBUTE_ISR void GPIO6_IRQHandler(void)
  154. {
  155. CSI_INTRPT_ENTER();
  156. dw_gpio_irqhandler(6);
  157. CSI_INTRPT_EXIT();
  158. }
  159. ATTRIBUTE_ISR void GPIO7_IRQHandler(void)
  160. {
  161. CSI_INTRPT_ENTER();
  162. dw_gpio_irqhandler(7);
  163. CSI_INTRPT_EXIT();
  164. }