Using ISR-wrapping with PIO
Posted by Nobody/Anonymous on 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 )
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);
//* set the interrupt by software
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_PIOA);
My wrapping file looks like this:
; 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.
portSAVE_CONTEXT; Save the context of the current task.
blpio_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!
RE: Using ISR-wrapping with PIO
Posted by Richard
on May 11, 2005
I replied to your other post.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.