Hi mark,
How can I call C functions from assemler when REG_ABI is enabled? I want to write my own exception processing function but I dont know how to write this small assembler code:
in m5223X:
for (n = 0; n < 256; n++) {
//__VECTOR_RAM[n] = (unsigned long)undef_int; // set undefined interrupt for all interrupts at start
__VECTOR_RAM[n] = (unsigned long)asm_exception_handler;
}
added file m5223X_ext:
#define GET_FORMAT(ESF) ((*((unsigned short *)(ESF)) >> 12) & 0x00FF)
#define GET_VECTOR(ESF) ((*((unsigned short *)(ESF)) >> 2) & 0x00FF)
#define GET_FS(ESF) ( ((*((unsigned short *)(ESF)) & 0x0C00) >> 8) | (*((unsigned short *)(ESF)) & 0x0003) )
#define GET_PC(ESF) *((unsigned long *)(ESF)+1)
void real_exception_handler (unsigned long *esf)
{
unsigned char fmt = GET_FORMAT(esf);
unsigned char vector = GET_VECTOR(esf);
unsigned char fs = GET_FS(esf);
unsigned char epc = GET_PC(esf);
// log this
fnErrorMsg("Exception - FMT: "); fnErrorDec(fmt);
fnErrorMsg(", VECTOR: "); fnErrorDec(vector);
fnErrorMsg(", FS: "); fnErrorDec(fs);
fnErrorMsg(", EPC: "); fnErrorDec(epc);
fnErrorMsg("\n\r");
// test if is critical...
if (isCritical(fmt, vector, fs))
while(1) {}
// else continue with program execution so return from handler...
}
and i dont know write asm_exception_handler in Startup.s
asm_exception_handler:
_asm_exception_handler:
// save registers
// load values from SP
jsr real_exception_handler // call real handler
// restore registers
rte // return from handler
please can you help me with missing code?