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.
__STATIC_FORCEINLINE void SFlushDCacheLine(unsigned long addr)
Flush one D-Cache line specified by address in S-Mode.
__STATIC_FORCEINLINE void MFlushDCacheLine(unsigned long addr)
Flush one D-Cache line specified by address in M-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_FORCEINLINE void SInvalICacheLine(unsigned long addr)
Invalidate one I-Cache line specified by address in S-Mode.
__STATIC_FORCEINLINE 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_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 uint8_t __ECLIC_GetLevelIRQ(IRQn_Type IRQn)
Get ECLIC Interrupt level of a specific interrupt.
__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_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_FORCEINLINE void __ECLIC_SetVector(IRQn_Type IRQn, rv_csr_t vector)
Set Interrupt Vector of a specific interrupt.
__STATIC_FORCEINLINE rv_csr_t __get_nonvec_entry(void)
Get Non-vector interrupt entry address.
__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_FORCEINLINE uint8_t __ECLIC_GetPriorityIRQ(IRQn_Type IRQn)
Get ECLIC Interrupt priority of a specific interrupt.
__STATIC_FORCEINLINE uint32_t __ECLIC_GetInfoCtlbits(void)
Get CLICINTCTLBITS.
__STATIC_FORCEINLINE void __ECLIC_SetPriorityIRQ_S(IRQn_Type IRQn, uint8_t pri)
Set ECLIC Interrupt priority of a specific interrupt in supervisor mode.
__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_SetLevelIRQ_S(IRQn_Type IRQn, uint8_t lvl_abs)
Set ECLIC Interrupt level of a specific interrupt in supervisor mode.
__STATIC_FORCEINLINE void __ECLIC_SetModeIRQ(IRQn_Type IRQn, uint32_t mode)
Set privilege mode 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_FORCEINLINE 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_FORCEINLINE void __ECLIC_SetVector_S(IRQn_Type IRQn, rv_csr_t vector)
Set Interrupt Vector of a specific interrupt in supervisor mode.
__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_FORCEINLINE void __ECLIC_SetPendingIRQ(IRQn_Type IRQn)
Set a specific interrupt to pending.
__STATIC_FORCEINLINE void __set_nonvec_entry(rv_csr_t addr)
Set Non-vector interrupt entry address.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetLevelIRQ_S(IRQn_Type IRQn)
Get ECLIC Interrupt level of a specific interrupt.
__STATIC_FORCEINLINE void __ECLIC_EnableIRQ(IRQn_Type IRQn)
Enable a specific interrupt.
__STATIC_FORCEINLINE void __ECLIC_SetLevelIRQ(IRQn_Type IRQn, uint8_t lvl_abs)
Set ECLIC Interrupt level of 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.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetPriorityIRQ_S(IRQn_Type IRQn)
Get ECLIC Interrupt priority 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