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