This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Not entering interrupts

Hi,

For reasons I switched from one development program(IDE) to the KEIL IDE. Now I have problems using interrupts. My program don't what to enter the "ADC sample on channel0 is ready" interrupt service routine.

In main.c
/* --------------------------------
Configuration of ADC
-------------------------------- */

ADC_CSR = 0x0140; //0x0140; interrupt for channel 0 enabled
ADC_CPR = 0x0DF; //0x0FFF; geeft een timer van 0.73 Hz
RCCU_BOOTCR = RCCU_BOOTCR | 0x0020; //Turn on clocks to ADC, etc
// Configure IRQ


/* EIC IRQ configuration ADC12_IRQHandler*/
EIC_SIR18 = ((unsigned int)ADC12IRQHandler)<<16 | 1; /*set EIC_SIR18 register for ADC to generate interrupts with priority 1*/

/* Enable irq interrupt channels */

EIC_IER0 = CHANNEL(18);


/* EIC interrupt enable register */
EIC_ICR = EIC_IRQ_ENABLE;

/*the ISR that is never entered*/

#pragma userclass (CODE = IRQ)

// A/D IRQ: Executed when A/D Conversion is done
void ADC12IRQHandler(void)__irq
{
IOPORT2_PD ^= 0xF000; /*for test purposes just blick 4 LED's*/


ADC_CSR &= 0xFFFE; // clear sample ready flag
EIC_IPR0 = CHANNEL(18);
}


#pragma userclass (CODE = default)

/********************************EOF**************/

I checked and the ADC is running, with memry view I see samples in the DATA0 register. Also the sample ready and sample over run flags are activated.

Before I used the following code but this code does not work with my new IDE+compiler:

main.c

/* --------------------------------
Configuration of ADC
-------------------------------- */
PCU_BOOTCR = PCU_BOOTCR | 0x0020; //Turn on clocks to ADC, etc
ADC_CSR = 0x0140; //0x0140; interrupt enabled
ADC_CPR = 0x0FFF; //0x0FFF; geeft een timer van 0.73 Hz



/* EIC IRQ configuration */

EIC_SIR18 = ((unsigned int)ADC_IRQ_isr)<<16 | 1;

/* EIC interrupt enable register */
EIC_ICR = EIC_IRQ_ENABLE;

/* Enable irq interrupt channels */

EIC_IER0 = CHANNEL(18);




/* switch to SYS mode and enabled interrupts */
#define SWITCH_IRQ_TO_SYS asm(" msr CPSR_c,#0x1F \n stmfd sp!,{lr}" )

/* switch back to IRQ mode with IRQ disabled */
#define SWITCH_SYS_TO_IRQ asm (" ldmfd sp!,{lr} \n msr CPSR_c,#0x12|0x80")



/* END USER CODE FUNCTIONS1 */
void T0_EFTI_isr ( void ) __attribute__ ((interrupt ("IRQ")));
void ADC_IRQ_isr ( void ) __attribute__ ((interrupt ("IRQ")));

void ADC_IRQ_isr ( void )
{
SWITCH_IRQ_TO_SYS;

/*60 BEGIN USER CODE ADC_IRQ */


IOPORT2_PD ^= 0xF000; /*for test purposes just blick 4 LED's*/



/* END USER CODE ADC_IRQ */

SWITCH_SYS_TO_IRQ;
// clear IRQ Pending bit
EIC_IPR0 = CHANNEL(18);
}


I tied a lot of things but nothing works, does somebody know what I am doing wrong.

Regards,

Erik Z