NextVOD_Baremetal_Hello/src/stx7105_exc.c

69 lines
1.4 KiB
C
Raw Normal View History

2022-06-26 16:18:19 +00:00
#include "stx7105.h"
2022-08-07 03:35:45 +00:00
#define __WEAK __attribute__((weak))
#define __IRQ __attribute__((interrupt_handler))
#define __WEAK_IRQ __attribute__((weak, interrupt_handler))
2022-06-26 16:18:19 +00:00
typedef enum {
EXP_TYPE_TRAP = 0x160,
} expevt_type_t;
2022-08-07 03:35:45 +00:00
typedef enum {
2022-08-08 01:12:06 +00:00
INT_TYPE_TMU_TNUI0 = 0x400,
INT_TYPE_TMU_TNUI1 = 0x420,
INT_TYPE_TMU_TNUI2 = 0x440,
INT_TYPE_TMU_TICPI2 = 0x460,
2022-08-07 03:35:45 +00:00
} intevt_type_t;
2022-06-26 16:18:19 +00:00
typedef enum {
TRA_TYPE_SYSCALL = 34,
} tra_type_t;
2022-08-08 01:12:06 +00:00
__WEAK int tuni0_handler(void) {
/* Does nothing */
return 0;
2022-06-26 16:18:19 +00:00
}
2022-08-07 03:35:45 +00:00
__WEAK int syscall_handler(uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4) {
2022-06-26 16:18:19 +00:00
return 0;
}
2022-08-07 03:35:45 +00:00
__WEAK int trap_handler(uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4) {
tra_type_t tra = CSR->TRA;
2022-06-26 16:18:19 +00:00
switch (tra) {
case TRA_TYPE_SYSCALL:
return syscall_handler(p1, p2, p3, p4);
break;
default:
break;
}
return 0;
}
2022-08-07 03:35:45 +00:00
__WEAK_IRQ int general_exc_handler(uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4) {
expevt_type_t expevt = CSR->EXPEVT;
2022-06-26 16:18:19 +00:00
switch (expevt) {
case EXP_TYPE_TRAP:
2022-08-08 01:12:06 +00:00
return trap_handler(p1, p2, p3, p4);
2022-06-26 16:18:19 +00:00
break;
default:
break;
}
2022-08-07 03:35:45 +00:00
return 0;
}
__WEAK_IRQ int general_int_handler(void) {
2022-08-08 01:12:06 +00:00
intevt_type_t intevt = CSR->INTEVT;
switch (intevt) {
case INT_TYPE_TMU_TNUI0:
return tuni0_handler();
break;
default:
break;
}
2022-06-26 16:18:19 +00:00
return 0;
}