interrupt on arm9

Ray xr at trasin.net
Thu Oct 25 12:24:28 UTC 2007


rtems_interrupt_enable(3) will call the bellowing finally

#define _CPU_ISR_Enable( _level )               \
  {                                             \
    asm volatile ("MSR  cpsr, %0 \n"            \
                  : : "r" (_level));            \
  }

That means
cpsr=#3

This not right for ARM. (I think this might be a hidden hazard for BSP.) In fact, the ARM does not have multi-level interrupt.
If you want to handle IRQ5 for at91, you have to do this in the ExecuteITHandler. in at91rm9200/irq/


------------------
Thanks & Best Regards!
Ray
2007-10-25

-------------------------------------------------------------
From: Rochat_Joël
Date: 2007-10-24 22:58:50
To:   rtems-users at rtems.org
CC:
Sub:  interrupt on arm9

>>
>Hello,
>
>I'm relative young in rtems developpment. I'm using a board with an ARM9
>(at91rm9200) cpu on it with csb337 as bsp.
>
>The tools I've test such as event, timers, semaphores are working well. I
>also managed to write some code to 'listen' to
>an interrupt. I write this code manually :
>
>void handlerIRQ (void) __attribute__ ((interrupt ("IRQ"))) ;
>void handlerIRQ (void)
>{
>	doIsr = TRUE ;
>
>	//clear irq
>	AT91C_BASE_AIC->AIC_EOICR = (1 << AT91C_ID_IRQ5) ;
>	AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_IRQ5) ;
>}
>
>void initIRQ ()
>{
>	//Level sensitivity and priority of interrupt
>	AT91C_BASE_AIC->AIC_SMR[AT91C_ID_IRQ5] =
>AT91C_AIC_SRCTYPE_EXT_POSITIVE_EDGE | 1 ;
>
>	//give fonction to call when interrupt comes
>	AT91C_BASE_AIC->AIC_SVR[AT91C_ID_IRQ5] = (unsigned long)handlerIRQ ;
>
>	//enable irq
>	AT91C_BASE_AIC->AIC_IECR = (1 << AT91C_ID_IRQ5) ;
>}
>
>This code works fine. But I try now to use rtems interrupt tools. But I'm a
>littel bit lost with it here is the code i used
>
>//the isr routine
>rtems_isr user_isr(rtems_vector_number vector)
>{
>	gTick = TRUE ;
>}
>
>//the catch methode
>status =  rtems_interrupt_catch(user_isr, ARM_EXCEPTION_IRQ, &old_isr_handler) ;
>
>//then unabled the irq for level 3
>rtems_interrupt_enable(3) ;
>
>When I launch this code on the board it stops one time in the isr routine.
>Do I have to reste the interupt or somthing like that ?
>
>Did someone use the at91rm9200 with interrupt ?
>
>How can I say to RTEMS that I want to listen to IRQ5 for exemple ?
>
>Think you have a nice day.
>
>Joel R.
>_______________________________________________
>rtems-users mailing list
>rtems-users at rtems.com
>http://rtems.rtems.org/mailman/listinfo/rtems-users




More information about the users mailing list