|
NMSIS-Core
Version 1.3.1
NMSIS-Core support for Nuclei processor-based devices
|
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 {
161 } ECLIC_TRIGGER_Type;
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
640 uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
646 if (nlbits > intctlbits) {
649 uint8_t maxlvl = ((1 << nlbits) - 1);
650 if (lvl_abs > maxlvl) {
655 cur_ctrl = cur_ctrl << nlbits;
656 cur_ctrl = cur_ctrl >> nlbits;
674 uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
680 if (nlbits > intctlbits) {
705 uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
706 if (nlbits < intctlbits) {
707 uint8_t maxpri = ((1 << (intctlbits - nlbits)) - 1);
712 uint8_t mask = ((uint8_t)(-1)) >> intctlbits;
735 uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
736 if (nlbits < intctlbits) {
738 uint8_t pri = cur_ctrl << nlbits;
765 volatile unsigned long vec_base;
767 vec_base += ((
unsigned long)
IRQn) *
sizeof(
unsigned long);
768 (* (
unsigned long *) vec_base) = vector;
769 #if (defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1))
770 #if (defined(__CCM_PRESENT) && (__CCM_PRESENT == 1))
774 #if (defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1))
775 #if (defined(__CCM_PRESENT) && (__CCM_PRESENT == 1))
797 #if __RISCV_XLEN == 32
799 #elif __RISCV_XLEN == 64
801 #else // TODO Need cover for XLEN=128 case in future
806 #if defined(__TEE_PRESENT) && (__TEE_PRESENT == 1)
993 uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
999 if (nlbits > intctlbits) {
1000 nlbits = intctlbits;
1002 uint8_t maxlvl = ((1 << nlbits) - 1);
1003 if (lvl_abs > maxlvl) {
1008 cur_ctrl = cur_ctrl << nlbits;
1009 cur_ctrl = cur_ctrl >> nlbits;
1028 uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
1034 if (nlbits > intctlbits) {
1035 nlbits = intctlbits;
1059 uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
1060 if (nlbits < intctlbits) {
1061 uint8_t maxpri = ((1 << (intctlbits - nlbits)) - 1);
1066 uint8_t mask = ((uint8_t)(-1)) >> intctlbits;
1089 uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;
1090 if (nlbits < intctlbits) {
1092 uint8_t pri = cur_ctrl << nlbits;
1093 pri = pri >> nlbits;
1168 volatile unsigned long vec_base;
1170 vec_base += ((
unsigned long)
IRQn) *
sizeof(
unsigned long);
1171 (* (
unsigned long *) vec_base) = vector;
1172 #if (defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1))
1173 #if (defined(__CCM_PRESENT) && (__CCM_PRESENT == 1))
1177 #if (defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1))
1178 #if (defined(__CCM_PRESENT) && (__CCM_PRESENT == 1))
1200 #if __RISCV_XLEN == 32
1202 #elif __RISCV_XLEN == 64
1204 #else // TODO Need cover for XLEN=128 case in future
1334 #define SAVE_IRQ_CSR_CONTEXT() \
1335 rv_csr_t __mcause = __RV_CSR_READ(CSR_MCAUSE); \
1336 rv_csr_t __mepc = __RV_CSR_READ(CSR_MEPC); \
1337 rv_csr_t __msubm = __RV_CSR_READ(CSR_MSUBM); \
1341 #define SAVE_IRQ_CSR_CONTEXT_S() \
1342 rv_csr_t __scause = __RV_CSR_READ(CSR_SCAUSE); \
1343 rv_csr_t __sepc = __RV_CSR_READ(CSR_SEPC); \
1356 #define RESTORE_IRQ_CSR_CONTEXT() \
1358 __RV_CSR_WRITE(CSR_MSUBM, __msubm); \
1359 __RV_CSR_WRITE(CSR_MEPC, __mepc); \
1360 __RV_CSR_WRITE(CSR_MCAUSE, __mcause);
1363 #define RESTORE_IRQ_CSR_CONTEXT_S() \
1364 __disable_irq_s(); \
1365 __RV_CSR_WRITE(CSR_SEPC, __sepc); \
1366 __RV_CSR_WRITE(CSR_SCAUSE, __scause);
#define __IM
Defines 'read only' structure member permissions.
__STATIC_FORCEINLINE rv_csr_t __ECLIC_GetVector(IRQn_Type IRQn)
Get Interrupt Vector of a specific interrupt.
__STATIC_FORCEINLINE void __ECLIC_EnableIRQ_S(IRQn_Type IRQn)
Enable a specific interrupt in supervisor mode.
@ SysTimer_IRQn
System Timer Interrupt.
@ Reserved5_IRQn
Internal reserved.
__IM uint32_t INFO
Offset: 0x004 (R/ ) CLIC information register.
#define CLIC_INTIE_IE_Msk
CLIC INTIE: IE Mask.
__STATIC_FORCEINLINE void __ECLIC_SetShvIRQ(IRQn_Type IRQn, uint32_t shv)
Set interrupt working mode for a specific interrupt.
@ Reserved3_IRQn
Internal reserved.
#define CLIC_INTATTR_TRIG_Pos
CLIC INTATTR: TRIG Position.
uint8_t w
Type used for byte access.
@ Reserved14_IRQn
Internal reserved.
__STATIC_FORCEINLINE void __ECLIC_DisableIRQ_S(IRQn_Type IRQn)
Disable a specific interrupt in supervisor mode.
__IM uint32_t numint
bit: 0..12 number of maximum interrupt inputs supported
#define CLIC_INTATTR_MODE_Msk
CLIC INTATTA: Mode Mask.
__STATIC_FORCEINLINE uint32_t __ECLIC_GetTrigIRQ(IRQn_Type IRQn)
Get trigger mode and polarity for a specific interrupt.
@ ECLIC_NEGTIVE_EDGE_TRIGGER
Negtive/Falling Edge Triggered, trig[0] = 1, trig[1] = 1.
@ Reserved7_IRQn
Internal reserved.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetShvIRQ_S(IRQn_Type IRQn)
Get interrupt working mode for a specific interrupt in supervisor mode.
#define CLIC_INTATTR_SHV_Pos
CLIC INTATTR: SHV Position.
__STATIC_FORCEINLINE void __set_exc_entry(rv_csr_t addr)
Set Exception entry address.
__STATIC_FORCEINLINE 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_SetShvIRQ_S(IRQn_Type IRQn, uint32_t shv)
Set interrupt working mode for a specific interrupt in supervisor mode.
@ Reserved6_IRQn
Internal reserved.
@ Reserved0_IRQn
Internal reserved.
__IOM uint8_t STH
Offset: 0x009 (R/W ) CLIC supervisor mode interrupt-level threshold.
__IOM uint8_t INTIE
Offset: 0x001 (R/W) Interrupt set enable register.
__STATIC_FORCEINLINE void __ECLIC_SetPriorityIRQ(IRQn_Type IRQn, uint8_t pri)
Get ECLIC Interrupt priority of a specific interrupt.
__IOM uint8_t nlbits
bit: 1..4 specified the bit-width of level and priority in the register clicintctl[i]
#define CLIC_CLICCFG_NLBIT_Msk
CLIC CLICCFG: NLBIT Mask.
__STATIC_FORCEINLINE void SFlushDCacheLine(unsigned long addr)
Flush one D-Cache line specified by address in S-Mode.
Union type to access CLICFG configure register.
@ Reserved8_IRQn
Internal reserved.
#define __IOM
Defines 'read/write' structure member permissions.
__IOM uint8_t INTATTR
Offset: 0x002 (R/W) Interrupt set attributes register.
__IM uint32_t _reserved0
bit: 25..31 Reserved
@ ECLIC_POSTIVE_EDGE_TRIGGER
Postive/Rising Edge Triggered, trig[0] = 1, trig[1] = 0.
__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_GetInfoVer(void)
Get the ECLIC version number.
#define ECLIC_MODE_MTVEC_Msk
ECLIC Mode mask for MTVT CSR Register.
#define CLIC_INTATTR_MODE_Pos
CLIC INTATTA: Mode Position.
IRQn
Definition of IRQn numbers.
__STATIC_FORCEINLINE void MFlushDCacheLine(unsigned long addr)
Flush one D-Cache line specified by address in M-Mode.
__STATIC_FORCEINLINE void __ECLIC_SetMth(uint8_t mth)
Set Machine Mode Interrupt Level Threshold.
#define ECLIC
CLIC configuration struct.
#define __RV_CSR_WRITE(csr, val)
CSR operation Macro for csrw instruction.
Access to the structure of ECLIC Memory Map, which is compatible with TEE.
__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 void __ECLIC_SetCtrlIRQ(IRQn_Type IRQn, uint8_t intctrl)
Modify ECLIC Interrupt Input Control Register for a specific interrupt.
#define CLIC_CLICINFO_CTLBIT_Pos
CLIC INTINFO: CLICINTCTLBITS Position.
__STATIC_FORCEINLINE void __ECLIC_SetTrigIRQ(IRQn_Type IRQn, uint32_t trig)
Set trigger mode and polarity for a specific interrupt.
@ SOC_INT_MAX
Number of total interrupts.
Access to the machine mode register structure of INTIP, INTIE, INTATTR, INTCTL.
__STATIC_FORCEINLINE uint32_t __ECLIC_GetInfoNum(void)
Get number of maximum interrupt inputs supported.
@ ECLIC_LEVEL_TRIGGER
Level Triggerred, trig[0] = 0.
__IM uint32_t intctlbits
bit: 21..24 specifies how many hardware bits are actually implemented in the clicintctl registers
#define CLIC_INTATTR_SHV_Msk
CLIC INTATTR: SHV Mask.
@ ECLIC_MAX_TRIGGER
MAX Supported Trigger Mode.
__STATIC_FORCEINLINE rv_csr_t __get_nonvec_entry(void)
Get Non-vector interrupt entry address.
__STATIC_FORCEINLINE uint32_t __ECLIC_GetShvIRQ(IRQn_Type IRQn)
Get interrupt working mode for a specific interrupt.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetSth(void)
Get supervisor-mode Interrupt Level Threshold in supervisor mode.
__STATIC_FORCEINLINE void __ECLIC_SetVector(IRQn_Type IRQn, rv_csr_t vector)
Set Interrupt Vector of a specific interrupt.
__STATIC_FORCEINLINE void __ECLIC_DisableIRQ(IRQn_Type IRQn)
Disable a specific interrupt.
__STATIC_FORCEINLINE void __ECLIC_EnableIRQ(IRQn_Type IRQn)
Enable a specific interrupt.
@ FirstDeviceSpecificInterrupt_IRQn
First Device Specific Interrupt.
@ Reserved16_IRQn
Internal reserved.
@ Reserved9_IRQn
Internal reserved.
__IOM uint8_t INTIP
Offset: 0x000 (R/W) Interrupt set pending register.
__STATIC_FORCEINLINE void __ECLIC_SetTrigIRQ_S(IRQn_Type IRQn, uint32_t trig)
Set trigger mode and polarity for a specific interrupt in supervisor mode.
__IOM uint8_t MTH
Offset: 0x00B(R/W) CLIC machine mode interrupt-level threshold.
#define CLIC_CLICINFO_NUM_Msk
CLIC CLICINFO: NUM Mask.
#define __STATIC_FORCEINLINE
Define a static function that should be always inlined by the compiler.
__STATIC_FORCEINLINE uint32_t __ECLIC_GetEnableIRQ(IRQn_Type IRQn)
Get a specific interrupt enable status.
__STATIC_FORCEINLINE void __set_nonvec_entry(rv_csr_t addr)
Set Non-vector interrupt entry address.
__STATIC_FORCEINLINE uint32_t __ECLIC_GetCfgNlbits(void)
Get nlbits value.
@ Reserved15_IRQn
Internal reserved.
#define ECLIC_MAX_NLBITS
Max nlbit of the CLICINTCTLBITS.
@ Reserved2_IRQn
Internal reserved.
#define CLIC_CLICCFG_NLBIT_Pos
CLIC CLICCFG: NLBIT Position.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetPriorityIRQ(IRQn_Type IRQn)
Get ECLIC Interrupt priority of a specific interrupt.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetLevelIRQ_S(IRQn_Type IRQn)
Get ECLIC Interrupt level of a specific interrupt.
Union type to access CLICINFO information register.
__STATIC_FORCEINLINE void MInvalICacheLine(unsigned long addr)
Invalidate one I-Cache line specified by address in M-Mode.
@ Reserved11_IRQn
Internal reserved.
__IOM uint8_t INTCTRL
Offset: 0x003 (R/W) Interrupt configure register.
#define __RV_CSR_READ(csr)
CSR operation Macro for csrr instruction.
__STATIC_FORCEINLINE rv_csr_t __get_nmi_entry(void)
Get NMI interrupt entry from 'CSR_MNVEC'.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetEnableIRQ_S(IRQn_Type IRQn)
Get a specific interrupt enable status in supervisor mode.
#define CLIC_INTATTR_TRIG_Msk
CLIC INTATTR: TRIG Mask.
@ Reserved10_IRQn
Internal reserved.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetCtrlIRQ(IRQn_Type IRQn)
Get ECLIC Interrupt Input Control Register value for a specific interrupt.
__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 uint8_t __ECLIC_GetPriorityIRQ_S(IRQn_Type IRQn)
Get ECLIC Interrupt priority of a specific interrupt in supervisor mode.
__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 int32_t __ECLIC_GetPendingIRQ(IRQn_Type IRQn)
Get the pending specific interrupt.
__STATIC_FORCEINLINE void __ECLIC_ClearPendingIRQ(IRQn_Type IRQn)
Clear a specific interrupt from pending.
__IOM uint8_t CFG
Offset: 0x000 (R/W) CLIC configuration register.
__STATIC_FORCEINLINE rv_csr_t __get_exc_entry(void)
Get Exception entry address.
__STATIC_FORCEINLINE void __ECLIC_SetSth(uint8_t sth)
Set supervisor-mode Interrupt Level Threshold in supervisor mode.
__IOM uint8_t SSTH
Offset: 0x2009 (R) CLIC supervisor mode threshold register, which is a mirror to mintthresh....
@ Reserved4_IRQn
Internal reserved.
@ Reserved13_IRQn
Internal reserved.
__IM uint32_t version
bit: 13..20 20:17 for architecture version,16:13 for implementation version
__STATIC_FORCEINLINE void SInvalICacheLine(unsigned long addr)
Invalidate one I-Cache line specified by address in S-Mode.
@ Reserved1_IRQn
Internal reserved.
__STATIC_FORCEINLINE uint8_t __ECLIC_GetLevelIRQ(IRQn_Type IRQn)
Get ECLIC Interrupt level of a specific interrupt.
@ SysTimerSW_IRQn
System Timer SW interrupt.
__IM uint32_t w
Type used for word access.
__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_GetTrigIRQ_S(IRQn_Type IRQn)
Get trigger mode and polarity for a specific interrupt in supervisor mode.
#define CLIC_CLICINFO_VER_Pos
CLIC CLICINFO: VERSION Position.
__STATIC_FORCEINLINE uint32_t __ECLIC_GetInfoCtlbits(void)
Get CLICINTCTLBITS.
__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.
#define CLIC_CLICINFO_CTLBIT_Msk
CLIC INTINFO: CLICINTCTLBITS Mask.
@ Reserved12_IRQn
Internal reserved.
__STATIC_FORCEINLINE void __ECLIC_SetPendingIRQ(IRQn_Type IRQn)
Set a specific interrupt to pending.
__STATIC_FORCEINLINE void __FENCE_I(void)
Fence.i Instruction.
__IM uint8_t nmbits
bit: 5..6 ties to 1 if supervisor-level interrupt supported, or else it's reserved
unsigned long rv_csr_t
Type of Control and Status Register(CSR), depends on the XLEN defined in RISC-V.
#define CLIC_INTIP_IP_Msk
CLIC INTIP: IP Mask.
__STATIC_FORCEINLINE void __ECLIC_SetCfgNlbits(uint32_t nlbits)
Set nlbits value.
#define CLIC_CLICINFO_NUM_Pos
CLIC CLICINFO: NUM Position.
#define CLIC_CLICINFO_VER_Msk
CLIC CLICINFO: VERSION Mask.