|
OK... when I read more carefully the sam7x documentation I found that I've made a bunch of mistakes and now it all looks fine but still not working...
The FreeRTOS team told me that I need to configure the SAM7 interrupt and this is not specific to the FreeRTOS stuff.
And here is my code:
[code] void Handler(void) { unsigned int isr = AT91C_BASE_PIOA->PIO_ISR; if( isr & SW1 ) { // Button AT91F_PIO_SetOutput( AT91C_BASE_PIOB, LED1 ); // turn ON } AT91C_BASE_AIC->AIC_EOICR = 0; // Clear AIC to complete ISR processing }
static void prvSetupHardware( void ) { AT91F_PIO_CfgOutput( AT91C_BASE_PIOB, LED1 ); AT91F_PIO_ClearOutput( AT91C_BASE_PIOB, LED1 ); // turn OFF AT91F_PMC_EnablePeriphClock( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ); AT91F_PMC_EnablePeriphClock( AT91C_BASE_PMC, 1 << AT91C_ID_PIOB ) ; AT91F_PIO_InterruptEnable( AT91C_BASE_PIOA, SW1 ); AT91F_PIO_CfgInput( AT91C_BASE_PIOA, SW1 ); AT91F_PIO_CfgPullup( AT91C_BASE_PIOA, SW1 ); AT91F_PIO_CfgInputFilter( AT91C_BASE_PIOA, SW1 ); AT91F_AIC_ConfigureIt(AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_INTERRUPT_LEVEL, AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE, Handler); AT91F_AIC_EnableIt(AT91C_BASE_PIOA, AT91C_ID_PIOA); } [/code]
Is the interrupt initialization code OK?
|