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 11 #include <drv_common.h> 12 #include <csi_config.h> 13 #include "soc.h" 14 15 #ifndef CONFIG_SYSTICK_HZ 16 #define CONFIG_SYSTICK_HZ 100 17 #endif 18 19 extern volatile uint32_t rt_thread_switch_interrupt_flag; 20 21 extern void ck_usart_irqhandler(int32_t idx); 22 extern void dw_timer_irqhandler(int32_t idx); 23 extern void dw_gpio_irqhandler(int32_t idx); 24 extern void systick_handler(void); 25 extern void xPortSysTickHandler(void); 26 extern void OSTimeTick(void); 27 28 #define ATTRIBUTE_ISR __attribute__ ((interrupt ("machine"))) 29 30 #define readl(addr) \ 31 ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; }) 32 33 34 #if(CONFIG_KERNEL_RTTHREAD == 1) 35 #define CSI_INTRPT_ENTER() rt_interrupt_enter() 36 #define CSI_INTRPT_EXIT() rt_interrupt_leave() 37 #endif 38 39 SysTick_Handler(void)40ATTRIBUTE_ISR void SysTick_Handler(void) 41 { 42 #if(CONFIG_KERNEL_RTTHREAD == 1) 43 CSI_INTRPT_ENTER(); 44 #endif 45 46 csi_coret_config(drv_get_sys_freq() / CONFIG_SYSTICK_HZ, CORET_IRQn); 47 48 #if defined(CONFIG_KERNEL_RHINO) 49 systick_handler(); 50 #elif defined(CONFIG_KERNEL_FREERTOS) 51 xPortSysTickHandler(); 52 #elif defined(CONFIG_KERNEL_RTTHREAD) 53 rt_tick_increase(); 54 #elif defined(CONFIG_KERNEL_UCOS) 55 OSTimeTick(); 56 #endif 57 58 #if(CONFIG_KERNEL_RTTHREAD == 1) 59 CSI_INTRPT_EXIT(); 60 #endif 61 } 62 USART_IRQHandler(void)63ATTRIBUTE_ISR void USART_IRQHandler(void) 64 { 65 CSI_INTRPT_ENTER(); 66 ck_usart0_irqhandler(); 67 CSI_INTRPT_EXIT(); 68 } 69 TIM0_IRQHandler(void)70ATTRIBUTE_ISR void TIM0_IRQHandler(void) 71 { 72 CSI_INTRPT_ENTER(); 73 dw_timer_irqhandler(0); 74 CSI_INTRPT_EXIT(); 75 } 76 TIM1_IRQHandler(void)77ATTRIBUTE_ISR void TIM1_IRQHandler(void) 78 { 79 CSI_INTRPT_ENTER(); 80 dw_timer_irqhandler(1); 81 CSI_INTRPT_EXIT(); 82 } TIM2_IRQHandler(void)83ATTRIBUTE_ISR void TIM2_IRQHandler(void) 84 { 85 CSI_INTRPT_ENTER(); 86 dw_timer_irqhandler(2); 87 CSI_INTRPT_EXIT(); 88 } 89 TIM3_IRQHandler(void)90ATTRIBUTE_ISR void TIM3_IRQHandler(void) 91 { 92 CSI_INTRPT_ENTER(); 93 dw_timer_irqhandler(3); 94 CSI_INTRPT_EXIT(); 95 } 96 TIM4_NMIHandler(void)97ATTRIBUTE_ISR void TIM4_NMIHandler(void) 98 { 99 dw_timer_irqhandler(4); 100 } 101 TIM6_IRQHandler(void)102ATTRIBUTE_ISR void TIM6_IRQHandler(void) 103 { 104 CSI_INTRPT_ENTER(); 105 dw_timer_irqhandler(6); 106 CSI_INTRPT_EXIT(); 107 } 108 TIM7_IRQHandler(void)109ATTRIBUTE_ISR void TIM7_IRQHandler(void) 110 { 111 dw_timer_irqhandler(7); 112 } 113 TIM8_IRQHandler(void)114ATTRIBUTE_ISR void TIM8_IRQHandler(void) 115 { 116 CSI_INTRPT_ENTER(); 117 dw_timer_irqhandler(8); 118 CSI_INTRPT_EXIT(); 119 } 120 TIM9_IRQHandler(void)121ATTRIBUTE_ISR void TIM9_IRQHandler(void) 122 { 123 CSI_INTRPT_ENTER(); 124 dw_timer_irqhandler(9); 125 CSI_INTRPT_EXIT(); 126 } TIM10_IRQHandler(void)127ATTRIBUTE_ISR void TIM10_IRQHandler(void) 128 { 129 CSI_INTRPT_ENTER(); 130 dw_timer_irqhandler(10); 131 CSI_INTRPT_EXIT(); 132 } 133 TIM11_IRQHandler(void)134ATTRIBUTE_ISR void TIM11_IRQHandler(void) 135 { 136 CSI_INTRPT_ENTER(); 137 dw_timer_irqhandler(11); 138 CSI_INTRPT_EXIT(); 139 } 140 GPIO0_IRQHandler(void)141ATTRIBUTE_ISR void GPIO0_IRQHandler(void) 142 { 143 CSI_INTRPT_ENTER(); 144 dw_gpio_irqhandler(0); 145 CSI_INTRPT_EXIT(); 146 } 147 GPIO1_IRQHandler(void)148ATTRIBUTE_ISR void GPIO1_IRQHandler(void) 149 { 150 CSI_INTRPT_ENTER(); 151 dw_gpio_irqhandler(1); 152 CSI_INTRPT_EXIT(); 153 } 154 GPIO2_IRQHandler(void)155ATTRIBUTE_ISR void GPIO2_IRQHandler(void) 156 { 157 CSI_INTRPT_ENTER(); 158 dw_gpio_irqhandler(2); 159 CSI_INTRPT_EXIT(); 160 } 161 GPIO3_IRQHandler(void)162ATTRIBUTE_ISR void GPIO3_IRQHandler(void) 163 { 164 CSI_INTRPT_ENTER(); 165 dw_gpio_irqhandler(3); 166 CSI_INTRPT_EXIT(); 167 } 168 GPIO4_IRQHandler(void)169ATTRIBUTE_ISR void GPIO4_IRQHandler(void) 170 { 171 CSI_INTRPT_ENTER(); 172 dw_gpio_irqhandler(4); 173 CSI_INTRPT_EXIT(); 174 } 175 GPIO5_IRQHandler(void)176ATTRIBUTE_ISR void GPIO5_IRQHandler(void) 177 { 178 CSI_INTRPT_ENTER(); 179 dw_gpio_irqhandler(5); 180 CSI_INTRPT_EXIT(); 181 } 182 GPIO6_IRQHandler(void)183ATTRIBUTE_ISR void GPIO6_IRQHandler(void) 184 { 185 CSI_INTRPT_ENTER(); 186 dw_gpio_irqhandler(6); 187 CSI_INTRPT_EXIT(); 188 } 189 GPIO7_IRQHandler(void)190ATTRIBUTE_ISR void GPIO7_IRQHandler(void) 191 { 192 CSI_INTRPT_ENTER(); 193 dw_gpio_irqhandler(7); 194 CSI_INTRPT_EXIT(); 195 } 196