RV32 SoC DS UG
High-Perf RV32 SoC DS UG
RV64 SoC DS UG API and Examples
Embedded IDE UG
Loading...
Searching...
No Matches

Overview

Function definitions for interrupt handler, exception.

Main Trap Entry Point (Naked).

Hardware vector target (written to mtvec).

void trap_entry (void)
 The Main Trap Entry Point (Naked).

CPU Interrupt Handler.

Handle interrupt from external, timer, software interrupts.

Note
These are weak aliases pointing to irq_handleDefault. The user can override them by defining a function with the same name.
int irq_handleDefault (void)
 Default Fallback Interrupt Handler.
int irq_handleSoft (void)
 Handlers for CPU interrupts (Software).
int irq_handleTimer (void)
 Handlers for CPU interrupts (Timer).
void irq_handleExt (void)
 External Interrupt Handler (PLIC).

List of Interrupt Handler.

List of weak aliases for all PLIC interrupt sources. The user can override any of these by defining a function with the same name.

Note
These are weak aliases pointing to irq_handleDefault. Refer to mtrap.c for the full list of handlers and their corresponding PLIC IDs. The user can override them by defining a function with the same name.
int irq_m_invalid_handler (void)
 ID: 0, Handler for invalid/unassigned interrupts.
int irq_m_uart0_handler (void)
 ID: 1, Handler for UART0 interrupts.
int irq_m_uart1_handler (void)
 ID: 2, Handler for UART1 interrupts.
int irq_m_uart2_handler (void)
 ID: 3, Handler for UART2 interrupts.
int irq_m_spi0_handler (void)
 ID: 6, Handler for SPI0 interrupts.
int irq_m_spi1_handler (void)
 ID: 7, Handler for SPI1 interrupts.
int irq_m_spi2_handler (void)
 ID: 8, Handler for SPI2 interrupts.
int irq_m_i2c0_handler (void)
 ID: 11, Handler for I2C0 interrupts.
int irq_m_i2c1_handler (void)
 ID: 12, Handler for I2C1 interrupts.
int irq_m_i2c2_handler (void)
 ID: 13, Handler for I2C2 interrupts.
int irq_m_i2c3_handler (void)
 ID: 14, Handler for I2C3 interrupts.
int irq_m_i2c4_handler (void)
 ID: 15, Handler for I2C4 interrupts.
int irq_m_gpio0_0_handler (void)
 ID: 16, Handler for GPIO0_0 interrupts.
int irq_m_gpio0_1_handler (void)
 ID: 17, Handler for GPIO0_1 interrupts.
int irq_m_gpio1_0_handler (void)
 ID: 18, Handler for GPIO1_0 interrupts.
int irq_m_gpio1_1_handler (void)
 ID: 19, Handler for GPIO1_1 interrupts.
int irq_m_userTimer0_handler (void)
 ID: 21, Handler for User Timer 0 interrupts.
int irq_m_userTimer1_handler (void)
 ID: 22, Handler for User Timer 1 interrupts.
int irq_m_userTimer2_handler (void)
 ID: 23, Handler for User Timer 2 interrupts.
int irq_m_watchDog0_handler (void)
 ID: 26, Handler for WatchDog Timer interrupts.
int irq_m_axiA_handler (void)
 ID: 30, Handler for AXI A interrupts.
int irq_m_l2Cache_handler (void)
 ID: 31, Handler for L2 Cache Control interrupts.
int irq_m_user_a_handler (void)
 ID: 32, Handler for User-defined Interrupt A.
int irq_m_user_b_handler (void)
 ID: 33, Handler for User-defined Interrupt B.
int irq_m_user_c_handler (void)
 ID: 34, Handler for User-defined Interrupt C.
int irq_m_user_d_handler (void)
 ID: 35, Handler for User-defined Interrupt D.
int irq_m_user_e_handler (void)
 ID: 36, Handler for User-defined Interrupt E.
int irq_m_user_f_handler (void)
 ID: 37, Handler for User-defined Interrupt F.
int irq_m_user_g_handler (void)
 ID: 38, Handler for User-defined Interrupt G.
int irq_m_user_h_handler (void)
 ID: 39, Handler for User-defined Interrupt H.

Dispatcher/Exception Handlers (Function)

Trap Dispatcher mainly for external interrupt and exception handler.

Note
These are weak aliases pointing to irq_handleDefault. The user can override them by defining a function with the same name.
void trap (void)
 Main C Trap Dispatcher.
void crash (void)
 Fatal Exception Handler.

Function Documentation

◆ crash()

void crash ( void )

#include <mtrap.h>

Fatal Exception Handler.

Warning
Called when the CPU encounters a synchronous fault (e.g., Illegal Instruction, Load/Store Misaligned). Default implementation prints the registers (mepc, mcause) and hangs.

Definition at line 284 of file mtrap.c.

◆ irq_handleDefault()

int irq_handleDefault ( void )

#include <mtrap.h>

Default Fallback Interrupt Handler.

Note
Invoked if an interrupt fires but no specific handler is defined.
Returns
0

Definition at line 27 of file mtrap.c.

◆ irq_handleExt()

void irq_handleExt ( void )

#include <mtrap.h>

External Interrupt Handler (PLIC).

Called by the trap dispatcher when mcause indicates an External Interrupt. It queries the PLIC for the specific source ID.

Definition at line 242 of file mtrap.c.

◆ irq_handleSoft()

int irq_handleSoft ( void )

#include <mtrap.h>

Handlers for CPU interrupts (Software).

Note
This function points to irq_handleDefault which is also a weak alias. User can override it by defining a function with the same name.

◆ irq_handleTimer()

int irq_handleTimer ( void )

#include <mtrap.h>

Handlers for CPU interrupts (Timer).

Note
This function points to irq_handleDefault which is also a weak alias. User can override it by assigning a function with same name.

◆ irq_m_axiA_handler()

int irq_m_axiA_handler ( void )

#include <mtrap.h>

ID: 30, Handler for AXI A interrupts.

◆ irq_m_gpio0_0_handler()

int irq_m_gpio0_0_handler ( void )

#include <mtrap.h>

ID: 16, Handler for GPIO0_0 interrupts.

◆ irq_m_gpio0_1_handler()

int irq_m_gpio0_1_handler ( void )

#include <mtrap.h>

ID: 17, Handler for GPIO0_1 interrupts.

◆ irq_m_gpio1_0_handler()

int irq_m_gpio1_0_handler ( void )

#include <mtrap.h>

ID: 18, Handler for GPIO1_0 interrupts.

◆ irq_m_gpio1_1_handler()

int irq_m_gpio1_1_handler ( void )

#include <mtrap.h>

ID: 19, Handler for GPIO1_1 interrupts.

◆ irq_m_i2c0_handler()

int irq_m_i2c0_handler ( void )

#include <mtrap.h>

ID: 11, Handler for I2C0 interrupts.

◆ irq_m_i2c1_handler()

int irq_m_i2c1_handler ( void )

#include <mtrap.h>

ID: 12, Handler for I2C1 interrupts.

◆ irq_m_i2c2_handler()

int irq_m_i2c2_handler ( void )

#include <mtrap.h>

ID: 13, Handler for I2C2 interrupts.

◆ irq_m_i2c3_handler()

int irq_m_i2c3_handler ( void )

#include <mtrap.h>

ID: 14, Handler for I2C3 interrupts.

◆ irq_m_i2c4_handler()

int irq_m_i2c4_handler ( void )

#include <mtrap.h>

ID: 15, Handler for I2C4 interrupts.

◆ irq_m_invalid_handler()

int irq_m_invalid_handler ( void )

#include <mtrap.h>

ID: 0, Handler for invalid/unassigned interrupts.

◆ irq_m_l2Cache_handler()

int irq_m_l2Cache_handler ( void )

#include <mtrap.h>

ID: 31, Handler for L2 Cache Control interrupts.

◆ irq_m_spi0_handler()

int irq_m_spi0_handler ( void )

#include <mtrap.h>

ID: 6, Handler for SPI0 interrupts.

◆ irq_m_spi1_handler()

int irq_m_spi1_handler ( void )

#include <mtrap.h>

ID: 7, Handler for SPI1 interrupts.

◆ irq_m_spi2_handler()

int irq_m_spi2_handler ( void )

#include <mtrap.h>

ID: 8, Handler for SPI2 interrupts.

◆ irq_m_uart0_handler()

int irq_m_uart0_handler ( void )

#include <mtrap.h>

ID: 1, Handler for UART0 interrupts.

◆ irq_m_uart1_handler()

int irq_m_uart1_handler ( void )

#include <mtrap.h>

ID: 2, Handler for UART1 interrupts.

◆ irq_m_uart2_handler()

int irq_m_uart2_handler ( void )

#include <mtrap.h>

ID: 3, Handler for UART2 interrupts.

◆ irq_m_user_a_handler()

int irq_m_user_a_handler ( void )

#include <mtrap.h>

ID: 32, Handler for User-defined Interrupt A.

◆ irq_m_user_b_handler()

int irq_m_user_b_handler ( void )

#include <mtrap.h>

ID: 33, Handler for User-defined Interrupt B.

◆ irq_m_user_c_handler()

int irq_m_user_c_handler ( void )

#include <mtrap.h>

ID: 34, Handler for User-defined Interrupt C.

◆ irq_m_user_d_handler()

int irq_m_user_d_handler ( void )

#include <mtrap.h>

ID: 35, Handler for User-defined Interrupt D.

◆ irq_m_user_e_handler()

int irq_m_user_e_handler ( void )

#include <mtrap.h>

ID: 36, Handler for User-defined Interrupt E.

◆ irq_m_user_f_handler()

int irq_m_user_f_handler ( void )

#include <mtrap.h>

ID: 37, Handler for User-defined Interrupt F.

◆ irq_m_user_g_handler()

int irq_m_user_g_handler ( void )

#include <mtrap.h>

ID: 38, Handler for User-defined Interrupt G.

◆ irq_m_user_h_handler()

int irq_m_user_h_handler ( void )

#include <mtrap.h>

ID: 39, Handler for User-defined Interrupt H.

◆ irq_m_userTimer0_handler()

int irq_m_userTimer0_handler ( void )

#include <mtrap.h>

ID: 21, Handler for User Timer 0 interrupts.

◆ irq_m_userTimer1_handler()

int irq_m_userTimer1_handler ( void )

#include <mtrap.h>

ID: 22, Handler for User Timer 1 interrupts.

◆ irq_m_userTimer2_handler()

int irq_m_userTimer2_handler ( void )

#include <mtrap.h>

ID: 23, Handler for User Timer 2 interrupts.

◆ irq_m_watchDog0_handler()

int irq_m_watchDog0_handler ( void )

#include <mtrap.h>

ID: 26, Handler for WatchDog Timer interrupts.

◆ trap()

void trap ( void )

#include <mtrap.h>

Main C Trap Dispatcher.

Called by trap_entry after context save. It reads mcause to determine if the event was an Interrupt (Async) or Exception (Sync).

  • Interrupt: Calls irq_handle* functions.
  • Exception: Calls crash().

Definition at line 304 of file mtrap.c.

◆ trap_entry()

void trap_entry ( void )

#include <mtrap.h>

The Main Trap Entry Point (Naked).

This function is the hardware vector target (written to mtvec).

Note
It performs the following:
  • Allocates stack space.
  • Saves all CPU registers (Context Save).
  • Calls trap() (The C dispatcher).
  • Restores all CPU registers (Context Restore).
  • Executes mret (Return from Machine Mode).
Declared naked because it contains pure assembly and must not have a compiler-generated prologue/epilogue.

Definition at line 129 of file mtrap.c.