18 #ifndef __CORE_FEATURE_ECLIC__ 
   19 #define __CORE_FEATURE_ECLIC__ 
   42 #include "core_feature_base.h" 
   44 #if defined(__ECLIC_PRESENT) && (__ECLIC_PRESENT == 1) 
   98 #if defined(__TEE_PRESENT) && (__TEE_PRESENT == 1) 
  101     __IM uint8_t RESERVED2;
 
  105     uint32_t RESERVED4[1021];
 
  106 #if defined(__TEE_PRESENT) && (__TEE_PRESENT == 1) 
  120 #define CLIC_CLICCFG_NLBIT_Pos                 1U                                        
  121 #define CLIC_CLICCFG_NLBIT_Msk                 (0xFUL << CLIC_CLICCFG_NLBIT_Pos)         
  123 #define CLIC_CLICINFO_CTLBIT_Pos               21U                                       
  124 #define CLIC_CLICINFO_CTLBIT_Msk               (0xFUL << CLIC_CLICINFO_CTLBIT_Pos)       
  126 #define CLIC_CLICINFO_VER_Pos                  13U                                       
  127 #define CLIC_CLICINFO_VER_Msk                  (0xFFUL << CLIC_CLICINFO_VER_Pos)         
  129 #define CLIC_CLICINFO_NUM_Pos                  0U                                        
  130 #define CLIC_CLICINFO_NUM_Msk                  (0x1FFFUL << CLIC_CLICINFO_NUM_Pos)       
  132 #define CLIC_INTIP_IP_Pos                      0U                                        
  133 #define CLIC_INTIP_IP_Msk                      (0x1UL << CLIC_INTIP_IP_Pos)              
  135 #define CLIC_INTIE_IE_Pos                      0U                                        
  136 #define CLIC_INTIE_IE_Msk                      (0x1UL << CLIC_INTIE_IE_Pos)              
  138 #if defined(__TEE_PRESENT) && (__TEE_PRESENT == 1) 
  139 #define CLIC_INTATTR_MODE_Pos                  6U                                        
  140 #define CLIC_INTATTR_MODE_Msk                  (0x3U << CLIC_INTATTR_MODE_Pos)           
  143 #define CLIC_INTATTR_TRIG_Pos                  1U                                        
  144 #define CLIC_INTATTR_TRIG_Msk                  (0x3UL << CLIC_INTATTR_TRIG_Pos)          
  146 #define CLIC_INTATTR_SHV_Pos                   0U                                        
  147 #define CLIC_INTATTR_SHV_Msk                   (0x1UL << CLIC_INTATTR_SHV_Pos)           
  149 #define ECLIC_MAX_NLBITS                       8U                                        
  150 #define ECLIC_MODE_MTVEC_Msk                   3U                                        
  152 #define ECLIC_NON_VECTOR_INTERRUPT             0x0                                       
  153 #define ECLIC_VECTOR_INTERRUPT                 0x1                                       
  156 typedef enum ECLIC_TRIGGER {
 
  163 #ifndef __ECLIC_BASEADDR 
  165 #error "__ECLIC_BASEADDR is not defined, please check!" 
  168 #ifndef __ECLIC_INTCTLBITS 
  170 #define __ECLIC_INTCTLBITS                  (__ECLIC_GetInfoCtlbits()) 
  174 #define ECLIC_BASE                          __ECLIC_BASEADDR                             
  175 #define ECLIC                               ((CLIC_Type *) ECLIC_BASE)                    
  201 #if defined(__ONLY_FOR_DOXYGEN_DOCUMENT_GENERATION__) 
  236 #ifdef NMSIS_ECLIC_VIRTUAL 
  237     #ifndef NMSIS_ECLIC_VIRTUAL_HEADER_FILE 
  238         #define NMSIS_ECLIC_VIRTUAL_HEADER_FILE "nmsis_eclic_virtual.h" 
  240     #include NMSIS_ECLIC_VIRTUAL_HEADER_FILE 
  242     #define ECLIC_SetCfgNlbits            __ECLIC_SetCfgNlbits 
  243     #define ECLIC_GetCfgNlbits            __ECLIC_GetCfgNlbits 
  244     #define ECLIC_GetInfoVer              __ECLIC_GetInfoVer 
  245     #define ECLIC_GetInfoCtlbits          __ECLIC_GetInfoCtlbits 
  246     #define ECLIC_GetInfoNum              __ECLIC_GetInfoNum 
  247     #define ECLIC_SetMth                  __ECLIC_SetMth 
  248     #define ECLIC_GetMth                  __ECLIC_GetMth 
  249     #define ECLIC_EnableIRQ               __ECLIC_EnableIRQ 
  250     #define ECLIC_GetEnableIRQ            __ECLIC_GetEnableIRQ 
  251     #define ECLIC_DisableIRQ              __ECLIC_DisableIRQ 
  252     #define ECLIC_SetPendingIRQ           __ECLIC_SetPendingIRQ 
  253     #define ECLIC_GetPendingIRQ           __ECLIC_GetPendingIRQ 
  254     #define ECLIC_ClearPendingIRQ         __ECLIC_ClearPendingIRQ 
  255     #define ECLIC_SetTrigIRQ              __ECLIC_SetTrigIRQ 
  256     #define ECLIC_GetTrigIRQ              __ECLIC_GetTrigIRQ 
  257     #define ECLIC_SetShvIRQ               __ECLIC_SetShvIRQ 
  258     #define ECLIC_GetShvIRQ               __ECLIC_GetShvIRQ 
  259     #define ECLIC_SetCtrlIRQ              __ECLIC_SetCtrlIRQ 
  260     #define ECLIC_GetCtrlIRQ              __ECLIC_GetCtrlIRQ 
  261     #define ECLIC_SetLevelIRQ             __ECLIC_SetLevelIRQ 
  262     #define ECLIC_GetLevelIRQ             __ECLIC_GetLevelIRQ 
  263     #define ECLIC_SetPriorityIRQ          __ECLIC_SetPriorityIRQ 
  264     #define ECLIC_GetPriorityIRQ          __ECLIC_GetPriorityIRQ 
  267 #if defined(__TEE_PRESENT) && (__TEE_PRESENT == 1) 
  268     #define ECLIC_SetModeIRQ              __ECLIC_SetModeIRQ 
  269     #define ECLIC_SetSth                  __ECLIC_SetSth 
  270     #define ECLIC_GetSth                  __ECLIC_GetSth 
  271     #define ECLIC_SetTrigIRQ_S            __ECLIC_SetTrigIRQ_S 
  272     #define ECLIC_GetTrigIRQ_S            __ECLIC_GetTrigIRQ_S 
  273     #define ECLIC_SetShvIRQ_S             __ECLIC_SetShvIRQ_S 
  274     #define ECLIC_GetShvIRQ_S             __ECLIC_GetShvIRQ_S 
  275     #define ECLIC_SetCtrlIRQ_S            __ECLIC_SetCtrlIRQ_S 
  276     #define ECLIC_GetCtrlIRQ_S            __ECLIC_GetCtrlIRQ_S 
  277     #define ECLIC_SetLevelIRQ_S           __ECLIC_SetLevelIRQ_S 
  278     #define ECLIC_GetLevelIRQ_S           __ECLIC_GetLevelIRQ_S 
  279     #define ECLIC_SetPriorityIRQ_S        __ECLIC_SetPriorityIRQ_S 
  280     #define ECLIC_GetPriorityIRQ_S        __ECLIC_GetPriorityIRQ_S 
  281     #define ECLIC_EnableIRQ_S             __ECLIC_EnableIRQ_S 
  282     #define ECLIC_GetEnableIRQ_S          __ECLIC_GetEnableIRQ_S 
  283     #define ECLIC_DisableIRQ_S            __ECLIC_DisableIRQ_S 
  288 #ifdef NMSIS_VECTAB_VIRTUAL 
  289     #ifndef NMSIS_VECTAB_VIRTUAL_HEADER_FILE 
  290         #define NMSIS_VECTAB_VIRTUAL_HEADER_FILE "nmsis_vectab_virtual.h" 
  292     #include NMSIS_VECTAB_VIRTUAL_HEADER_FILE 
  294     #define ECLIC_SetVector              __ECLIC_SetVector 
  295     #define ECLIC_GetVector              __ECLIC_GetVector 
  297 #if defined(__TEE_PRESENT) && (__TEE_PRESENT == 1) 
  298     #define ECLIC_SetVector_S            __ECLIC_SetVector_S 
  299     #define ECLIC_GetVector_S            __ECLIC_GetVector_S 
  315     uint8_t temp = 
ECLIC->CFG;
 
  531     uint8_t temp = 
ECLIC->CTRL[IRQn].INTATTR;
 
  572     uint8_t temp = 
ECLIC->CTRL[IRQn].INTATTR;
 
  609     ECLIC->CTRL[IRQn].INTCTRL = intctrl;
 
  625     return (
ECLIC->CTRL[IRQn].INTCTRL);
 
  646     uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
 
  652     if (nlbits > intctlbits) {
 
  655     uint8_t maxlvl = ((1UL << nlbits) - 1);
 
  656     if (lvl_abs > maxlvl) {
 
  661     cur_ctrl = cur_ctrl << nlbits;
 
  662     cur_ctrl = cur_ctrl >> nlbits;
 
  680     uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
 
  686     if (nlbits > intctlbits) {
 
  711     uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
 
  712     if (nlbits < intctlbits) {
 
  713         uint8_t maxpri = ((1UL << (intctlbits - nlbits)) - 1);
 
  718         uint8_t mask = ((uint8_t)(-1)) >> intctlbits;
 
  741     uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
 
  742     if (nlbits < intctlbits) {
 
  744         uint8_t pri = cur_ctrl << nlbits;
 
  771     volatile unsigned long vec_base;
 
  773     vec_base += ((
unsigned long)IRQn) * 
sizeof(
unsigned long);
 
  774     (* (
unsigned long *) vec_base) = vector;
 
  775 #if (defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1)) 
  776 #if (defined(__CCM_PRESENT) && (__CCM_PRESENT == 1)) 
  780 #if (defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1)) 
  781 #if (defined(__CCM_PRESENT) && (__CCM_PRESENT == 1)) 
  803 #if __RISCV_XLEN == 32 
  805 #elif __RISCV_XLEN == 64 
  812 #if defined(__TEE_PRESENT) && (__TEE_PRESENT == 1) 
  887     uint8_t temp = 
ECLIC->SCTRL[IRQn].INTATTR;
 
  929     uint8_t temp = 
ECLIC->SCTRL[IRQn].INTATTR;
 
  966     ECLIC->SCTRL[IRQn].INTCTRL = intctrl;
 
  982     return (
ECLIC->SCTRL[IRQn].INTCTRL);
 
 1003     uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
 
 1009     if (nlbits > intctlbits) {
 
 1010         nlbits = intctlbits;
 
 1012     uint8_t maxlvl = ((1UL << nlbits) - 1);
 
 1013     if (lvl_abs > maxlvl) {
 
 1018     cur_ctrl = cur_ctrl << nlbits;
 
 1019     cur_ctrl = cur_ctrl >> nlbits;
 
 1038     uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
 
 1044     if (nlbits > intctlbits) {
 
 1045         nlbits = intctlbits;
 
 1069     uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
 
 1070     if (nlbits < intctlbits) {
 
 1071         uint8_t maxpri = ((1UL << (intctlbits - nlbits)) - 1);
 
 1076         uint8_t mask = ((uint8_t)(-1)) >> intctlbits;
 
 1099     uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
 
 1100     if (nlbits < intctlbits) {
 
 1102         uint8_t pri = cur_ctrl << nlbits;
 
 1103         pri = pri >> nlbits;
 
 1178     volatile unsigned long vec_base;
 
 1180     vec_base += ((
unsigned long)IRQn) * 
sizeof(
unsigned long);
 
 1181     (* (
unsigned long *) vec_base) = vector;
 
 1182 #if (defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1)) 
 1183 #if (defined(__CCM_PRESENT) && (__CCM_PRESENT == 1)) 
 1187 #if (defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1)) 
 1188 #if (defined(__CCM_PRESENT) && (__CCM_PRESENT == 1)) 
 1210 #if __RISCV_XLEN == 32 
 1212 #elif __RISCV_XLEN == 64 
 1344 #define SAVE_IRQ_CSR_CONTEXT()                                              \ 
 1345         rv_csr_t __mcause = __RV_CSR_READ(CSR_MCAUSE);                      \ 
 1346         rv_csr_t __mepc = __RV_CSR_READ(CSR_MEPC);                          \ 
 1347         rv_csr_t __msubm = __RV_CSR_READ(CSR_MSUBM);                        \ 
 1351 #define SAVE_IRQ_CSR_CONTEXT_S()                                            \ 
 1352         rv_csr_t __scause = __RV_CSR_READ(CSR_SCAUSE);                      \ 
 1353         rv_csr_t __sepc = __RV_CSR_READ(CSR_SEPC);                          \ 
 1366 #define RESTORE_IRQ_CSR_CONTEXT()                                           \ 
 1368         __RV_CSR_WRITE(CSR_MSUBM, __msubm);                                 \ 
 1369         __RV_CSR_WRITE(CSR_MEPC, __mepc);                                   \ 
 1370         __RV_CSR_WRITE(CSR_MCAUSE, __mcause); 
 1373 #define RESTORE_IRQ_CSR_CONTEXT_S()                                         \ 
 1374         __disable_irq_s();                                                  \ 
 1375         __RV_CSR_WRITE(CSR_SEPC, __sepc);                                   \ 
 1376         __RV_CSR_WRITE(CSR_SCAUSE, __scause);  
__STATIC_FORCEINLINE void __FENCE_I(void)
Fence.i Instruction.
#define __RV_CSR_READ(csr)
CSR operation Macro for csrr instruction.
#define __RV_CSR_WRITE(csr, val)
CSR operation Macro for csrw instruction.
#define __STATIC_FORCEINLINE
Define a static function that should be always inlined by the compiler.
#define __STATIC_INLINE
Define a static function that may be inlined by the compiler.
__STATIC_INLINE void MFlushDCacheLine(unsigned long addr)
Flush one D-Cache line specified by address in M-Mode.
__STATIC_INLINE void SFlushDCacheLine(unsigned long addr)
Flush one D-Cache line specified by address in S-Mode.
#define CLIC_CLICCFG_NLBIT_Pos
CLIC CLICCFG: NLBIT Position.
#define CLIC_CLICINFO_CTLBIT_Msk
CLIC INTINFO: CLICINTCTLBITS Mask.
#define CLIC_CLICINFO_VER_Msk
CLIC CLICINFO: VERSION Mask.
#define CLIC_INTATTR_SHV_Msk
CLIC INTATTR: SHV Mask.
#define ECLIC_MODE_MTVEC_Msk
ECLIC Mode mask for MTVT CSR Register.
#define CLIC_CLICINFO_VER_Pos
CLIC CLICINFO: VERSION Position.
#define ECLIC_MAX_NLBITS
Max nlbit of the CLICINTCTLBITS.
ECLIC_TRIGGER_Type
ECLIC Trigger Enum for different Trigger Type.
#define CLIC_CLICINFO_NUM_Pos
CLIC CLICINFO: NUM Position.
#define CLIC_INTATTR_TRIG_Msk
CLIC INTATTR: TRIG Mask.
#define CLIC_INTATTR_SHV_Pos
CLIC INTATTR: SHV Position.
#define CLIC_INTATTR_MODE_Msk
CLIC INTATTA: Mode Mask.
#define CLIC_CLICCFG_NLBIT_Msk
CLIC CLICCFG: NLBIT Mask.
#define CLIC_INTIE_IE_Msk
CLIC INTIE: IE Mask.
#define CLIC_CLICINFO_NUM_Msk
CLIC CLICINFO: NUM Mask.
#define CLIC_INTATTR_MODE_Pos
CLIC INTATTA: Mode Position.
#define ECLIC
CLIC configuration struct.
#define CLIC_INTATTR_TRIG_Pos
CLIC INTATTR: TRIG Position.
#define CLIC_CLICINFO_CTLBIT_Pos
CLIC INTINFO: CLICINTCTLBITS Position.
#define CLIC_INTIP_IP_Msk
CLIC INTIP: IP Mask.
@ ECLIC_POSTIVE_EDGE_TRIGGER
Postive/Rising Edge Triggered, trig[0] = 1, trig[1] = 0.
@ ECLIC_LEVEL_TRIGGER
Level Triggerred, trig[0] = 0.
@ ECLIC_MAX_TRIGGER
MAX Supported Trigger Mode.
@ ECLIC_NEGTIVE_EDGE_TRIGGER
Negtive/Falling Edge Triggered, trig[0] = 1, trig[1] = 1.
__STATIC_INLINE void SInvalICacheLine(unsigned long addr)
Invalidate one I-Cache line specified by address in S-Mode.
__STATIC_INLINE void MInvalICacheLine(unsigned long addr)
Invalidate one I-Cache line specified by address in M-Mode.
__STATIC_FORCEINLINE rv_csr_t __get_exc_entry(void)
Get Exception entry address.
__STATIC_FORCEINLINE uint32_t __ECLIC_GetInfoVer(void)
Get the ECLIC version number.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetCtrlIRQ(IRQn_Type IRQn)
Get ECLIC Interrupt Input Control Register value for a specific interrupt.
__STATIC_INLINE void __ECLIC_SetVector_S(IRQn_Type IRQn, rv_csr_t vector)
Set Interrupt Vector of a specific interrupt in supervisor mode.
__STATIC_INLINE uint8_t __ECLIC_GetPriorityIRQ_S(IRQn_Type IRQn)
Get ECLIC Interrupt priority of a specific interrupt in supervisor mode.
__STATIC_FORCEINLINE void __ECLIC_SetTrigIRQ_S(IRQn_Type IRQn, uint32_t trig)
Set trigger mode and polarity for a specific interrupt in supervisor mode.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetSth(void)
Get supervisor-mode Interrupt Level Threshold in supervisor mode.
__STATIC_FORCEINLINE uint32_t __ECLIC_GetCfgNlbits(void)
Get nlbits value.
__STATIC_FORCEINLINE void __ECLIC_SetShvIRQ(IRQn_Type IRQn, uint32_t shv)
Set interrupt working mode for a specific interrupt.
__STATIC_FORCEINLINE void __ECLIC_SetCtrlIRQ_S(IRQn_Type IRQn, uint8_t intctrl)
Modify ECLIC Interrupt Input Control Register for a specific interrupt in supervisor mode.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetShvIRQ_S(IRQn_Type IRQn)
Get interrupt working mode for a specific interrupt in supervisor mode.
__STATIC_INLINE void __ECLIC_SetVector(IRQn_Type IRQn, rv_csr_t vector)
Set Interrupt Vector of a specific interrupt.
__STATIC_FORCEINLINE uint32_t __ECLIC_GetInfoNum(void)
Get number of maximum interrupt inputs supported.
__STATIC_FORCEINLINE void __ECLIC_SetCtrlIRQ(IRQn_Type IRQn, uint8_t intctrl)
Modify ECLIC Interrupt Input Control Register for a specific interrupt.
__STATIC_INLINE void __ECLIC_SetLevelIRQ(IRQn_Type IRQn, uint8_t lvl_abs)
Set ECLIC Interrupt level of a specific interrupt.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetMth(void)
Get Machine Mode Interrupt Level Threshold.
__STATIC_FORCEINLINE void __ECLIC_SetCfgNlbits(uint32_t nlbits)
Set nlbits value.
__STATIC_FORCEINLINE void __ECLIC_SetSth(uint8_t sth)
Set supervisor-mode Interrupt Level Threshold in supervisor mode.
__STATIC_INLINE void __ECLIC_SetLevelIRQ_S(IRQn_Type IRQn, uint8_t lvl_abs)
Set ECLIC Interrupt level of a specific interrupt in supervisor mode.
__STATIC_INLINE rv_csr_t __get_nonvec_entry(void)
Get Non-vector interrupt entry address.
__STATIC_INLINE void __ECLIC_SetPriorityIRQ_S(IRQn_Type IRQn, uint8_t pri)
Set ECLIC Interrupt priority of a specific interrupt in supervisor mode.
__STATIC_INLINE uint8_t __ECLIC_GetLevelIRQ_S(IRQn_Type IRQn)
Get ECLIC Interrupt level of a specific interrupt.
__STATIC_FORCEINLINE uint32_t __ECLIC_GetInfoCtlbits(void)
Get CLICINTCTLBITS.
__STATIC_FORCEINLINE void __ECLIC_ClearPendingIRQ(IRQn_Type IRQn)
Clear a specific interrupt from pending.
__STATIC_FORCEINLINE rv_csr_t __ECLIC_GetVector(IRQn_Type IRQn)
Get Interrupt Vector of a specific interrupt.
IRQn_Type
Definition of IRQn numbers.
__STATIC_FORCEINLINE void __ECLIC_SetModeIRQ(IRQn_Type IRQn, uint32_t mode)
Set privilege mode of a specific interrupt.
__STATIC_INLINE uint8_t __ECLIC_GetPriorityIRQ(IRQn_Type IRQn)
Get ECLIC Interrupt priority of a specific interrupt.
__STATIC_FORCEINLINE void __ECLIC_EnableIRQ_S(IRQn_Type IRQn)
Enable a specific interrupt in supervisor mode.
__STATIC_FORCEINLINE int32_t __ECLIC_GetPendingIRQ(IRQn_Type IRQn)
Get the pending specific interrupt.
__STATIC_FORCEINLINE void __ECLIC_DisableIRQ(IRQn_Type IRQn)
Disable a specific interrupt.
__STATIC_INLINE void __ECLIC_SetPriorityIRQ(IRQn_Type IRQn, uint8_t pri)
Get ECLIC Interrupt priority of a specific interrupt.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetEnableIRQ_S(IRQn_Type IRQn)
Get a specific interrupt enable status in supervisor mode.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetTrigIRQ_S(IRQn_Type IRQn)
Get trigger mode and polarity for a specific interrupt in supervisor mode.
__STATIC_FORCEINLINE uint32_t __ECLIC_GetTrigIRQ(IRQn_Type IRQn)
Get trigger mode and polarity for a specific interrupt.
__STATIC_INLINE void __set_nonvec_entry(rv_csr_t addr)
Set Non-vector interrupt entry address.
__STATIC_FORCEINLINE rv_csr_t __get_nmi_entry(void)
Get NMI interrupt entry from 'CSR_MNVEC'.
__STATIC_FORCEINLINE void __ECLIC_DisableIRQ_S(IRQn_Type IRQn)
Disable a specific interrupt in supervisor mode.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetCtrlIRQ_S(IRQn_Type IRQn)
Get ECLIC Interrupt Input Control Register value for a specific interrupt in supervisor mode.
__STATIC_FORCEINLINE uint32_t __ECLIC_GetShvIRQ(IRQn_Type IRQn)
Get interrupt working mode for a specific interrupt.
__STATIC_FORCEINLINE uint32_t __ECLIC_GetEnableIRQ(IRQn_Type IRQn)
Get a specific interrupt enable status.
__STATIC_INLINE uint8_t __ECLIC_GetLevelIRQ(IRQn_Type IRQn)
Get ECLIC Interrupt level of a specific interrupt.
__STATIC_FORCEINLINE void __ECLIC_SetPendingIRQ(IRQn_Type IRQn)
Set a specific interrupt to pending.
__STATIC_FORCEINLINE void __ECLIC_EnableIRQ(IRQn_Type IRQn)
Enable a specific interrupt.
__STATIC_FORCEINLINE void __ECLIC_SetShvIRQ_S(IRQn_Type IRQn, uint32_t shv)
Set interrupt working mode for a specific interrupt in supervisor mode.
__STATIC_FORCEINLINE void __set_exc_entry(rv_csr_t addr)
Set Exception entry address.
__STATIC_FORCEINLINE void __ECLIC_SetTrigIRQ(IRQn_Type IRQn, uint32_t trig)
Set trigger mode and polarity for a specific interrupt.
__STATIC_FORCEINLINE void __ECLIC_SetMth(uint8_t mth)
Set Machine Mode Interrupt Level Threshold.
__STATIC_FORCEINLINE rv_csr_t __ECLIC_GetVector_S(IRQn_Type IRQn)
Get Interrupt Vector of a specific interrupt in supervisor mode.
@ SysTimerSW_IRQn
System Timer SW interrupt.
@ Reserved10_IRQn
Internal reserved.
@ Reserved2_IRQn
Internal reserved.
@ Reserved15_IRQn
Internal reserved.
@ Reserved14_IRQn
Internal reserved.
@ SysTimer_IRQn
System Timer Interrupt.
@ Reserved0_IRQn
Internal reserved.
@ Reserved16_IRQn
Internal reserved.
@ Reserved9_IRQn
Internal reserved.
@ Reserved11_IRQn
Internal reserved.
@ Reserved6_IRQn
Internal reserved.
@ Reserved12_IRQn
Internal reserved.
@ Reserved13_IRQn
Internal reserved.
@ Reserved5_IRQn
Internal reserved.
@ Reserved4_IRQn
Internal reserved.
@ Reserved8_IRQn
Internal reserved.
@ FirstDeviceSpecificInterrupt_IRQn
First Device Specific Interrupt.
@ Reserved1_IRQn
Internal reserved.
@ SOC_INT_MAX
Number of total interrupts.
@ Reserved7_IRQn
Internal reserved.
@ Reserved3_IRQn
Internal reserved.
#define __IM
Defines 'read only' structure member permissions.
#define __IOM
Defines 'read/write' structure member permissions.
unsigned long rv_csr_t
Type of Control and Status Register(CSR), depends on the XLEN defined in RISC-V.
Access to the machine mode register structure of INTIP, INTIE, INTATTR, INTCTL.
__IOM uint8_t INTIP
Offset: 0x000 (R/W) Interrupt set pending register.
__IOM uint8_t INTIE
Offset: 0x001 (R/W) Interrupt set enable register.
__IOM uint8_t INTATTR
Offset: 0x002 (R/W) Interrupt set attributes register.
__IOM uint8_t INTCTRL
Offset: 0x003 (R/W) Interrupt configure register.
Access to the structure of ECLIC Memory Map, which is compatible with TEE.
__IOM uint8_t SSTH
Offset: 0x2009 (R) CLIC supervisor mode threshold register, which is a mirror to mintthresh....
__IM uint32_t INFO
Offset: 0x004 (R/ ) CLIC information register.
__IOM uint8_t CFG
Offset: 0x000 (R/W) CLIC configuration register.
__IOM uint8_t STH
Offset: 0x009 (R/W ) CLIC supervisor mode interrupt-level threshold.
__IOM uint8_t MTH
Offset: 0x00B(R/W) CLIC machine mode interrupt-level threshold.
Union type to access CLICFG configure register.
__IM uint8_t nmbits
bit: 5..6 ties to 1 if supervisor-level interrupt supported, or else it's reserved
uint8_t w
Type used for byte access.
__IOM uint8_t nlbits
bit: 1..4 specified the bit-width of level and priority in the register clicintctl[i]
Union type to access CLICINFO information register.
__IM uint32_t _reserved0
bit: 25..31 Reserved
__IM uint32_t intctlbits
bit: 21..24 specifies how many hardware bits are actually implemented in the clicintctl registers
__IM uint32_t w
Type used for word access.
__IM uint32_t version
bit: 13..20 20:17 for architecture version,16:13 for implementation version
__IM uint32_t numint
bit: 0..12 number of maximum interrupt inputs supported