RV32 SoC DS UG
High-Perf RV32 SoC DS UG
RV64 SoC DS UG API and Examples
Embedded IDE UG
Loading...
Searching...
No Matches
mtrap.h
Go to the documentation of this file.
1
2// Copyright (C) 2013-2026 Efinix Inc. All rights reserved.
3// Full license header bsp/efinix/EfxSapphireSocRV64/include/LICENSE.MD
5
6#ifndef MTRAP_H
7#define MTRAP_H
8
20
21#include <stdio.h>
22#include "debug.h"
23#include "plic/plic.h"
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
53
54/* ========================================================================== */
55/* SUB-GROUP 1: ASSEMBLY HELPERS (Context Saving) */
56/* ========================================================================== */
57
66 #if __riscv_xlen == 64
67 #define STORE "sd"
68 #define LOAD "ld"
69 #define GPR_SIZE "8"
70 #define STACK_SIZE "128"
71 #else
72 #define STORE "sw"
73 #define LOAD "lw"
74 #define GPR_SIZE "4"
75 #define STACK_SIZE "64"
76 #endif
77
78 #ifdef __riscv_flen // FPU is present
79 #undef STACK_SIZE
80 #if __riscv_flen == 64 // RV_DF extension
81 #define FPR_SIZE "8"
82 #define FSTORE "fsd"
83 #define FLOAD "fld"
84 #if __riscv_xlen == 64
85 // RV64DF: 128(GPR) + 160(FPR) + 8(FCSR)
86 #define STACK_SIZE "304"
87 #else
88 // RV32DF: 64(GPR) + 160(FPR) + 4(FCSR)
89 #define STACK_SIZE "240"
90 #endif
91 #else // Single Precision FPU
92 #define FPR_SIZE "4"
93 #define FSTORE "fsw"
94 #define FLOAD "flw"
95 #if __riscv_xlen == 64
96 // RV64F: 128(GPR) + 80(FPR) + 8(FCSR)
97 #define STACK_SIZE "224"
98 #else
99 // RV32F: 64(GPR) + 80(FPR) + 4(FCSR)
100 #define STACK_SIZE "160"
101 #endif
102 #endif
103 #endif
105
106
107/* ========================================================================== */
108/* SUB-GROUP: FUNCTIONS */
109/* ========================================================================== */
110
117
136 void trap_entry(void) __attribute__((naked, aligned(4)));
138
151 int irq_handleDefault(void);
159 int irq_handleSoft(void) __attribute__((weak));
167 int irq_handleTimer(void) __attribute__((weak));
173 void irq_handleExt(void) __attribute__((weak));
175
185
307
323 void trap(void) __attribute__((weak));
324
333 void crash(void) __attribute__((weak));
334
336 // End of MTRAP_Funcs group
338#ifdef __cplusplus
339}
340#endif
341 // End of MAIN MTRAP Group
343
344#endif // MTRAP_H
Debug, logging, and assertion API.
int irq_m_gpio1_1_handler(void)
ID: 19, Handler for GPIO1_1 interrupts.
int irq_handleDefault(void)
Default Fallback Interrupt Handler.
Definition mtrap.c:27
int irq_m_user_h_handler(void)
ID: 39, Handler for User-defined Interrupt H.
void irq_handleExt(void)
External Interrupt Handler (PLIC).
Definition mtrap.c:242
int irq_m_user_c_handler(void)
ID: 34, Handler for User-defined Interrupt C.
int irq_m_gpio0_0_handler(void)
ID: 16, Handler for GPIO0_0 interrupts.
int irq_m_spi1_handler(void)
ID: 7, Handler for SPI1 interrupts.
int irq_m_user_f_handler(void)
ID: 37, Handler for User-defined Interrupt F.
int irq_m_gpio0_1_handler(void)
ID: 17, Handler for GPIO0_1 interrupts.
int irq_m_userTimer2_handler(void)
ID: 23, Handler for User Timer 2 interrupts.
void trap_entry(void)
The Main Trap Entry Point (Naked).
Definition mtrap.c:129
int irq_m_uart1_handler(void)
ID: 2, Handler for UART1 interrupts.
int irq_m_i2c3_handler(void)
ID: 14, Handler for I2C3 interrupts.
int irq_m_invalid_handler(void)
ID: 0, Handler for invalid/unassigned interrupts.
int irq_m_l2Cache_handler(void)
ID: 31, Handler for L2 Cache Control interrupts.
int irq_m_user_e_handler(void)
ID: 36, Handler for User-defined Interrupt E.
int irq_m_i2c0_handler(void)
ID: 11, Handler for I2C0 interrupts.
int irq_m_userTimer1_handler(void)
ID: 22, Handler for User Timer 1 interrupts.
int irq_m_user_g_handler(void)
ID: 38, Handler for User-defined Interrupt G.
int irq_m_userTimer0_handler(void)
ID: 21, Handler for User Timer 0 interrupts.
int irq_m_i2c1_handler(void)
ID: 12, Handler for I2C1 interrupts.
void crash(void)
Fatal Exception Handler.
Definition mtrap.c:284
int irq_m_uart0_handler(void)
ID: 1, Handler for UART0 interrupts.
int irq_m_i2c2_handler(void)
ID: 13, Handler for I2C2 interrupts.
int irq_m_axiA_handler(void)
ID: 30, Handler for AXI A interrupts.
int irq_handleSoft(void)
Handlers for CPU interrupts (Software).
int irq_m_gpio1_0_handler(void)
ID: 18, Handler for GPIO1_0 interrupts.
int irq_m_watchDog0_handler(void)
ID: 26, Handler for WatchDog Timer interrupts.
int irq_m_user_b_handler(void)
ID: 33, Handler for User-defined Interrupt B.
void trap(void)
Main C Trap Dispatcher.
Definition mtrap.c:304
int irq_m_spi0_handler(void)
ID: 6, Handler for SPI0 interrupts.
int irq_m_uart2_handler(void)
ID: 3, Handler for UART2 interrupts.
int irq_handleTimer(void)
Handlers for CPU interrupts (Timer).
int irq_m_spi2_handler(void)
ID: 8, Handler for SPI2 interrupts.
int irq_m_user_d_handler(void)
ID: 35, Handler for User-defined Interrupt D.
int irq_m_i2c4_handler(void)
ID: 15, Handler for I2C4 interrupts.
int irq_m_user_a_handler(void)
ID: 32, Handler for User-defined Interrupt A.
PLIC driver API definitions.