// See LICENSE for license details. #ifndef _ENV_PHYSICAL_SINGLE_CORE_TIMER_H #define _ENV_PHYSICAL_SINGLE_CORE_TIMER_H #include "../p/riscv_test.h" #define TIMER_INTERVAL 2 #undef EXTRA_INIT_TIMER #define EXTRA_INIT_TIMER \ li a0, MIP_MTIP; \ csrs mie, a0; \ csrr a0, mtime; \ addi a0, a0, TIMER_INTERVAL; \ csrw mtimecmp, a0; \ #if SSTATUS_XS != 0x18000 # error #endif #define XS_SHIFT 15 #undef INTERRUPT_HANDLER #define INTERRUPT_HANDLER \ slli t5, t5, 1; \ srli t5, t5, 1; \ add t5, t5, -IRQ_M_TIMER; \ bnez t5, other_exception; /* other interrups shouldn't happen */\ csrr t5, mtime; \ addi t5, t5, TIMER_INTERVAL; \ csrw mtimecmp, t5; \ mret; \ //----------------------------------------------------------------------- // Data Section Macro //----------------------------------------------------------------------- #undef EXTRA_DATA #define EXTRA_DATA \ .align 3; \ regspill: \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ .dword 0xdeadbeefcafebabe; \ evac: \ .skip 32768; \ #endif