• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  * Copyright (c) 2022 Telink Semiconductor (Shanghai) Co., Ltd. ("TELINK")
3  * All rights reserved.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *****************************************************************************/
18 #include "plic.h"
19 #include "ext_driver/ext_misc.h"
20 unsigned char g_plic_preempt_en = 0;
21 
22 #define RAMCODE_OPTIMIZE_UNUSED_IRQ_NOT_IMPLEMENT 1
23 
24 /**
25  * @brief    This function serves to config plic when enter some function process such as flash.
26  * @param[in]   preempt_en - 1 can disturb by interrupt, 0 can't disturb by interrupt.
27  * @param[in]   threshold  - interrupt threshold.when the interrupt priority> interrupt threshold,
28  *                           the function process will be disturb by interrupt.
29  * @return  none
30 */
plic_enter_critical_sec(unsigned char preempt_en,unsigned char threshold)31 _attribute_ram_code_sec_noinline_ unsigned int plic_enter_critical_sec(unsigned char preempt_en,
32                                                                        unsigned char threshold)
33 {
34     unsigned int r;
35     if (g_plic_preempt_en && preempt_en) {
36         plic_set_threshold(threshold);
37         r = 0;
38     } else {
39         r = core_interrupt_disable();
40     }
41     return r;
42 }
43 
44 /**
45  * @brief    This function serves to config plic when exit some function process such as flash.
46  * @param[in]   preempt_en - 1 can disturb by interrupt, 0 can disturb by interrupt.
47  * @param[in]    r         - the value of mie register to restore.
48  * @return  none
49 */
plic_exit_critical_sec(unsigned char preempt_en,unsigned int r)50 _attribute_ram_code_sec_noinline_ void plic_exit_critical_sec(unsigned char preempt_en, unsigned int r)
51 {
52     if (g_plic_preempt_en && preempt_en) {
53         plic_set_threshold(0);
54     } else {
55         core_restore_interrupt(r);
56     }
57 }
58 
59 /*
60  * FUNCTION DEFINITIONS
61  ****************************************************************************************
62  */
63 
default_irq_handler(void)64 __attribute__((section(".ram_code"))) void default_irq_handler(void)
65 {
66 }
67 void stimer_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
68 void analog_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
69 void timer1_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
70 void timer0_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
71 void dma_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
72 void bmc_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
73 void usb_ctrl_ep_setup_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
74 void usb_ctrl_ep_data_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
75 void usb_ctrl_ep_status_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
76 void usb_ctrl_ep_setinf_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
77 void usb_endpoint_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
78 void rf_dm_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
79 void rf_ble_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
80 void rf_bt_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
81 void rf_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
82 
83 void pwm_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
84 void pke_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
85 void uart1_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
86 void uart0_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
87 void audio_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
88 
89 void i2c_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
90 void hspi_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
91 void pspi_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
92 void usb_pwdn_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
93 void gpio_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
94 void gpio_risc0_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
95 void gpio_risc1_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
96 void soft_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
97 
98 void npe_bus0_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
99 void npe_bus1_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
100 void npe_bus2_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
101 void npe_bus3_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
102 void npe_bus4_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
103 void usb_250us_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
104 void usb_reset_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
105 
106 void npe_bus7_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
107 void npe_bus8_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
108 
109 void npe_bus13_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
110 void npe_bus14_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
111 
112 void npe_bus15_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
113 void npe_bus17_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
114 
115 void npe_bus21_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
116 void npe_bus22_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
117 void npe_bus23_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
118 void npe_bus24_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
119 void npe_bus25_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
120 void npe_bus26_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
121 void npe_bus27_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
122 void npe_bus28_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
123 
124 void npe_bus29_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
125 void npe_bus30_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
126 void npe_bus31_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
127 void npe_comb_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
128 void pm_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
129 void eoc_irq_handler(void) __attribute__((weak, alias("default_irq_handler")));
130 
131 typedef void (*func_isr_t)(void);
plic_isr(func_isr_t func,irq_source_e src)132 _attribute_ram_code_sec_ void plic_isr(func_isr_t func, irq_source_e src)
133 {
134 #if SUPPORT_PFT_ARCH
135     core_save_nested_context();     // save csr and  Enable interrupt enable
136     func();                         // irq handler
137     core_restore_nested_context();  // restore csr and disable interrupt enable
138     plic_interrupt_complete(src);   // complete interrupt
139     fence_iorw;                     // fence instructio
140 #else
141     func();                        // irq handler
142     plic_interrupt_complete(src);  // complete interrupt
143 #endif
144 }
145 
146 /**
147  * @brief  exception handler.this defines an exception handler to handle all the platform pre-defined exceptions.
148  * @return none
149  */
except_handler()150 _attribute_ram_code_sec_ __attribute__((weak)) void except_handler()
151 {
152     while (1) {
153         /* Unhandled Trap */
154         for (volatile unsigned int i = 0; i < 0xffff; i++) {
155             __asm__("nop");
156         }
157     }
158 }
159 _attribute_ram_code_sec_noinline_ void trap_entry(void) __attribute__((interrupt("machine"), aligned(4)));
trap_entry(void)160 void trap_entry(void)
161 {
162     except_handler();
163 }
164 
165 /**
166  * @brief system timer interrupt handler.
167  * @return none
168  */
169 _attribute_ram_code_sec_noinline_ void entry_irq1(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq1(void)170 void entry_irq1(void)
171 {
172     plic_isr(stimer_irq_handler, IRQ1_SYSTIMER);
173 }
174 
175 /**
176  * @brief analog interrupt handler.
177  * @return none
178  */
179 _attribute_ram_code_sec_noinline_ void entry_irq2(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq2(void)180 void entry_irq2(void)
181 {
182     plic_isr(analog_irq_handler, IRQ2_ALG);
183 }
184 
185 /**
186  * @brief timer1 interrupt handler.
187  * @return none
188  */
189 _attribute_ram_code_sec_noinline_ void entry_irq3(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq3(void)190 void entry_irq3(void)
191 {
192     plic_isr(timer1_irq_handler, IRQ3_TIMER1);
193 }
194 
195 /**
196  * @brief timer0 interrupt handler.
197  * @return none
198  */
199 _attribute_ram_code_sec_noinline_ void entry_irq4(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq4(void)200 void entry_irq4(void)
201 {
202     plic_isr(timer0_irq_handler, IRQ4_TIMER0);
203 }
204 
205 /**
206  * @brief dma interrupt handler.
207  * @return none
208  */
209 _attribute_ram_code_sec_noinline_ void entry_irq5(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq5(void)210 void entry_irq5(void)
211 {
212     plic_isr(dma_irq_handler, IRQ5_DMA);
213 }
214 
215 /**
216  * @brief bmc interrupt handler.
217  * @return none
218  */
219 _attribute_ram_code_sec_noinline_ void entry_irq6(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq6(void)220 void entry_irq6(void)
221 {
222 #if (!RAMCODE_OPTIMIZE_UNUSED_IRQ_NOT_IMPLEMENT)
223     plic_isr(bmc_irq_handler, IRQ6_BMC);
224 #endif
225 }
226 
227 /**
228  * @brief usb control endpoint setup interrupt handler.
229  * @return none
230  */
231 _attribute_ram_code_sec_noinline_ void entry_irq7(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq7(void)232 void entry_irq7(void)
233 {
234     plic_isr(usb_ctrl_ep_setup_irq_handler, IRQ7_USB_CTRL_EP_SETUP);
235 }
236 
237 /**
238  * @brief usb control endpoint data interrupt handler.
239  * @return none
240  */
241 _attribute_ram_code_sec_noinline_ void entry_irq8(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq8(void)242 void entry_irq8(void)
243 {
244     plic_isr(usb_ctrl_ep_data_irq_handler, IRQ8_USB_CTRL_EP_DATA);
245 }
246 
247 /**
248  * @brief usb control endpoint status interrupt handler.
249  * @return none
250  */
251 _attribute_ram_code_sec_noinline_ void entry_irq9(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq9(void)252 void entry_irq9(void)
253 {
254     plic_isr(usb_ctrl_ep_status_irq_handler, IRQ9_USB_CTRL_EP_STATUS);
255 }
256 
257 /**
258  * @brief usb control endpoint setinf interrupt handler.
259  * @return none
260  */
261 _attribute_ram_code_sec_noinline_ void entry_irq10(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq10(void)262 void entry_irq10(void)
263 {
264     plic_isr(usb_ctrl_ep_setinf_irq_handler, IRQ10_USB_CTRL_EP_SETINF);
265 }
266 
267 /**
268  * @brief usb endpoint interrupt handler.
269  * @return none
270  */
271 _attribute_ram_code_sec_noinline_ void entry_irq11(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq11(void)272 void entry_irq11(void)
273 {
274     plic_isr(usb_endpoint_irq_handler, IRQ11_USB_ENDPOINT);
275 }
276 
277 /**
278  * @brief rf dual mode interrupt handler.
279  * @return none
280  */
281 _attribute_ram_code_sec_noinline_ void entry_irq12(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq12(void)282 void entry_irq12(void)
283 {
284     plic_isr(rf_dm_irq_handler, IRQ12_ZB_DM);
285 }
286 
287 /**
288  * @brief rf ble interrupt handler.
289  * @return none
290  */
291 _attribute_ram_code_sec_noinline_ void entry_irq13(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq13(void)292 void entry_irq13(void)
293 {
294 #if (!RAMCODE_OPTIMIZE_UNUSED_IRQ_NOT_IMPLEMENT)
295     plic_isr(rf_ble_irq_handler, IRQ13_ZB_BLE);
296 #endif
297 }
298 
299 /**
300  * @brief rf BT  interrupt handler.
301  * @return none
302  */
303 _attribute_ram_code_sec_noinline_ void entry_irq14(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq14(void)304 void entry_irq14(void)
305 {
306 #if (!RAMCODE_OPTIMIZE_UNUSED_IRQ_NOT_IMPLEMENT)
307     plic_isr(rf_bt_irq_handler, IRQ14_ZB_BT);
308 #endif
309 }
310 
311 /**
312  * @brief telink rf interrupt handler.
313  * @return none
314  */
315 _attribute_ram_code_sec_noinline_ void entry_irq15(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq15(void)316 void entry_irq15(void)
317 {
318     plic_isr(rf_irq_handler, IRQ15_ZB_RT);
319 }
320 
321 /**
322  * @brief pwm interrupt handler.
323  * @return none
324  */
325 _attribute_ram_code_sec_noinline_ void entry_irq16(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq16(void)326 void entry_irq16(void)
327 {
328     plic_isr(pwm_irq_handler, IRQ16_PWM);
329 }
330 
331 /**
332  * @brief pke interrupt handler.
333  * @return none
334  */
335 _attribute_ram_code_sec_noinline_ void entry_irq17(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq17(void)336 void entry_irq17(void)
337 {
338 #if (!RAMCODE_OPTIMIZE_UNUSED_IRQ_NOT_IMPLEMENT)
339     plic_isr(pke_irq_handler, IRQ17_PKE);
340 #endif
341 }
342 
343 /**
344  * @brief uart1 interrupt handler.
345  * @return none
346  */
347 _attribute_ram_code_sec_noinline_ void entry_irq18(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq18(void)348 void entry_irq18(void)
349 {
350     plic_isr(uart1_irq_handler, IRQ18_UART1);
351 }
352 
353 /**
354  * @brief uart0 interrupt handler.
355  * @return none
356  */
357 _attribute_ram_code_sec_noinline_ void entry_irq19(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq19(void)358 void entry_irq19(void)
359 {
360     plic_isr(uart0_irq_handler, IRQ19_UART0);
361 }
362 
363 /**
364  * @brief audio interrupt handler.
365  * @return none
366  */
367 _attribute_ram_code_sec_noinline_ void entry_irq20(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq20(void)368 void entry_irq20(void)
369 {
370     plic_isr(audio_irq_handler, IRQ20_DFIFO);
371 }
372 
373 /**
374  * @brief i2c interrupt handler.
375  * @return none
376  */
377 _attribute_ram_code_sec_noinline_ void entry_irq21(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq21(void)378 void entry_irq21(void)
379 {
380     plic_isr(i2c_irq_handler, IRQ21_I2C);
381 }
382 
383 /**
384  * @brief hspi interrupt handler.
385  * @return none
386  */
387 _attribute_ram_code_sec_noinline_ void entry_irq22(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq22(void)388 void entry_irq22(void)
389 {
390     plic_isr(hspi_irq_handler, IRQ22_SPI_AHB);
391 }
392 
393 /**
394  * @brief pspi interrupt handler.
395  * @return none
396  */
397 _attribute_ram_code_sec_noinline_ void entry_irq23(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq23(void)398 void entry_irq23(void)
399 {
400     plic_isr(pspi_irq_handler, IRQ23_SPI_APB);
401 }
402 
403 /**
404  * @brief usb power down interrupt handler.
405  * @return none
406  */
407 _attribute_ram_code_sec_noinline_ void entry_irq24(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq24(void)408 void entry_irq24(void)
409 {
410     plic_isr(usb_pwdn_irq_handler, IRQ24_USB_PWDN);
411 }
412 
413 /**
414  * @brief gpio interrupt handler.
415  * @return none
416  */
417 _attribute_ram_code_sec_noinline_ void entry_irq25(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq25(void)418 void entry_irq25(void)
419 {
420     plic_isr(gpio_irq_handler, IRQ25_GPIO);
421 }
422 
423 /**
424  * @brief gpio_risc0 interrupt handler.
425  * @return none
426  */
427 _attribute_ram_code_sec_noinline_ void entry_irq26(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq26(void)428 void entry_irq26(void)
429 {
430     plic_isr(gpio_risc0_irq_handler, IRQ26_GPIO2RISC0);
431 }
432 
433 /**
434  * @brief gpio_risc1 interrupt handler.
435  * @return none
436  */
437 _attribute_ram_code_sec_noinline_ void entry_irq27(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq27(void)438 void entry_irq27(void)
439 {
440     plic_isr(gpio_risc1_irq_handler, IRQ27_GPIO2RISC1);
441 }
442 
443 /**
444  * @brief soft interrupt handler.
445  * @return none
446  */
447 _attribute_ram_code_sec_noinline_ void entry_irq28(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq28(void)448 void entry_irq28(void)
449 {
450 #if (!RAMCODE_OPTIMIZE_UNUSED_IRQ_NOT_IMPLEMENT)
451     plic_isr(soft_irq_handler, IRQ28_SOFT);
452 #endif
453 }
454 
455 /**
456  * @brief npe bus0 interrupt handler.
457  * @return none
458  */
459 
460 _attribute_ram_code_sec_noinline_ void entry_irq29(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq29(void)461 void entry_irq29(void)
462 {
463 }
464 /**
465  * @brief npe bus1 interrupt handler.
466  * @return none
467  */
468 _attribute_ram_code_sec_noinline_ void entry_irq30(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq30(void)469 void entry_irq30(void)
470 {
471 }
472 /**
473  * @brief npe bus2 interrupt handler.
474  * @return none
475  */
476 _attribute_ram_code_sec_noinline_ void entry_irq31(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq31(void)477 void entry_irq31(void)
478 {
479 }
480 /**
481  * @brief npe bus3 interrupt handler.
482  * @return none
483  */
484 _attribute_ram_code_sec_noinline_ void entry_irq32(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq32(void)485 void entry_irq32(void)
486 {
487 }
488 
489 /**
490  * @brief npe bus4 interrupt handler.
491  * @return none
492  */
493 _attribute_ram_code_sec_noinline_ void entry_irq33(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq33(void)494 void entry_irq33(void)
495 {
496 }
497 /**
498  * @brief usb 250us interrupt handler.
499  * @return none
500  */
501 _attribute_ram_code_sec_noinline_ void entry_irq34(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq34(void)502 void entry_irq34(void)
503 {
504 }
505 /**
506  * @brief usb reset interrupt handler.
507  * @return none
508  */
509 _attribute_ram_code_sec_noinline_ void entry_irq35(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq35(void)510 void entry_irq35(void)
511 {
512 }
513 /**
514  * @brief npe bus7 interrupt handler.
515  * @return none
516  */
517 _attribute_ram_code_sec_noinline_ void entry_irq36(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq36(void)518 void entry_irq36(void)
519 {
520 }
521 /**
522  * @brief npe bus8 interrupt handler.
523  * @return none
524  */
525 _attribute_ram_code_sec_noinline_ void entry_irq37(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq37(void)526 void entry_irq37(void)
527 {
528 }
529 
530 _attribute_ram_code_sec_noinline_ void entry_irq38(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq38(void)531 void entry_irq38(void)
532 {
533 }
534 _attribute_ram_code_sec_noinline_ void entry_irq39(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq39(void)535 void entry_irq39(void)
536 {
537 }
538 _attribute_ram_code_sec_noinline_ void entry_irq40(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq40(void)539 void entry_irq40(void)
540 {
541 }
542 _attribute_ram_code_sec_noinline_ void entry_irq41(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq41(void)543 void entry_irq41(void)
544 {
545 }
546 /**
547  * @brief npe bus13 interrupt handler.
548  * @return none
549  */
550 _attribute_ram_code_sec_noinline_ void entry_irq42(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq42(void)551 void entry_irq42(void)
552 {
553 }
554 /**
555  * @brief npe bus14 interrupt handler.
556  * @return none
557  */
558 _attribute_ram_code_sec_noinline_ void entry_irq43(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq43(void)559 void entry_irq43(void)
560 {
561 }
562 
563 /**
564  * @brief npe bus15 interrupt handler.
565  * @return none
566  */
567 _attribute_ram_code_sec_noinline_ void entry_irq44(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq44(void)568 void entry_irq44(void)
569 {
570 }
571 _attribute_ram_code_sec_noinline_ void entry_irq45(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq45(void)572 void entry_irq45(void)
573 {
574 }
575 /**
576  * @brief npe bus17 interrupt handler.
577  * @return none
578  */
579 _attribute_ram_code_sec_noinline_ void entry_irq46(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq46(void)580 void entry_irq46(void)
581 {
582 }
583 
584 _attribute_ram_code_sec_noinline_ void entry_irq47(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq47(void)585 void entry_irq47(void)
586 {
587 }
588 
589 _attribute_ram_code_sec_noinline_ void entry_irq48(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq48(void)590 void entry_irq48(void)
591 {
592 }
593 
594 _attribute_ram_code_sec_noinline_ void entry_irq49(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq49(void)595 void entry_irq49(void)
596 {
597 }
598 /**
599  * @brief npe bus21 interrupt handler.
600  * @return none
601  */
602 _attribute_ram_code_sec_noinline_ void entry_irq50(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq50(void)603 void entry_irq50(void)
604 {
605 }
606 /**
607  * @brief npe bus22 interrupt handler.
608  * @return none
609  */
610 _attribute_ram_code_sec_noinline_ void entry_irq51(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq51(void)611 void entry_irq51(void)
612 {
613 }
614 /**
615  * @brief npe bus23 interrupt handler.
616  * @return none
617  */
618 _attribute_ram_code_sec_noinline_ void entry_irq52(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq52(void)619 void entry_irq52(void)
620 {
621 }
622 /**
623  * @brief npe bus24 interrupt handler.
624  * @return none
625  */
626 _attribute_ram_code_sec_noinline_ void entry_irq53(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq53(void)627 void entry_irq53(void)
628 {
629 }
630 /**
631  * @brief npe bus25 interrupt handler.
632  * @return none
633  */
634 _attribute_ram_code_sec_noinline_ void entry_irq54(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq54(void)635 void entry_irq54(void)
636 {
637 }
638 /**
639  * @brief npe bus26 interrupt handler.
640  * @return none
641  */
642 _attribute_ram_code_sec_noinline_ void entry_irq55(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq55(void)643 void entry_irq55(void)
644 {
645 }
646 /**
647  * @brief npe bus27 interrupt handler.
648  * @return none
649  */
650 _attribute_ram_code_sec_noinline_ void entry_irq56(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq56(void)651 void entry_irq56(void)
652 {
653 }
654 /**
655  * @brief npe bus28 interrupt handler.
656  * @return none
657  */
658 _attribute_ram_code_sec_noinline_ void entry_irq57(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq57(void)659 void entry_irq57(void)
660 {
661 }
662 /**
663  * @brief npe bus29 interrupt handler.
664  * @return none
665  */
666 _attribute_ram_code_sec_noinline_ void entry_irq58(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq58(void)667 void entry_irq58(void)
668 {
669 }
670 /**
671  * @brief npe bus30 interrupt handler.
672  * @return none
673  */
674 _attribute_ram_code_sec_noinline_ void entry_irq59(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq59(void)675 void entry_irq59(void)
676 {
677 }
678 /**
679  * @brief npe bus31 interrupt handler.
680  * @return none
681  */
682 _attribute_ram_code_sec_noinline_ void entry_irq60(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq60(void)683 void entry_irq60(void)
684 {
685 }
686 /**
687  * @brief npe comb interrupt handler.
688  * @return none
689  */
690 _attribute_ram_code_sec_noinline_ void entry_irq61(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq61(void)691 void entry_irq61(void)
692 {
693 }
694 /**
695  * @brief pm interrupt handler.An interrupt will be generated after wake-up
696  * @return none
697  */
698 _attribute_ram_code_sec_noinline_ void entry_irq62(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq62(void)699 void entry_irq62(void)
700 {
701 }
702 /**
703  * @brief eoc interrupt handler.
704  * @return none
705  */
706 _attribute_ram_code_sec_noinline_ void entry_irq63(void) __attribute__((interrupt("machine"), aligned(4)));
entry_irq63(void)707 void entry_irq63(void)
708 {
709 
710 }
711 
712 // @} DRIVERS
713