/*------------------------------------------------------------------------------ * Trap/Interrupt handler */ uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) { if (0) { // External Machine-Level Interrupt from PLIC } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) { handle_m_ext_interrupt(); } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)) { handle_m_timer_interrupt(); } else { write(1, "trap\n", 5); _exit(1 + mcause); } return epc; }
uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) { if (0){ #ifdef USE_PLIC // External Machine-Level interrupt from PLIC } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) { handle_m_ext_interrupt(); #endif #ifdef USE_M_TIME // External Machine-Level interrupt from PLIC } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)){ handle_m_time_interrupt(); #endif } else { rt_kprintf("Unhandled Trap.\n"); } return epc; }