NMSIS-Core
Version 1.3.1
NMSIS-Core support for Nuclei processor-based devices
|
Functions to access the Core CSR Registers. More...
Macros | |
#define | __RV_CSR_SWAP(csr, val) |
CSR operation Macro for csrrw instruction. More... | |
#define | __RV_CSR_READ(csr) |
CSR operation Macro for csrr instruction. More... | |
#define | __RV_CSR_WRITE(csr, val) |
CSR operation Macro for csrw instruction. More... | |
#define | __RV_CSR_READ_SET(csr, val) |
CSR operation Macro for csrrs instruction. More... | |
#define | __RV_CSR_SET(csr, val) |
CSR operation Macro for csrs instruction. More... | |
#define | __RV_CSR_READ_CLEAR(csr, val) |
CSR operation Macro for csrrc instruction. More... | |
#define | __RV_CSR_CLEAR(csr, val) |
CSR operation Macro for csrc instruction. More... | |
Functions | |
__STATIC_FORCEINLINE void | __switch_mode (uint8_t mode, uintptr_t stack, void(*entry_point)(void)) |
switch privilege from machine mode to others. More... | |
__STATIC_FORCEINLINE void | __enable_irq (void) |
Enable IRQ Interrupts. More... | |
__STATIC_FORCEINLINE void | __disable_irq (void) |
Disable IRQ Interrupts. More... | |
__STATIC_FORCEINLINE void | __enable_ext_irq (void) |
Enable External IRQ Interrupts. More... | |
__STATIC_FORCEINLINE void | __disable_ext_irq (void) |
Disable External IRQ Interrupts. More... | |
__STATIC_FORCEINLINE void | __enable_timer_irq (void) |
Enable Timer IRQ Interrupts. More... | |
__STATIC_FORCEINLINE void | __disable_timer_irq (void) |
Disable Timer IRQ Interrupts. More... | |
__STATIC_FORCEINLINE void | __enable_sw_irq (void) |
Enable software IRQ Interrupts. More... | |
__STATIC_FORCEINLINE void | __disable_sw_irq (void) |
Disable software IRQ Interrupts. More... | |
__STATIC_FORCEINLINE void | __disable_core_irq (uint32_t irq) |
Disable Core IRQ Interrupt. More... | |
__STATIC_FORCEINLINE void | __enable_core_irq (uint32_t irq) |
Enable Core IRQ Interrupt. More... | |
__STATIC_FORCEINLINE uint32_t | __get_core_irq_pending (uint32_t irq) |
Get Core IRQ Interrupt Pending status. More... | |
__STATIC_FORCEINLINE void | __clear_core_irq_pending (uint32_t irq) |
Clear Core IRQ Interrupt Pending status. More... | |
__STATIC_FORCEINLINE void | __enable_irq_s (void) |
Enable IRQ Interrupts in supervisor mode. More... | |
__STATIC_FORCEINLINE void | __disable_irq_s (void) |
Disable IRQ Interrupts in supervisor mode. More... | |
__STATIC_FORCEINLINE void | __enable_ext_irq_s (void) |
Enable External IRQ Interrupts in supervisor mode. More... | |
__STATIC_FORCEINLINE void | __disable_ext_irq_s (void) |
Disable External IRQ Interrupts in supervisor mode. More... | |
__STATIC_FORCEINLINE void | __enable_timer_irq_s (void) |
Enable Timer IRQ Interrupts in supervisor mode. More... | |
__STATIC_FORCEINLINE void | __disable_timer_irq_s (void) |
Disable Timer IRQ Interrupts in supervisor mode. More... | |
__STATIC_FORCEINLINE void | __enable_sw_irq_s (void) |
Enable software IRQ Interrupts in supervisor mode. More... | |
__STATIC_FORCEINLINE void | __disable_sw_irq_s (void) |
Disable software IRQ Interrupts in supervisor mode. More... | |
__STATIC_FORCEINLINE void | __disable_core_irq_s (uint32_t irq) |
Disable Core IRQ Interrupt in supervisor mode. More... | |
__STATIC_FORCEINLINE void | __enable_core_irq_s (uint32_t irq) |
Enable Core IRQ Interrupt in supervisor mode. More... | |
__STATIC_FORCEINLINE uint32_t | __get_core_irq_pending_s (uint32_t irq) |
Get Core IRQ Interrupt Pending status in supervisor mode. More... | |
__STATIC_FORCEINLINE void | __clear_core_irq_pending_s (uint32_t irq) |
Clear Core IRQ Interrupt Pending status in supervisor mode. More... | |
__STATIC_FORCEINLINE uint64_t | __get_rv_cycle (void) |
Read whole 64 bits value of mcycle counter. More... | |
__STATIC_FORCEINLINE void | __set_rv_cycle (uint64_t cycle) |
Set whole 64 bits value of mcycle counter. More... | |
__STATIC_FORCEINLINE uint64_t | __get_rv_instret (void) |
Read whole 64 bits value of machine instruction-retired counter. More... | |
__STATIC_FORCEINLINE void | __set_rv_instret (uint64_t instret) |
Set whole 64 bits value of machine instruction-retired counter. More... | |
__STATIC_FORCEINLINE uint64_t | __get_rv_time (void) |
Read whole 64 bits value of real-time clock. More... | |
__STATIC_FORCEINLINE unsigned long | __get_cluster_id (void) |
Get cluster id of current cluster. More... | |
__STATIC_FORCEINLINE unsigned long | __get_hart_index (void) |
Get hart index of current cluster. More... | |
__STATIC_FORCEINLINE unsigned long | __get_hart_id (void) |
Get hart id of current cluster. More... | |
Functions to access the Core CSR Registers.
The following functions or macros provide access to Core CSR registers.
#define __RV_CSR_CLEAR | ( | csr, | |
val | |||
) |
CSR operation Macro for csrc instruction.
Set csr register to be csr_content & ~val
csr | CSR macro definition defined in Core CSR Registers, eg. CSR_MSTATUS |
val | Mask value to be used wih csrc instruction |
Definition at line 606 of file core_feature_base.h.
#define __RV_CSR_READ | ( | csr | ) |
CSR operation Macro for csrr instruction.
Read the content of csr register to __v and return it
csr | CSR macro definition defined in Core CSR Registers, eg. CSR_MSTATUS |
Definition at line 514 of file core_feature_base.h.
#define __RV_CSR_READ_CLEAR | ( | csr, | |
val | |||
) |
CSR operation Macro for csrrc instruction.
Read the content of csr register to __v, then set csr register to be __v & ~val, then return __v
csr | CSR macro definition defined in Core CSR Registers, eg. CSR_MSTATUS |
val | Mask value to be used wih csrrc instruction |
Definition at line 588 of file core_feature_base.h.
#define __RV_CSR_READ_SET | ( | csr, | |
val | |||
) |
CSR operation Macro for csrrs instruction.
Read the content of csr register to __v, then set csr register to be __v | val, then return __v
csr | CSR macro definition defined in Core CSR Registers, eg. CSR_MSTATUS |
val | Mask value to be used wih csrrs instruction |
Definition at line 551 of file core_feature_base.h.
#define __RV_CSR_SET | ( | csr, | |
val | |||
) |
CSR operation Macro for csrs instruction.
Set csr register to be csr_content | val
csr | CSR macro definition defined in Core CSR Registers, eg. CSR_MSTATUS |
val | Mask value to be used wih csrs instruction |
Definition at line 569 of file core_feature_base.h.
#define __RV_CSR_SWAP | ( | csr, | |
val | |||
) |
CSR operation Macro for csrrw instruction.
Read the content of csr register to __v, then write content of val into csr register, then return __v
csr | CSR macro definition defined in Core CSR Registers, eg. CSR_MSTATUS |
val | value to store into the CSR register |
Definition at line 496 of file core_feature_base.h.
#define __RV_CSR_WRITE | ( | csr, | |
val | |||
) |
CSR operation Macro for csrw instruction.
Write the content of val to csr register
csr | CSR macro definition defined in Core CSR Registers, eg. CSR_MSTATUS |
val | value to store into the CSR register |
Definition at line 532 of file core_feature_base.h.
__STATIC_FORCEINLINE void __clear_core_irq_pending | ( | uint32_t | irq | ) |
Clear Core IRQ Interrupt Pending status.
Clear Core IRQ interrupt pending status of irq bit.
Definition at line 787 of file core_feature_base.h.
References __RV_CSR_SET, and CSR_MIP.
__STATIC_FORCEINLINE void __clear_core_irq_pending_s | ( | uint32_t | irq | ) |
Clear Core IRQ Interrupt Pending status in supervisor mode.
Clear Core IRQ interrupt pending status of irq bit.
Definition at line 919 of file core_feature_base.h.
References __RV_CSR_SET, and CSR_SIP.
__STATIC_FORCEINLINE void __disable_core_irq | ( | uint32_t | irq | ) |
Disable Core IRQ Interrupt.
Disable Core IRQ interrupt by clearing the irq bit in the MIE Register.
Definition at line 754 of file core_feature_base.h.
References __RV_CSR_CLEAR, and CSR_MIE.
__STATIC_FORCEINLINE void __disable_core_irq_s | ( | uint32_t | irq | ) |
Disable Core IRQ Interrupt in supervisor mode.
Disable Core IRQ interrupt by clearing the irq bit in the SIE Register.
Definition at line 886 of file core_feature_base.h.
References __RV_CSR_CLEAR, and CSR_SIE.
__STATIC_FORCEINLINE void __disable_ext_irq | ( | void | ) |
Disable External IRQ Interrupts.
Disables External IRQ interrupts by clearing the MEIE-bit in the MIE Register.
Definition at line 699 of file core_feature_base.h.
References __RV_CSR_CLEAR, CSR_MIE, and MIE_MEIE.
__STATIC_FORCEINLINE void __disable_ext_irq_s | ( | void | ) |
Disable External IRQ Interrupts in supervisor mode.
Disables External IRQ interrupts by clearing the SEIE-bit in the SIE Register.
Definition at line 831 of file core_feature_base.h.
References __RV_CSR_CLEAR, CSR_SIE, and MIE_SEIE.
__STATIC_FORCEINLINE void __disable_irq | ( | void | ) |
Disable IRQ Interrupts.
Disables IRQ interrupts by clearing the MIE-bit in the MSTATUS Register.
Definition at line 677 of file core_feature_base.h.
References __RV_CSR_CLEAR, CSR_MSTATUS, and MSTATUS_MIE.
__STATIC_FORCEINLINE void __disable_irq_s | ( | void | ) |
Disable IRQ Interrupts in supervisor mode.
Disables IRQ interrupts by clearing the SIE-bit in the SSTATUS Register.
Definition at line 809 of file core_feature_base.h.
References __RV_CSR_CLEAR, CSR_SSTATUS, and SSTATUS_SIE.
__STATIC_FORCEINLINE void __disable_sw_irq | ( | void | ) |
Disable software IRQ Interrupts.
Disables software IRQ interrupts by clearing the MSIE-bit in the MIE Register.
Definition at line 743 of file core_feature_base.h.
References __RV_CSR_CLEAR, CSR_MIE, and MIE_MSIE.
__STATIC_FORCEINLINE void __disable_sw_irq_s | ( | void | ) |
Disable software IRQ Interrupts in supervisor mode.
Disables software IRQ interrupts by clearing the SSIE-bit in the SIE Register.
Definition at line 875 of file core_feature_base.h.
References __RV_CSR_CLEAR, CSR_SIE, and MIE_SSIE.
__STATIC_FORCEINLINE void __disable_timer_irq | ( | void | ) |
Disable Timer IRQ Interrupts.
Disables Timer IRQ interrupts by clearing the MTIE-bit in the MIE Register.
Definition at line 721 of file core_feature_base.h.
References __RV_CSR_CLEAR, CSR_MIE, and MIE_MTIE.
__STATIC_FORCEINLINE void __disable_timer_irq_s | ( | void | ) |
Disable Timer IRQ Interrupts in supervisor mode.
Disables Timer IRQ interrupts by clearing the STIE-bit in the SIE Register.
Definition at line 853 of file core_feature_base.h.
References __RV_CSR_CLEAR, CSR_SIE, and MIE_STIE.
__STATIC_FORCEINLINE void __enable_core_irq | ( | uint32_t | irq | ) |
Enable Core IRQ Interrupt.
Enable Core IRQ interrupt by setting the irq bit in the MIE Register.
Definition at line 765 of file core_feature_base.h.
References __RV_CSR_SET, and CSR_MIE.
__STATIC_FORCEINLINE void __enable_core_irq_s | ( | uint32_t | irq | ) |
Enable Core IRQ Interrupt in supervisor mode.
Enable Core IRQ interrupt by setting the irq bit in the MIE Register.
Definition at line 897 of file core_feature_base.h.
References __RV_CSR_SET, and CSR_SIE.
__STATIC_FORCEINLINE void __enable_ext_irq | ( | void | ) |
Enable External IRQ Interrupts.
Enables External IRQ interrupts by setting the MEIE-bit in the MIE Register.
Definition at line 688 of file core_feature_base.h.
References __RV_CSR_SET, CSR_MIE, and MIE_MEIE.
__STATIC_FORCEINLINE void __enable_ext_irq_s | ( | void | ) |
Enable External IRQ Interrupts in supervisor mode.
Enables External IRQ interrupts by setting the SEIE-bit in the SIE Register.
Definition at line 820 of file core_feature_base.h.
References __RV_CSR_SET, CSR_SIE, and MIE_SEIE.
__STATIC_FORCEINLINE void __enable_irq | ( | void | ) |
Enable IRQ Interrupts.
Enables IRQ interrupts by setting the MIE-bit in the MSTATUS Register.
Definition at line 666 of file core_feature_base.h.
References __RV_CSR_SET, CSR_MSTATUS, and MSTATUS_MIE.
__STATIC_FORCEINLINE void __enable_irq_s | ( | void | ) |
Enable IRQ Interrupts in supervisor mode.
Enables IRQ interrupts by setting the SIE-bit in the SSTATUS Register.
Definition at line 798 of file core_feature_base.h.
References __RV_CSR_SET, CSR_SSTATUS, and SSTATUS_SIE.
__STATIC_FORCEINLINE void __enable_sw_irq | ( | void | ) |
Enable software IRQ Interrupts.
Enables software IRQ interrupts by setting the MSIE-bit in the MIE Register.
Definition at line 732 of file core_feature_base.h.
References __RV_CSR_SET, CSR_MIE, and MIE_MSIE.
__STATIC_FORCEINLINE void __enable_sw_irq_s | ( | void | ) |
Enable software IRQ Interrupts in supervisor mode.
Enables software IRQ interrupts by setting the SSIE-bit in the SIE Register.
Definition at line 864 of file core_feature_base.h.
References __RV_CSR_SET, CSR_MIE, and MIE_SSIE.
__STATIC_FORCEINLINE void __enable_timer_irq | ( | void | ) |
Enable Timer IRQ Interrupts.
Enables Timer IRQ interrupts by setting the MTIE-bit in the MIE Register.
Definition at line 710 of file core_feature_base.h.
References __RV_CSR_SET, CSR_MIE, and MIE_MTIE.
__STATIC_FORCEINLINE void __enable_timer_irq_s | ( | void | ) |
Enable Timer IRQ Interrupts in supervisor mode.
Enables Timer IRQ interrupts by setting the STIE-bit in the SIE Register.
Definition at line 842 of file core_feature_base.h.
References __RV_CSR_SET, CSR_SIE, and MIE_STIE.
__STATIC_FORCEINLINE unsigned long __get_cluster_id | ( | void | ) |
Get cluster id of current cluster.
This function will get cluster id of current cluster in a multiple cluster system
Definition at line 1047 of file core_feature_base.h.
References __RV_CSR_READ, and CSR_MHARTID.
__STATIC_FORCEINLINE uint32_t __get_core_irq_pending | ( | uint32_t | irq | ) |
Get Core IRQ Interrupt Pending status.
Get Core IRQ interrupt pending status of irq bit.
Definition at line 776 of file core_feature_base.h.
References __RV_CSR_READ, and CSR_MIP.
__STATIC_FORCEINLINE uint32_t __get_core_irq_pending_s | ( | uint32_t | irq | ) |
Get Core IRQ Interrupt Pending status in supervisor mode.
Get Core IRQ interrupt pending status of irq bit.
Definition at line 908 of file core_feature_base.h.
References __RV_CSR_READ, and CSR_SIP.
__STATIC_FORCEINLINE unsigned long __get_hart_id | ( | void | ) |
Get hart id of current cluster.
This function will get hart id of current cluster in a multiple cluster system
Definition at line 1083 of file core_feature_base.h.
References __RV_CSR_READ, and CSR_MHARTID.
__STATIC_FORCEINLINE unsigned long __get_hart_index | ( | void | ) |
Get hart index of current cluster.
This function will get hart index of current cluster in a multiple cluster system, hart index is hartid - hartid offset, for example if your hartid is 1, and offset is 1, then hart index is 0
Definition at line 1063 of file core_feature_base.h.
References __RV_CSR_READ, and CSR_MHARTID.
__STATIC_FORCEINLINE uint64_t __get_rv_cycle | ( | void | ) |
Read whole 64 bits value of mcycle counter.
This function will read the whole 64 bits of MCYCLE register
Definition at line 930 of file core_feature_base.h.
References __RV_CSR_READ, CSR_MCYCLE, and CSR_MCYCLEH.
Referenced by __get_hpm_counter().
__STATIC_FORCEINLINE uint64_t __get_rv_instret | ( | void | ) |
Read whole 64 bits value of machine instruction-retired counter.
This function will read the whole 64 bits of MINSTRET register
Definition at line 974 of file core_feature_base.h.
References __RV_CSR_READ, CSR_MINSTRET, and CSR_MINSTRETH.
Referenced by __get_hpm_counter().
__STATIC_FORCEINLINE uint64_t __get_rv_time | ( | void | ) |
Read whole 64 bits value of real-time clock.
This function will read the whole 64 bits of TIME register
Definition at line 1019 of file core_feature_base.h.
References __RV_CSR_READ, CSR_TIME, and CSR_TIMEH.
__STATIC_FORCEINLINE void __set_rv_cycle | ( | uint64_t | cycle | ) |
Set whole 64 bits value of mcycle counter.
This function will set the whole 64 bits of MCYCLE register
Definition at line 956 of file core_feature_base.h.
References __RV_CSR_WRITE, CSR_MCYCLE, and CSR_MCYCLEH.
__STATIC_FORCEINLINE void __set_rv_instret | ( | uint64_t | instret | ) |
Set whole 64 bits value of machine instruction-retired counter.
This function will set the whole 64 bits of MINSTRET register
Definition at line 1000 of file core_feature_base.h.
References __RV_CSR_WRITE, CSR_MINSTRET, and CSR_MINSTRETH.
__STATIC_FORCEINLINE void __switch_mode | ( | uint8_t | mode, |
uintptr_t | stack, | ||
void(*)(void) | entry_point | ||
) |
switch privilege from machine mode to others.
Execute into entry_point in mode(supervisor or user) with given stack
mode | privilege mode |
stack | predefined stack, size should set enough |
entry_point | a function pointer to execute |
Definition at line 638 of file core_feature_base.h.
References __ASM, __RV_CSR_READ, __RV_CSR_WRITE, CSR_MEPC, CSR_MSTATUS, MSTATUS_MPIE, and MSTATUS_MPP.