Using ISR-wrapping with PIO

nobody wrote on Tuesday, May 10, 2005:


I am having problems to get the ISR-handler for PIO to work . The interrupt is called properly but when processor is about to leave the ISR I get a data abort when portRESTORE_CONTEXT is called. I can’t figure out why!! ???

My code follows:

__arm void pio_ISR( void )
  portCHAR cContextSwitchRequired;

        int dummy;
        dummy = AT91C_BASE_PIOA->PIO_ISR;
        dummy=dummy; //Suppress compiler warning
        //* Read the output state
        if ( (AT91F_PIO_GetInput(AT91C_BASE_PIOA) &  INPUT_SERVO2_CAP) ==  INPUT_SERVO2_CAP); //Don’t do anything, rising edge
        else  //Falling edge -> capture value in
          measure.duty_channel_2 = TimerBaseCPWM->TC_CV;

        cContextSwitchRequired = pdFALSE;

        portEND_SWITCHING_ISR( ( cContextSwitchRequired ) );

        /* End the interrupt in the AIC. */
        AT91C_BASE_AIC->AIC_EOICR = 0;

The interrupt is configured according to following lines:

       AT91F_AIC_ConfigureIt (AT91C_BASE_AIC, AT91C_ID_PIOA, PIO_INTERRUPT_LEVEL, AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, ( void (*)( void ) ) pio_ISREntry);
       AT91F_PIO_InterruptEnable(AT91C_BASE_PIOA, INPUT_SERVO2_CAP);
       //* set the interrupt by software
       AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_PIOA);

My wrapping file looks like this:


        EXTERN pio_ISR
        PUBLIC pio_ISREntry

; Wrapper for the USB interrupt service routine.  This can cause a
; context switch so requires an assembly wrapper.

; Defines the portSAVE_CONTEXT and portRESTORE_CONTEXT macros.
#include "ISR_Support.h"


    portSAVE_CONTEXT            ; Save the context of the current task.

    bl    pio_ISR                ; Call the ISR routine.

    portRESTORE_CONTEXT            ; Restore the context of the current task -
                                ; which may be different to the task that
                                ; was interrupted.


Thanks in advance!

rtel wrote on Wednesday, May 11, 2005:

I replied to your other post.