feat: add lab-rv32i-c-interrupts card

This commit is contained in:
user
2026-07-21 19:14:20 +02:00
commit 8820c2a22e
23 changed files with 4433 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
#include "c10_common.h"
volatile uint32_t g_task01_count;
volatile uint32_t g_task01_mcause;
volatile uint32_t g_task01_mepc;
volatile uint32_t g_task01_resume_pc;
volatile uint32_t g_task01_resumed;
volatile uint32_t g_task01_pass;
void __attribute__((interrupt("machine"))) handle_exception(void)
{
const uint32_t cause = read_csr(mcause);
const uint32_t pc = read_csr(mepc);
g_task01_count++;
g_task01_mcause = cause;
g_task01_mepc = pc;
g_task01_resume_pc = pc + 4u;
write_csr(mepc, g_task01_resume_pc);
}
int main(void)
{
c10_disable_interrupts();
__asm__ volatile("ecall");
g_task01_resumed = 1u;
g_task01_pass = g_task01_count == 1u &&
g_task01_mcause == MACHINE_ECALL_CAUSE &&
g_task01_resume_pc - g_task01_mepc == 4u &&
g_task01_resumed == 1u;
c10_report("T01 count=", g_task01_count);
c10_report("T01 mcause=", g_task01_mcause);
c10_report("T01 mepc=", g_task01_mepc);
c10_report("T01 resume_pc=", g_task01_resume_pc);
c10_report("T01 delta=", g_task01_resume_pc - g_task01_mepc);
c10_report("T01 resumed=", g_task01_resumed);
c10_report("T01 pass=", g_task01_pass);
return g_task01_pass ? 0 : 1;
}