Estoy desarrollando un proyecto ARM a partir de LPC2138 soc. He escrito un controlador de interrupción IRQ para I2C. Pero no vuelve correctamente. Se llama repetidamente al controlador para una sola interrupción.
He realizado un análisis detallado de depuración de este problema.
En el manual de referencia ARM7TDMI se menciona claramente lo siguiente.
Perocuandodesarméelcódigo,encontréqueelcódigogeneradoporGCCnorestauraelregistrodeCPSR.Tambiénunvalordesconocidoporfin.
HedeclaradoelcontroladorIRQcomoelsiguiente
voidI2C0_IRQ_handler(void)__attribute__((interrupt("IRQ")));
¿Es esto un error en GCC o he hecho algo mal?
Los indicadores del compilador, ensamblador y vinculador que he usado para construir el proyecto son:
CFLAGS := -mcpu=arm7tdmi-s -g3 -Wall -I. -gdwarf-2
AS_FLAGS := -mcpu=arm7tdmi-s -g3 -gdwarf-2
LD_FLAGS := -Wl,-Map,$(TARGET:%.hex=%).map -nostartfiles