Help with isr

adityagandhi86 wrote on Friday, 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

davedoors wrote on Saturday, December 19, 2009:

Sorry but the code is too jumbled up to read. If you post it again start each line with a tab.