Help with isr

Posted by Aditya Gandhi on December 18, 2009
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("\n\r int1");
i =1;
AT91C_BASE_AIC->AIC_EOICR = 0;
}
void ISR_Button_hand2( void )
{
//PIO_DisableIt(&pinPB1);
printf("\n\r int2");
i =2;
AT91C_BASE_AIC->AIC_EOICR = 0;
}
void ISR_Button_hand3( void )
{
//PIO_DisableIt(&pinPB1);
printf("\n\r 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("\n\rconfig done");
printf("\n\rinterrupt init 1 done");
PIO_EnableIt(&pinPB1);
printf("\n\rinterrupt init 2 done");
PIO_EnableIt(&pinPB2);
printf("\n\rinterrupt init 3 done");
PIO_EnableIt(&pinPB3);
printf("\n\rinterrupt init 4 done");

LcdInit();


----------



need help

RE: Help with isr

Posted by Dave on December 19, 2009
Sorry but the code is too jumbled up to read. If you post it again start each line with a tab.