• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /******************************************************************************
18  * @file     isr.c
19  * @brief    source file for the interrupt server route
20  * @version  V1.0
21  * @date     02. June 2017
22  ******************************************************************************/
23 #include <drv_common.h>
24 #include <csi_config.h>
25 #include "soc.h"
26 #ifndef CONFIG_KERNEL_NONE
27 #include <csi_kernel.h>
28 #endif
29 
30 extern void ck_usart_irqhandler(int32_t idx);
31 extern void dw_timer_irqhandler(int32_t idx);
32 extern void dw_gpio_irqhandler(int32_t idx);
33 extern void systick_handler(void);
34 extern void xPortSysTickHandler(void);
35 extern void OSTimeTick(void);
36 
37 #if defined(CONFIG_SUPPORT_TSPEND) || defined(CONFIG_KERNEL_NONE)
38 #define  ATTRIBUTE_ISR __attribute__((isr))
39 #else
40 #define  ATTRIBUTE_ISR
41 #endif
42 
43 #define readl(addr) \
44     ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; })
45 
46 #ifndef CONFIG_KERNEL_NONE
47 #define  CSI_INTRPT_ENTER() csi_kernel_intrpt_enter()
48 #define  CSI_INTRPT_EXIT()  csi_kernel_intrpt_exit()
49 #else
50 #define  CSI_INTRPT_ENTER()
51 #define  CSI_INTRPT_EXIT()
52 #endif
53 
CORET_IRQHandler(void)54 ATTRIBUTE_ISR void CORET_IRQHandler(void)
55 {
56 #ifndef CONFIG_KERNEL_FREERTOS
57     CSI_INTRPT_ENTER();
58 #endif
59 
60     readl(0xE000E010);
61 
62 #if defined(CONFIG_KERNEL_RHINO)
63     systick_handler();
64 #elif defined(CONFIG_KERNEL_FREERTOS)
65     xPortSysTickHandler();
66 #elif defined(CONFIG_KERNEL_UCOS)
67     OSTimeTick();
68 #endif
69 
70 #ifndef CONFIG_KERNEL_FREERTOS
71     CSI_INTRPT_EXIT();
72 #endif
73 }
74 
USART_IRQHandler(void)75 ATTRIBUTE_ISR void USART_IRQHandler(void)
76 {
77     CSI_INTRPT_ENTER();
78     ck_usart_irqhandler(0);
79     CSI_INTRPT_EXIT();
80 }
81 
TIM0_IRQHandler(void)82 ATTRIBUTE_ISR void TIM0_IRQHandler(void)
83 {
84     CSI_INTRPT_ENTER();
85     dw_timer_irqhandler(0);
86     CSI_INTRPT_EXIT();
87 }
88 
TIM1_IRQHandler(void)89 ATTRIBUTE_ISR void TIM1_IRQHandler(void)
90 {
91     CSI_INTRPT_ENTER();
92     dw_timer_irqhandler(1);
93     CSI_INTRPT_EXIT();
94 }
TIM2_IRQHandler(void)95 ATTRIBUTE_ISR void TIM2_IRQHandler(void)
96 {
97     CSI_INTRPT_ENTER();
98     dw_timer_irqhandler(2);
99     CSI_INTRPT_EXIT();
100 }
101 
TIM3_IRQHandler(void)102 ATTRIBUTE_ISR void TIM3_IRQHandler(void)
103 {
104     CSI_INTRPT_ENTER();
105     dw_timer_irqhandler(3);
106     CSI_INTRPT_EXIT();
107 }
108 
GPIO0_IRQHandler(void)109 ATTRIBUTE_ISR void GPIO0_IRQHandler(void)
110 {
111     CSI_INTRPT_ENTER();
112     dw_gpio_irqhandler(0);
113     CSI_INTRPT_EXIT();
114 }
115 
GPIO1_IRQHandler(void)116 ATTRIBUTE_ISR void GPIO1_IRQHandler(void)
117 {
118     CSI_INTRPT_ENTER();
119     dw_gpio_irqhandler(1);
120     CSI_INTRPT_EXIT();
121 }
122 
GPIO2_IRQHandler(void)123 ATTRIBUTE_ISR void GPIO2_IRQHandler(void)
124 {
125     CSI_INTRPT_ENTER();
126     dw_gpio_irqhandler(2);
127     CSI_INTRPT_EXIT();
128 }
129 
GPIO3_IRQHandler(void)130 ATTRIBUTE_ISR void GPIO3_IRQHandler(void)
131 {
132     CSI_INTRPT_ENTER();
133     dw_gpio_irqhandler(3);
134     CSI_INTRPT_EXIT();
135 }
136 
GPIO4_IRQHandler(void)137 ATTRIBUTE_ISR void GPIO4_IRQHandler(void)
138 {
139     CSI_INTRPT_ENTER();
140     dw_gpio_irqhandler(4);
141     CSI_INTRPT_EXIT();
142 }
143 
GPIO5_IRQHandler(void)144 ATTRIBUTE_ISR void GPIO5_IRQHandler(void)
145 {
146     CSI_INTRPT_ENTER();
147     dw_gpio_irqhandler(5);
148     CSI_INTRPT_EXIT();
149 }
150 
GPIO6_IRQHandler(void)151 ATTRIBUTE_ISR void GPIO6_IRQHandler(void)
152 {
153     CSI_INTRPT_ENTER();
154     dw_gpio_irqhandler(6);
155     CSI_INTRPT_EXIT();
156 }
157 
GPIO7_IRQHandler(void)158 ATTRIBUTE_ISR void GPIO7_IRQHandler(void)
159 {
160     CSI_INTRPT_ENTER();
161     dw_gpio_irqhandler(7);
162     CSI_INTRPT_EXIT();
163 }
164