From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hugo Tyson To: ecos-discuss@sources.redhat.com Subject: Re: [ECOS] cyg_interrupt_set_vsr and ARM AEB-1 Date: Wed, 05 Sep 2001 00:10:00 -0000 Message-ID: References: <002f01bfca75$7f9ddde0$ef0fa8c0@sslinc.com> X-SW-Source: 2001-09/msg00079.html Message-ID: <20010905001000.ZYgE-eA9Mi9hJ0t8NB2vMYCBfoNAxr89IuTyJbo2APs@z> "Ivan Griffin" writes: > I'm trying to do the following in cyg_prestart() to hook the IRQ and FIQ > interrupts on the ARM AEB-7. Can anyone tell me why the following code > doesn't appear to work? > > #define ARM_IRQ_INTR 0x18 > #define ARM_FIQ_INTR 0x1c > > extern void IRQ_Veneer(void); > extern void FIQ_Handler(void); > > void cyg_prestart(void) > { > cyg_interrupt_disable(); > cyg_interrupt_set_vsr(ARM_IRQ_INTR, (cyg_VSR_t*)IRQ_Veneer); > cyg_interrupt_set_vsr(ARM_FIQ_INTR, (cyg_VSR_t*)FIQ_Handler); > cyg_interrupt_enable(); > } You should use these constants (from hal_intr.h) as the argument. #define CYGNUM_HAL_VECTOR_IRQ 6 #define CYGNUM_HAL_VECTOR_FIQ 7 You are hitting trampoline addresses that are off the end of the table, and no, sorry, it doesn't have any range checking ;-( Aha, BUT it does have asserts on the vector range: a motto for life ;-) "if in doubt, compile with asserts enabled" - I infer that you ain't or you would have seen an assert fail. Just in case: if those really are void...(void) C routines, it'll all go horribly wrong. If you're using extern void FOO(void); just to get hold of a external address in C, and they're proper interrupt handlers writ in asm, you'll be OK. - Huge