NMSIS-Core  Version 1.6.0
NMSIS-Core support for Nuclei processor-based devices
PLIC Interrupt

Functions that manage interrupts via the PLIC. More...

Macros

#define PLIC_Init(num_sources, enable, thresh)   PLIC_Context_Init(PLIC_GetHartMContextID(), (num_sources), (enable), (thresh))
 
#define PLIC_Init_S(num_sources, enable, thresh)   PLIC_Context_Init(PLIC_GetHartSContextID(), (num_sources), (enable), (thresh))
 
#define PLIC_ClaimInterrupt()   PLIC_ClaimContextInterrupt(PLIC_GetHartMContextID())
 
#define PLIC_ClaimInterrupt_S()   PLIC_ClaimContextInterrupt(PLIC_GetHartSContextID())
 
#define PLIC_CompleteInterrupt(source)   PLIC_CompleteContextInterrupt(PLIC_GetHartMContextID(), (source))
 
#define PLIC_CompleteInterrupt_S(source)   PLIC_CompleteContextInterrupt(PLIC_GetHartSContextID(), (source))
 
#define PLIC_GetInterruptEnable(source)   PLIC_GetContextInterruptEnable(PLIC_GetHartMContextID(), (source))
 
#define PLIC_GetInterruptEnable_S(source)   PLIC_GetContextInterruptEnable(PLIC_GetHartSContextID(), (source))
 
#define PLIC_EnableInterrupt(source)   PLIC_EnableContextInterrupt(PLIC_GetHartMContextID(), (source))
 
#define PLIC_EnableInterrupt_S(source)   PLIC_EnableContextInterrupt(PLIC_GetHartSContextID(), (source))
 
#define PLIC_DisableInterrupt(source)   PLIC_DisableContextInterrupt(PLIC_GetHartMContextID(), (source))
 
#define PLIC_DisableInterrupt_S(source)   PLIC_DisableContextInterrupt(PLIC_GetHartSContextID(), (source))
 
#define PLIC_SetThreshold(thresh)   PLIC_SetContextThreshold(PLIC_GetHartMContextID(), (thresh))
 
#define PLIC_SetThreshold_S(thresh)   PLIC_SetContextThreshold(PLIC_GetHartSContextID(), (thresh))
 
#define PLIC_GetThreshold()   PLIC_GetContextThreshold(PLIC_GetHartMContextID())
 
#define PLIC_GetThreshold_S()   PLIC_GetContextThreshold(PLIC_GetHartSContextID())
 

Functions

__STATIC_FORCEINLINE void PLIC_SetContextThreshold (uint32_t ctxid, uint32_t thresh)
 Set priority threshold value of plic for selected context. More...
 
__STATIC_FORCEINLINE uint32_t PLIC_GetContextThreshold (uint32_t ctxid)
 Get priority threshold value of plic for selected context. More...
 
__STATIC_FORCEINLINE void PLIC_EnableContextInterrupt (uint32_t ctxid, uint32_t source)
 Enable interrupt of selected source plic for selected context. More...
 
__STATIC_FORCEINLINE void PLIC_DisableContextInterrupt (uint32_t ctxid, uint32_t source)
 Disable interrupt of selected source plic for selected context. More...
 
__STATIC_FORCEINLINE uint32_t PLIC_GetContextInterruptEnable (uint32_t ctxid, uint32_t source)
 Get interrupt enable status of selected source plic for selected context. More...
 
__STATIC_FORCEINLINE void PLIC_SetInterruptPending (uint32_t source)
 Set interrupt pending of selected source plic. More...
 
__STATIC_FORCEINLINE void PLIC_ClearInterruptPending (uint32_t source)
 Clear interrupt pending of selected source plic. More...
 
__STATIC_FORCEINLINE uint32_t PLIC_GetInterruptPending (uint32_t source)
 Get interrupt pending status of selected source plic. More...
 
__STATIC_FORCEINLINE void PLIC_SetPriority (uint32_t source, uint32_t priority)
 Set interrupt priority for selected source plic. More...
 
__STATIC_FORCEINLINE uint32_t PLIC_GetPriority (uint32_t source)
 Get interrupt priority for selected source plic. More...
 
__STATIC_FORCEINLINE uint32_t PLIC_ClaimContextInterrupt (uint32_t ctxid)
 Claim interrupt for plic for selected context. More...
 
__STATIC_FORCEINLINE void PLIC_CompleteContextInterrupt (uint32_t ctxid, uint32_t source)
 Complete interrupt for plic for selected context. More...
 
__STATIC_INLINE void PLIC_Context_Init (uint32_t ctxid, uint32_t num_sources, uint32_t enable, uint32_t thresh)
 Perform init for plic for selected context. More...
 
__STATIC_FORCEINLINE void __set_trap_entry (rv_csr_t addr)
 Set Trap entry address. More...
 
__STATIC_FORCEINLINE rv_csr_t __get_trap_entry (void)
 Get trap entry address. More...
 

Detailed Description

Functions that manage interrupts via the PLIC.

Macro Definition Documentation

◆ PLIC_ClaimInterrupt

#define PLIC_ClaimInterrupt ( )    PLIC_ClaimContextInterrupt(PLIC_GetHartMContextID())

Definition at line 424 of file core_feature_plic.h.

◆ PLIC_ClaimInterrupt_S

#define PLIC_ClaimInterrupt_S ( )    PLIC_ClaimContextInterrupt(PLIC_GetHartSContextID())

Definition at line 425 of file core_feature_plic.h.

◆ PLIC_CompleteInterrupt

#define PLIC_CompleteInterrupt (   source)    PLIC_CompleteContextInterrupt(PLIC_GetHartMContextID(), (source))

Definition at line 427 of file core_feature_plic.h.

◆ PLIC_CompleteInterrupt_S

#define PLIC_CompleteInterrupt_S (   source)    PLIC_CompleteContextInterrupt(PLIC_GetHartSContextID(), (source))

Definition at line 428 of file core_feature_plic.h.

◆ PLIC_DisableInterrupt

#define PLIC_DisableInterrupt (   source)    PLIC_DisableContextInterrupt(PLIC_GetHartMContextID(), (source))

Definition at line 436 of file core_feature_plic.h.

◆ PLIC_DisableInterrupt_S

#define PLIC_DisableInterrupt_S (   source)    PLIC_DisableContextInterrupt(PLIC_GetHartSContextID(), (source))

Definition at line 437 of file core_feature_plic.h.

◆ PLIC_EnableInterrupt

#define PLIC_EnableInterrupt (   source)    PLIC_EnableContextInterrupt(PLIC_GetHartMContextID(), (source))

Definition at line 433 of file core_feature_plic.h.

◆ PLIC_EnableInterrupt_S

#define PLIC_EnableInterrupt_S (   source)    PLIC_EnableContextInterrupt(PLIC_GetHartSContextID(), (source))

Definition at line 434 of file core_feature_plic.h.

◆ PLIC_GetInterruptEnable

#define PLIC_GetInterruptEnable (   source)    PLIC_GetContextInterruptEnable(PLIC_GetHartMContextID(), (source))

Definition at line 430 of file core_feature_plic.h.

◆ PLIC_GetInterruptEnable_S

#define PLIC_GetInterruptEnable_S (   source)    PLIC_GetContextInterruptEnable(PLIC_GetHartSContextID(), (source))

Definition at line 431 of file core_feature_plic.h.

◆ PLIC_GetThreshold

#define PLIC_GetThreshold ( )    PLIC_GetContextThreshold(PLIC_GetHartMContextID())

Definition at line 442 of file core_feature_plic.h.

◆ PLIC_GetThreshold_S

#define PLIC_GetThreshold_S ( )    PLIC_GetContextThreshold(PLIC_GetHartSContextID())

Definition at line 443 of file core_feature_plic.h.

◆ PLIC_Init

#define PLIC_Init (   num_sources,
  enable,
  thresh 
)    PLIC_Context_Init(PLIC_GetHartMContextID(), (num_sources), (enable), (thresh))

Definition at line 421 of file core_feature_plic.h.

◆ PLIC_Init_S

#define PLIC_Init_S (   num_sources,
  enable,
  thresh 
)    PLIC_Context_Init(PLIC_GetHartSContextID(), (num_sources), (enable), (thresh))

Definition at line 422 of file core_feature_plic.h.

◆ PLIC_SetThreshold

#define PLIC_SetThreshold (   thresh)    PLIC_SetContextThreshold(PLIC_GetHartMContextID(), (thresh))

Definition at line 439 of file core_feature_plic.h.

◆ PLIC_SetThreshold_S

#define PLIC_SetThreshold_S (   thresh)    PLIC_SetContextThreshold(PLIC_GetHartSContextID(), (thresh))

Definition at line 440 of file core_feature_plic.h.

Function Documentation

◆ __get_trap_entry()

__STATIC_FORCEINLINE rv_csr_t __get_trap_entry ( void  )

Get trap entry address.

This function get trap entry address from 'CSR_MTVEC'.

Returns
trap entry address
Remarks
  • This function use to get trap entry address from 'CSR_MTVEC'.
See also

Definition at line 471 of file core_feature_plic.h.

472 {
473  unsigned long addr = __RV_CSR_READ(CSR_MTVEC);
474  return (addr);
475 }

References __RV_CSR_READ, and CSR_MTVEC.

◆ __set_trap_entry()

__STATIC_FORCEINLINE void __set_trap_entry ( rv_csr_t  addr)

Set Trap entry address.

This function set trap entry address to 'CSR_MTVEC'.

Parameters
[in]addrtrap entry address
Remarks
  • This function use to set trap entry address to 'CSR_MTVEC'.
See also

Definition at line 455 of file core_feature_plic.h.

456 {
457  addr &= (rv_csr_t)(~0x7);
458  __RV_CSR_WRITE(CSR_MTVEC, addr);
459 }

References __RV_CSR_WRITE, and CSR_MTVEC.

◆ PLIC_ClaimContextInterrupt()

__STATIC_FORCEINLINE uint32_t PLIC_ClaimContextInterrupt ( uint32_t  ctxid)

Claim interrupt for plic for selected context.

This function claim interrupt for plic for selected context.

Parameters
[in]ctxidselected context id
Returns
the ID of the highest priority pending interrupt or zero if there is no pending interrupt
Remarks
A successful claim will also atomically clear the corresponding pending bit on the interrupt source. The PLIC can perform a claim at any time and the claim operation is not affected by the setting of the priority threshold register.
See also

Definition at line 365 of file core_feature_plic.h.

366 {
367  volatile uint32_t *claim_reg = (uint32_t *)PLIC_CLAIM_REGADDR(ctxid);
368 
369  return (*claim_reg);
370 }

References PLIC_CLAIM_REGADDR.

◆ PLIC_ClearInterruptPending()

__STATIC_FORCEINLINE void PLIC_ClearInterruptPending ( uint32_t  source)

Clear interrupt pending of selected source plic.

This function clear interrupt pending of selected source plic

Parameters
[in]sourceinterrupt source
Remarks
See also

Definition at line 288 of file core_feature_plic.h.

289 {
290  volatile uint32_t *pending_reg = (uint32_t *)PLIC_PENDING_REGADDR(source);
291 
292  uint32_t current = *pending_reg;
293  current = current & (~(1UL << (source & 0x1F)));
294  *pending_reg = current;
295 }

References PLIC_PENDING_REGADDR.

◆ PLIC_CompleteContextInterrupt()

__STATIC_FORCEINLINE void PLIC_CompleteContextInterrupt ( uint32_t  ctxid,
uint32_t  source 
)

Complete interrupt for plic for selected context.

This function complete interrupt for plic for selected context.

Parameters
[in]ctxidselected context id
[in]sourceinterrupt source ID to complete
Remarks
The PLIC signals it has completed executing an interrupt handler by writing the interrupt ID it received from the claim to the claim/complete register. The PLIC does not check whether the completion ID is the same as the last claim ID for that context. If the completion ID does not match an interrupt source that is currently enabled for the context, the completion is silently ignored.
See also

Definition at line 388 of file core_feature_plic.h.

389 {
390  volatile uint32_t *complete_reg = (uint32_t *)PLIC_COMPLETE_REGADDR(ctxid);
391 
392  *complete_reg = source;
393 }

References PLIC_COMPLETE_REGADDR.

◆ PLIC_Context_Init()

__STATIC_INLINE void PLIC_Context_Init ( uint32_t  ctxid,
uint32_t  num_sources,
uint32_t  enable,
uint32_t  thresh 
)

Perform init for plic for selected context.

This function perform initialization steps for plic for selected context.

Parameters
[in]ctxidselected context id
[in]num_sourcesplic interrupt source count number
[in]enableplic interrupt enable or not
[in]threshplic interrupt threshold
Remarks
  • Disable all interrupts
  • Set priority threshold to value specified by thresh

Definition at line 407 of file core_feature_plic.h.

408 {
409  uint32_t i;
410 
411  for (i = 0; i < num_sources; i ++) {
412  if (enable) {
413  PLIC_EnableContextInterrupt(ctxid, i);
414  } else {
416  }
417  }
418  PLIC_SetContextThreshold(ctxid, thresh);
419 }

References PLIC_DisableContextInterrupt(), PLIC_EnableContextInterrupt(), and PLIC_SetContextThreshold().

◆ PLIC_DisableContextInterrupt()

__STATIC_FORCEINLINE void PLIC_DisableContextInterrupt ( uint32_t  ctxid,
uint32_t  source 
)

Disable interrupt of selected source plic for selected context.

This function disable interrupt of selected source plic for selected context

Parameters
[in]ctxidselected context id
[in]sourceinterrupt source
Remarks
See also

Definition at line 229 of file core_feature_plic.h.

230 {
231  volatile uint32_t *enable_reg = (uint32_t *)PLIC_ENABLE_REGADDR(ctxid, source);
232 
233  uint32_t current = *enable_reg;
234  current = current & (~(1UL << (source & 0x1F)));
235  *enable_reg = current;
236 }

References PLIC_ENABLE_REGADDR.

Referenced by PLIC_Context_Init().

◆ PLIC_EnableContextInterrupt()

__STATIC_FORCEINLINE void PLIC_EnableContextInterrupt ( uint32_t  ctxid,
uint32_t  source 
)

Enable interrupt of selected source plic for selected context.

This function enable interrupt of selected source plic for selected context.

Parameters
[in]ctxidselected context id
[in]sourceinterrupt source
Remarks
See also

Definition at line 210 of file core_feature_plic.h.

211 {
212  volatile uint32_t *enable_reg = (uint32_t *)PLIC_ENABLE_REGADDR(ctxid, source);
213 
214  uint32_t current = *enable_reg;
215  current = current | (1UL << (source & 0x1F));
216  *enable_reg = current;
217 }

References PLIC_ENABLE_REGADDR.

Referenced by PLIC_Context_Init().

◆ PLIC_GetContextInterruptEnable()

__STATIC_FORCEINLINE uint32_t PLIC_GetContextInterruptEnable ( uint32_t  ctxid,
uint32_t  source 
)

Get interrupt enable status of selected source plic for selected context.

This function get interrupt enable of selected source plic for selected context.

Parameters
[in]ctxidselected context id
[in]sourceinterrupt source
Returns
enable status for selected interrupt source for selected context
Remarks
See also

Definition at line 250 of file core_feature_plic.h.

251 {
252  volatile uint32_t *enable_reg = (uint32_t *)PLIC_ENABLE_REGADDR(ctxid, source);
253 
254  uint32_t current = *enable_reg;
255  current = (current >> (source & 0x1F)) & 0x1;
256  return current;
257 }

References PLIC_ENABLE_REGADDR.

◆ PLIC_GetContextThreshold()

__STATIC_FORCEINLINE uint32_t PLIC_GetContextThreshold ( uint32_t  ctxid)

Get priority threshold value of plic for selected context.

This function get priority threshold value of plic for selected context.

Parameters
[in]ctxidselected context id
Returns
priority threshold value for selected context
Remarks
See also

Definition at line 193 of file core_feature_plic.h.

194 {
195  volatile uint32_t *thresh_reg = (uint32_t *)PLIC_THRESHOLD_REGADDR(ctxid);
196 
197  return (*thresh_reg);
198 }

References PLIC_THRESHOLD_REGADDR.

◆ PLIC_GetInterruptPending()

__STATIC_FORCEINLINE uint32_t PLIC_GetInterruptPending ( uint32_t  source)

Get interrupt pending status of selected source plic.

This function get interrupt pending of selected source plic

Parameters
[in]sourceinterrupt source
Returns
interrupt pending status for selected interrupt source
Remarks
See also

Definition at line 308 of file core_feature_plic.h.

309 {
310  volatile uint32_t *pending_reg = (uint32_t *)PLIC_PENDING_REGADDR(source);
311 
312  uint32_t current = *pending_reg;
313  current = (current >> (source & 0x1F)) & 0x1;
314  return current;
315 }

References PLIC_PENDING_REGADDR.

◆ PLIC_GetPriority()

__STATIC_FORCEINLINE uint32_t PLIC_GetPriority ( uint32_t  source)

Get interrupt priority for selected source plic.

This function get interrupt priority for selected source plic.

Parameters
[in]sourceinterrupt source
[in]priorityinterrupt priority
Remarks
See also

Definition at line 344 of file core_feature_plic.h.

345 {
346  volatile uint32_t *priority_reg = (uint32_t *)PLIC_PRIORITY_REGADDR(source);
347 
348  return (*priority_reg);
349 }

References PLIC_PRIORITY_REGADDR.

◆ PLIC_SetContextThreshold()

__STATIC_FORCEINLINE void PLIC_SetContextThreshold ( uint32_t  ctxid,
uint32_t  thresh 
)

Set priority threshold value of plic for selected context.

This function set priority threshold value of plic for selected context.

Parameters
[in]ctxidselected context id
[in]threshthreshold value
Remarks
See also

Definition at line 176 of file core_feature_plic.h.

177 {
178  volatile uint32_t *thresh_reg = (uint32_t *)PLIC_THRESHOLD_REGADDR(ctxid);
179 
180  *thresh_reg = thresh;
181 }

References PLIC_THRESHOLD_REGADDR.

Referenced by PLIC_Context_Init().

◆ PLIC_SetInterruptPending()

__STATIC_FORCEINLINE void PLIC_SetInterruptPending ( uint32_t  source)

Set interrupt pending of selected source plic.

This function set interrupt pending of selected source plic.

Parameters
[in]sourceinterrupt source
Remarks
See also

Definition at line 269 of file core_feature_plic.h.

270 {
271  volatile uint32_t *pending_reg = (uint32_t *)PLIC_PENDING_REGADDR(source);
272 
273  uint32_t current = *pending_reg;
274  current = current | (1UL << (source & 0x1F));
275  *pending_reg = current;
276 }

References PLIC_PENDING_REGADDR.

◆ PLIC_SetPriority()

__STATIC_FORCEINLINE void PLIC_SetPriority ( uint32_t  source,
uint32_t  priority 
)

Set interrupt priority for selected source plic.

This function set interrupt priority for selected source plic.

Parameters
[in]sourceinterrupt source
[in]priorityinterrupt priority
Remarks
See also

Definition at line 327 of file core_feature_plic.h.

328 {
329  volatile uint32_t *priority_reg = (uint32_t *)PLIC_PRIORITY_REGADDR(source);
330 
331  *priority_reg = priority;
332 }

References PLIC_PRIORITY_REGADDR.

Referenced by PLIC_Register_IRQ(), and PLIC_Register_IRQ_S().

PLIC_THRESHOLD_REGADDR
#define PLIC_THRESHOLD_REGADDR(ctxid)
Definition: core_feature_plic.h:151
PLIC_DisableContextInterrupt
__STATIC_FORCEINLINE void PLIC_DisableContextInterrupt(uint32_t ctxid, uint32_t source)
Disable interrupt of selected source plic for selected context.
Definition: core_feature_plic.h:229
CSR_MTVEC
#define CSR_MTVEC
Definition: riscv_encoding.h:672
PLIC_PENDING_REGADDR
#define PLIC_PENDING_REGADDR(source)
Definition: core_feature_plic.h:149
PLIC_SetContextThreshold
__STATIC_FORCEINLINE void PLIC_SetContextThreshold(uint32_t ctxid, uint32_t thresh)
Set priority threshold value of plic for selected context.
Definition: core_feature_plic.h:176
__RV_CSR_WRITE
#define __RV_CSR_WRITE(csr, val)
CSR operation Macro for csrw instruction.
Definition: core_feature_base.h:725
PLIC_ENABLE_REGADDR
#define PLIC_ENABLE_REGADDR(ctxid, source)
Definition: core_feature_plic.h:150
PLIC_PRIORITY_REGADDR
#define PLIC_PRIORITY_REGADDR(source)
Definition: core_feature_plic.h:148
__RV_CSR_READ
#define __RV_CSR_READ(csr)
CSR operation Macro for csrr instruction.
Definition: core_feature_base.h:707
PLIC_EnableContextInterrupt
__STATIC_FORCEINLINE void PLIC_EnableContextInterrupt(uint32_t ctxid, uint32_t source)
Enable interrupt of selected source plic for selected context.
Definition: core_feature_plic.h:210
PLIC_COMPLETE_REGADDR
#define PLIC_COMPLETE_REGADDR(ctxid)
Definition: core_feature_plic.h:153
PLIC_CLAIM_REGADDR
#define PLIC_CLAIM_REGADDR(ctxid)
Definition: core_feature_plic.h:152
rv_csr_t
unsigned long rv_csr_t
Type of Control and Status Register(CSR), depends on the XLEN defined in RISC-V.
Definition: core_feature_base.h:55