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