M68K C Interrupt Handler
Holland, Alexander MHX
HollaA@HPD.Abbott.com
Mon Jan 15 18:20:00 GMT 2001
Hi,
Does anyone know how to write m68k interrupt handlers in C? My (possibly
incorrect/incomplete) understanding of the issues are that:
(1) Normal function calls generated by the compiler will not work as
interrupt functions,
(2) I need to save all registers,
(3) I can now execute my handler specific C code including any HW specific
start-of-interrupt and end-of-interrupt processing,
(4) I need to restore registers,
(5) I need to do a return from interrupt (rte).
In the GCC manual I saw special "function attributes" to generate an
interrupt function for certain processors, but none for 68k. I tried using
them anyway, but they did not work.
Next, I tried to avoid the standard function call stuff created by the
compiler, I tried entering the label "IrqHandler" from the code below in
my C interrupt vector table instead of the address of the function
DummyIrqHandler(). Every syntax that I tried for this would not compile or
link.
void DummyIrqHandler(void)
{
IrqHandler:
asm("movem.l %a0-%a6/%d0-%d7,-(%sp)") ; // Save registers.
// ... Rest of C code here and end of interrupt processing.
asm("movem.l (%sp)+,%a0-%a6/%d0-%d7"); // Restore
registers.
asm("rte"); // Return from
exception.
}
Any help is much appreciated,
Alex
------
Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sourceware.cygnus.com
More information about the crossgcc
mailing list