1 2 /* 3 * Copyright (C) 2017-2019 Alibaba Group Holding Limited 4 * 5 * SPDX-License-Identifier: Apache-2.0 6 * 7 * Change Logs: 8 * Date Author Notes 9 * 2020-08-20 zx.chen CSI Source File for IRQ Driver 10 */ 11 12 #include <stdint.h> 13 #include <soc.h> 14 #include <csi_core.h> 15 #include <csi_config.h> 16 17 extern void Default_Handler(void); 18 extern void (*g_irqvector[])(void); 19 extern void (*g_nmivector)(void); 20 21 /** 22 \brief enable irq. 23 \param[in] irq_num Number of IRQ. 24 \return None. 25 */ drv_irq_enable(uint32_t irq_num)26void drv_irq_enable(uint32_t irq_num) 27 { 28 if (NMI_EXPn != irq_num) 29 { 30 #ifdef CONFIG_SYSTEM_SECURE 31 csi_vic_enable_sirq(irq_num); 32 #else 33 csi_vic_enable_irq(irq_num); 34 #endif 35 } 36 } 37 38 /** 39 \brief disable irq. 40 \param[in] irq_num Number of IRQ. 41 \return None. 42 */ drv_irq_disable(uint32_t irq_num)43void drv_irq_disable(uint32_t irq_num) 44 { 45 if (NMI_EXPn != irq_num) 46 { 47 #ifdef CONFIG_SYSTEM_SECURE 48 csi_vic_disable_sirq(irq_num); 49 #else 50 csi_vic_disable_irq(irq_num); 51 #endif 52 } 53 } 54 55 /** 56 \brief register irq handler. 57 \param[in] irq_num Number of IRQ. 58 \param[in] irq_handler IRQ Handler. 59 \return None. 60 */ drv_irq_register(uint32_t irq_num,void * irq_handler)61void drv_irq_register(uint32_t irq_num, void *irq_handler) 62 { 63 if (NMI_EXPn != irq_num) 64 { 65 g_irqvector[irq_num] = irq_handler; 66 } 67 else 68 { 69 g_nmivector = irq_handler; 70 } 71 } 72 73 /** 74 \brief unregister irq handler. 75 \param[in] irq_num Number of IRQ. 76 \return None. 77 */ drv_irq_unregister(uint32_t irq_num)78void drv_irq_unregister(uint32_t irq_num) 79 { 80 if (NMI_EXPn != irq_num) 81 { 82 g_irqvector[irq_num] = (void *)Default_Handler; 83 } 84 else 85 { 86 g_nmivector = (void *)Default_Handler; 87 } 88 } 89