We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi everyone,
I've already spent 3 days trying to get a timer1 interrupt on an aduc7020, without any success
Timer1 init:
IRQCLR = GP_TIMER_BIT; T1CLRI = 0x55; // Clear pending interrupts T1LD = (32768/2)-1; // 32768 clock ticks T1CON = BIT9 + BIT7 + BIT6; // Periodic mode, enable timer, 32768Hz source clock IRQEN = GP_TIMER_BIT; // Enable Timer 1 interrupt
in my main loop:
if(IRQSIG & GP_TIMER_BIT) GP0CLR = (1 << 16 << 6); else GP0SET = (1 << 16 << 6);
perfectly works.
i'm using keil compiler, with the default startup code that clears the I & F flags:
; Enter Supervisor Mode and set its Stack Pointer MSR CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit MOV SP, R0 SUB R0, R0, #SVC_Stack_Size ; Enter User Mode and set its Stack Pointer MSR CPSR_c, #Mode_USR IF :DEF:__MICROLIB
my interrupt routine which is never called (led is never set):
void IRQ_Handler(void) __irq { unsigned long IRQSTATUS = 0; IRQSTATUS = IRQSTA; if ((IRQSTATUS & GP_TIMER_BIT) == GP_TIMER_BIT) //Timer 1 interrupt source { T1CLRI = 0x55; } GP0SET = (1 << 16 << 4); //Red on }
and my main code blinking a led
while(1) { GP4CLR = (1 << 16 << 2); for(i = 0; i < 300000; i++) __nop(); if(IRQSIG & GP_TIMER_BIT) GP0CLR = (1 << 16 << 6); else GP0SET = (1 << 16 << 6); GP4SET = (1 << 16 << 2); for(i = 0; i < 300000; i++) __nop(); if(IRQSIG & GP_TIMER_BIT) GP0CLR = (1 << 16 << 6); else GP0SET = (1 << 16 << 6); }
this code works, the led keeps blinking and the other led is set when the irqsig is present. However, the the interrupt setting another led is never launched.
Thanks