When I configure port b buttons as isr and give their vector as a function , on the interrupt the processor seems to reset , I guess the vector adderess is wrong.
My processor is at91sam7x256
**This is my button_isr.c file**
extern int i;
//////////////////////////////////
void ISR_Button_hand1( void )
{
//PIO_DisableIt(&pinPB1);
printf(”nr int1″);
i =1;
AT91C_BASE_AIC->AIC_EOICR = 0;
}
void ISR_Button_hand2( void )
{
//PIO_DisableIt(&pinPB1);
printf(”nr int2″);
i =2;
AT91C_BASE_AIC->AIC_EOICR = 0;
}
void ISR_Button_hand3( void )
{
//PIO_DisableIt(&pinPB1);
printf(”nr int3″);
i =3;
AT91C_BASE_AIC->AIC_EOICR = 0;
}
void ISR_Button1(void)
{
portSAVE_CONTEXT();
__asm volatile (”bl ISR_Button_hand1″);
portRESTORE_CONTEXT();
//return;
}
void ISR_Button2(void)
{
portSAVE_CONTEXT();
__asm volatile (”bl ISR_Button_hand2″);
portRESTORE_CONTEXT();
//return;
}
void ISR_Button3(void)
{
portSAVE_CONTEXT();
__asm volatile (”bl ISR_Button_hand3″);
portRESTORE_CONTEXT();
//return;
}
**This is my button_isr.h file**
#ifndef HMI_ISR_H_
#define HMI_ISR_H_
#endif /* HMI_ISR_H_ */
void ISR_Button1( void ) __attribute__((naked));
void ISR_Button2( void ) __attribute__((naked));
void ISR_Button3( void ) __attribute__((naked));
void ISR_Button_hand1( void ) __attribute__((noinline));
void ISR_Button_hand2( void ) __attribute__((noinline));
void ISR_Button_hand3( void ) __attribute__((noinline));
**This is My init hardware the first function that I call to initialise my buttons using standard atmel library**
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA;
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOB;
//AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_EMAC;
PIO_Configure(&pinPB1, 1);
PIO_Configure(&pinPB2, 1);
PIO_Configure(&pinPB3, 1);
PIO_InitializeInterrupts((AT91C_AIC_PRIOR_LOWEST | AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL));
PIO_ConfigureIt(&pinPB1, ( void (*)( void ) )ISR_Button1);
PIO_ConfigureIt(&pinPB2, ( void (*)( void ) ) ISR_Button2);
PIO_ConfigureIt(&pinPB3, (void (*)(const Pin *)) ISR_Button3);
printf(”nrconfig done”);
printf(”nrinterrupt init 1 done”);
PIO_EnableIt(&pinPB1);
printf(”nrinterrupt init 2 done”);
PIO_EnableIt(&pinPB2);
printf(”nrinterrupt init 3 done”);
PIO_EnableIt(&pinPB3);
printf(”nrinterrupt init 4 done”);
LcdInit();
need help
Help with isr
Help with isr
Sorry but the code is too jumbled up to read. If you post it again start each line with a tab.