]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit3/isr.c
Introduce a port for T-HEAD CK802. A simple demo for T-HEAD CB2201 is also included.
[freertos] / FreeRTOS / Demo / T-HEAD_CB2201_CDK / csi / csi_driver / csky / hobbit3 / isr.c
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 <config.h>
25 #include "soc.h"
26 #ifndef CONFIG_KERNEL_NONE
27 #include <csi_kernel.h>
28 #endif
29
30 #ifndef CONFIG_USI
31 extern void dw_spi_irqhandler(int32_t idx);
32 extern void dw_usart_irqhandler(int32_t idx);
33 extern void dw_iic_irqhandler(int32_t idx);
34 #else
35 extern void ck_usi_irqhandler(int idx);
36 #endif
37 extern void ck_spu_irqhandler(int32_t idx);
38 extern void dw_timer_irqhandler(int32_t idx);
39 extern void dw_gpio_irqhandler(int32_t idx);
40 extern void ck_rtc_irqhandler(int32_t idx);
41 extern void dw_wdt_irqhandler(int32_t idx);
42 extern void ck_dma_irqhandler(int32_t idx);
43 extern void ck_aes_irqhandler(int32_t idx);
44 extern void ck_sha_irqhandler(int32_t idx);
45 #ifdef CONFIG_KERNEL_FREERTOS
46 extern void CoretimeIsr(void);
47 extern void CKPendSVIsr(void);
48 #endif
49 extern void systick_handler(void);
50 extern void xPortSysTickHandler(void);
51 extern void OSTimeTick(void);
52
53 #define readl(addr) \
54     ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; })
55
56 #ifndef CONFIG_KERNEL_NONE
57 #define  CSI_INTRPT_ENTER() csi_kernel_intrpt_enter()
58 #define  CSI_INTRPT_EXIT()  csi_kernel_intrpt_exit()
59 #else
60 #define  CSI_INTRPT_ENTER()
61 #define  CSI_INTRPT_EXIT()
62 #endif
63
64 ATTRIBUTE_ISR void CORET_IRQHandler(void)
65 {
66 #ifndef CONFIG_KERNEL_FREERTOS
67     CSI_INTRPT_ENTER();
68 #endif
69
70     readl(0xE000E010);
71
72 #if defined(CONFIG_KERNEL_RHINO)
73     systick_handler();
74 #elif defined(CONFIG_KERNEL_FREERTOS)
75     xPortSysTickHandler();
76 #elif defined(CONFIG_KERNEL_UCOS)
77     OSTimeTick();
78 #endif
79
80 #ifndef CONFIG_KERNEL_FREERTOS
81     CSI_INTRPT_EXIT();
82 #endif
83 }
84
85 #ifdef CONFIG_SPU
86 ATTRIBUTE_ISR void SPU_IRQHandler(void)
87 {
88     ck_spu_irqhandler(0);
89 }
90 #endif
91
92 #ifndef CONFIG_USI
93 ATTRIBUTE_ISR void SPI0_IRQHandler(void)
94 {
95     CSI_INTRPT_ENTER();
96     dw_spi_irqhandler(0);
97     CSI_INTRPT_EXIT();
98 }
99
100 ATTRIBUTE_ISR void SPI1_IRQHandler(void)
101 {
102     CSI_INTRPT_ENTER();
103     dw_spi_irqhandler(1);
104     CSI_INTRPT_EXIT();
105 }
106
107 ATTRIBUTE_ISR void I2C0_IRQHandler(void)
108 {
109     CSI_INTRPT_ENTER();
110     dw_iic_irqhandler(0);
111     CSI_INTRPT_EXIT();
112 }
113
114 ATTRIBUTE_ISR void I2C1_IRQHandler(void)
115 {
116     CSI_INTRPT_ENTER();
117     dw_iic_irqhandler(1);
118     CSI_INTRPT_EXIT();
119 }
120
121 ATTRIBUTE_ISR void USART0_IRQHandler(void)
122 {
123     CSI_INTRPT_ENTER();
124     dw_usart_irqhandler(0);
125     CSI_INTRPT_EXIT();
126 }
127
128 ATTRIBUTE_ISR void USART1_IRQHandler(void)
129 {
130     CSI_INTRPT_ENTER();
131     dw_usart_irqhandler(1);
132     CSI_INTRPT_EXIT();
133 }
134
135 ATTRIBUTE_ISR void USART2_IRQHandler(void)
136 {
137     CSI_INTRPT_ENTER();
138     dw_usart_irqhandler(2);
139     CSI_INTRPT_EXIT();
140 }
141
142 ATTRIBUTE_ISR void USART3_IRQHandler(void)
143 {
144     CSI_INTRPT_ENTER();
145     dw_usart_irqhandler(3);
146     CSI_INTRPT_EXIT();
147 }
148 #else
149 ATTRIBUTE_ISR void USI0_IRQHandler(void)
150 {
151     CSI_INTRPT_ENTER();
152     ck_usi_irqhandler(0);
153     CSI_INTRPT_EXIT();
154 }
155
156 ATTRIBUTE_ISR void USI1_IRQHandler(void)
157 {
158     CSI_INTRPT_ENTER();
159     ck_usi_irqhandler(1);
160     CSI_INTRPT_EXIT();
161 }
162 #endif
163 ATTRIBUTE_ISR void TIMA0_IRQHandler(void)
164 {
165     CSI_INTRPT_ENTER();
166     dw_timer_irqhandler(0);
167     CSI_INTRPT_EXIT();
168 }
169
170 ATTRIBUTE_ISR void TIMA1_IRQHandler(void)
171 {
172     CSI_INTRPT_ENTER();
173     dw_timer_irqhandler(1);
174     CSI_INTRPT_EXIT();
175 }
176 ATTRIBUTE_ISR void TIMB0_IRQHandler(void)
177 {
178     CSI_INTRPT_ENTER();
179     dw_timer_irqhandler(2);
180     CSI_INTRPT_EXIT();
181 }
182
183 ATTRIBUTE_ISR void TIMB1_IRQHandler(void)
184 {
185     CSI_INTRPT_ENTER();
186     dw_timer_irqhandler(3);
187     CSI_INTRPT_EXIT();
188 }
189
190 ATTRIBUTE_ISR void TIM34567_IRQHandler(void)
191 {
192     CSI_INTRPT_ENTER();
193     dw_timer_irqhandler(4);
194     CSI_INTRPT_EXIT();
195 }
196
197 ATTRIBUTE_ISR void GPIOA_IRQHandler(void)
198 {
199     CSI_INTRPT_ENTER();
200     dw_gpio_irqhandler(0);
201     CSI_INTRPT_EXIT();
202 }
203
204 ATTRIBUTE_ISR void GPIOB_IRQHandler(void)
205 {
206     CSI_INTRPT_ENTER();
207     dw_gpio_irqhandler(1);
208     CSI_INTRPT_EXIT();
209 }
210
211 ATTRIBUTE_ISR void RTC_IRQHandler(void)
212 {
213     CSI_INTRPT_ENTER();
214     ck_rtc_irqhandler(0);
215     CSI_INTRPT_EXIT();
216 }
217
218 ATTRIBUTE_ISR void AES_IRQHandler(void)
219 {
220     CSI_INTRPT_ENTER();
221     ck_aes_irqhandler(0);
222     CSI_INTRPT_EXIT();
223 }
224
225 ATTRIBUTE_ISR void SHA_IRQHandler(void)
226 {
227     CSI_INTRPT_ENTER();
228     ck_sha_irqhandler(0);
229     CSI_INTRPT_EXIT();
230 }
231
232 ATTRIBUTE_ISR void WDT_IRQHandler(void)
233 {
234     CSI_INTRPT_ENTER();
235     dw_wdt_irqhandler(0);
236     CSI_INTRPT_EXIT();
237 }
238
239 ATTRIBUTE_ISR void DMAC_IRQHandler(void)
240 {
241     CSI_INTRPT_ENTER();
242     ck_dma_irqhandler(0);
243     CSI_INTRPT_EXIT();
244 }