need help on LPC2378 interrupt routines
Discussion in "ARM Development" started by bonois_dailleurs Aug 22, 2010.
Sun Aug 22 2010, 06:26 am
hi
i'm performing programs for lpc2378 with arm7TDMI , and i'm using timer0 interrupt
my IDE is keil microvision4
here is my code
#include <LPC23xx.H>
#include <stdio.h>
void isr_T0()__attribute__((interrupt("irq")))
{
FIO2SET |= 0x3;
VICVectAddr0 = 0 ;
T0IR = 0x1 ;
}
void init_T0()
{
T0TCR = 0;
T0MR0 = 1500 ;
T0MCR = 0x3 ;
FIO2DIR = 0x3 ;
FIO2MASK = 0xFF ;
VICIntEnable = 0x00000010 ;
VICVectAddr4 = (int)isr_T0 ;
}
void main()
{
init_T0() ;
T0TCR = 0x1 ;
while(1) {}
}
as you can notice i'm trying to set P2.0 and P2.1 , thing that never happens while simulating
i don't know anymore about this trouble , which makes me mad because it does'nt let me step foreward
if someone knows anymore about the probleme , please answer me
i'm performing programs for lpc2378 with arm7TDMI , and i'm using timer0 interrupt
my IDE is keil microvision4
here is my code
#include <LPC23xx.H>
#include <stdio.h>
void isr_T0()__attribute__((interrupt("irq")))
{
FIO2SET |= 0x3;
VICVectAddr0 = 0 ;
T0IR = 0x1 ;
}
void init_T0()
{
T0TCR = 0;
T0MR0 = 1500 ;
T0MCR = 0x3 ;
FIO2DIR = 0x3 ;
FIO2MASK = 0xFF ;
VICIntEnable = 0x00000010 ;
VICVectAddr4 = (int)isr_T0 ;
}
void main()
{
init_T0() ;
T0TCR = 0x1 ;
while(1) {}
}
as you can notice i'm trying to set P2.0 and P2.1 , thing that never happens while simulating
i don't know anymore about this trouble , which makes me mad because it does'nt let me step foreward
if someone knows anymore about the probleme , please answer me
Mon Aug 23 2010, 05:06 pm
keil follows a different coding style than ARM-GCC
so you have to write
void isr_T0()__attribute__((interrupt("irq")))
as
void isr_T0() __irq
and try again. i doubt why you did not get any error when building.
so you have to write
void isr_T0()__attribute__((interrupt("irq")))
as
void isr_T0() __irq
and try again. i doubt why you did not get any error when building.
Wed Aug 25 2010, 02:26 am
i've tried both :
void ir_T0()__irq and void isr_T0__attribute__((interrupt'"irq")))
while debugging i've ckecked up in periphrals the state of all registers ,
for every time , the case (interrupt on MR0) is ticked , and T0IR took OXO1
but the leds 'P2.0 , p2.1' are never set to 1
so i'm asking my self a lot of questions , what am i doing ????
i can't really see a true interrupt , so i can't go foreward !!!
so if you know anymore about my trouble , pleae tell me
thank you in advance
void ir_T0()__irq and void isr_T0__attribute__((interrupt'"irq")))
while debugging i've ckecked up in periphrals the state of all registers ,
for every time , the case (interrupt on MR0) is ticked , and T0IR took OXO1
but the leds 'P2.0 , p2.1' are never set to 1
so i'm asking my self a lot of questions , what am i doing ????
i can't really see a true interrupt , so i can't go foreward !!!
so if you know anymore about my trouble , pleae tell me
thank you in advance
Wed Aug 25 2010, 10:33 pm
well you forgot to configure those pins as o/p
do it by setting direction on FIO2DIR.
FIO2DIR |= 0x03;
do it by setting direction on FIO2DIR.
FIO2DIR |= 0x03;
Thu Aug 26 2010, 03:29 pm
i've already set pins as output by writing : FIO2DIR = 0x3 ; or even
FIO2DIR |= 0x03 ;
still the same trouble !!!
is it because i'm using an evaluation softaware downloaded from KEIL.com ??
other request have you ever written a programme including interrupts in which you saw your routine performing what did you tell it to do ??
if yes , can you give me this exemple ??
and thank you for helping me
FIO2DIR |= 0x03 ;
still the same trouble !!!
is it because i'm using an evaluation softaware downloaded from KEIL.com ??
other request have you ever written a programme including interrupts in which you saw your routine performing what did you tell it to do ??
if yes , can you give me this exemple ??
and thank you for helping me
Thu Aug 26 2010, 11:37 pm
here is a small example for toggling P2.0
Tags LPC23xx timer exampleLPC2378 timer0 code example
#include <LPC23xx.H> #define INT_TMR0 4 void T0ISR() __irq { T0IR = 0x01; if(FIO2PIN & 0x01){ FIO2CLR |= 0x1; } else FIO2SET |= 0x01; VICVectAddr = 0; } static void InitTimer(void){ T0TCR = 0x02; T0MR0 = 0x1000; T0MCR = 0x03; VICVectAddr4 = (unsigned long)T0ISR; VICVectPriority4 = 0; VICIntEnable = 1 << INT_TMR0; T0TCR = 0x01; } int main (){ FIO2DIR = 0x01; InitTimer(); while(1); }
Sat Aug 28 2010, 05:58 am
even in this exemple , it doesn'e enter the isr at all
i've tried to initialise FIO2PIN |= 0x1 but without any success
i've looked into the step by step mode when debugging
may be i could find out what's the matter
and by following the arrow which indicate which part of the program is being executed , i've seen that it didn't move to isr at all so i guessed there is a problem somewhere
here is all suppositions that i've tried :
*)enabling first and then giving the adress to the interrupt vector (VICVectAddr)
*)looping just with the function init_TIMER() , because timer initialisations don't change and all the action is performed by the isr
i mean it's enabled , setting pin , disabled (loop )
*)i've notices that the case of "interrupt on MR0" is always ticked and T0IR always takes one
for conclusion i think that my programme is not correctly built and there is some detail that i can't find out and which making me just turning around
other thing i would like to thank you for helping me !!
of course if you got a solution please tell me
i've tried to initialise FIO2PIN |= 0x1 but without any success
i've looked into the step by step mode when debugging
may be i could find out what's the matter
and by following the arrow which indicate which part of the program is being executed , i've seen that it didn't move to isr at all so i guessed there is a problem somewhere
here is all suppositions that i've tried :
*)enabling first and then giving the adress to the interrupt vector (VICVectAddr)
*)looping just with the function init_TIMER() , because timer initialisations don't change and all the action is performed by the isr
i mean it's enabled , setting pin , disabled (loop )
*)i've notices that the case of "interrupt on MR0" is always ticked and T0IR always takes one
for conclusion i think that my programme is not correctly built and there is some detail that i can't find out and which making me just turning around
other thing i would like to thank you for helping me !!
of course if you got a solution please tell me
Sun Aug 29 2010, 01:29 am
The code i posted is checked and working..
if you are using a simulator you can simply put a breakpoint and see for yourself.
I am really not sure what exactly are you doing when testing the code i provided. Timer is configured for interrupt and reset on match, which is working fine.
if you are using a simulator you can simply put a breakpoint and see for yourself.
I am really not sure what exactly are you doing when testing the code i provided. Timer is configured for interrupt and reset on match, which is working fine.
Sun Aug 29 2010, 04:01 am
which IDE do you use
concerning me i'm using KEIL microvision 4 "evaluation software", downloaded from keil.com
did you try your programme on your software and did it work ??
i have always LINUX ubuntu , and i know that we can work with arm-gcc
but i dont' know if we can simulate to see the result
may be i should use another IDE just to be sure that i'm not loosing my time
thank you in advance
concerning me i'm using KEIL microvision 4 "evaluation software", downloaded from keil.com
did you try your programme on your software and did it work ??
i have always LINUX ubuntu , and i know that we can work with arm-gcc
but i dont' know if we can simulate to see the result
may be i should use another IDE just to be sure that i'm not loosing my time
thank you in advance
Tue Aug 31 2010, 03:00 am
I wrote this code for Keil uVision 4. I am attaching complete project here for your reference. check it.
also adding a screenshot from debug.
also adding a screenshot from debug.
Powered by e107 Forum System