Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

Re: Interrupt in LPC22XX

2006-05-10 by poland459

Thanks for your time.
1&2]Am not using watchdog timer. And i didnot touched watch dog 
timer.as am learning this LPC, my aim is to send bytes to 
hyperterminal for every 10ms with a 9600 baud rate.
3]I forgot to reset the counter value.Its noted but its not help ful 
in my problem. Thank you
4]I have checked the UART condtions, everything looks fine. Am able 
to receive bytes before the timer is being initialised.

Thanks again.


--- In lpc2000@yahoogroups.com, "Andrew Berney" <amb@...> wrote:
>
> Ok... I spent a little more time and actually read through your code
> properly. I'm not actualy quite sure what you're trying to achieve 
however
> there's a few obvious things.
> 
> 1) are you trying to actually use the watchdog? I can't see any 
reference to
> setting up WDTC or WDMOD so are you sure it's actually switched on?
> 2) if you are actively using it you don't have any form of kick for 
it
> inside your main while loop (one of the reasons I decouple it to a 
timer IRQ
> that acts as an internal system check to look at running statuses).
> 3) Can't remember off the top of my head, but don't you also have 
to reset
> the count for the timer when you initialise it?
> ie:
> 	T0PR  = 0x1;      // set the prescaler to the pclk frequency 
60MHz
> 	T0TCR = 0x2;      // reset the counter to 0
> 	T0MCR = 0x3;      // on match generate an IRQ
> 	T0MR0 = 0x600000; // count 0x600000 hex cycles per IRQ
> 	T0TCR = 0x1;      // enable timer
> 
> 	VICVectCntl0 = 0x24;            // IRQ 4 + Enabled bit
> 	VICVectAddr0 = (unsigned)T0ISR; // address of IRQ handler
> 	VICIntEnable |= 0x10;           // Turn on IRQ 4
> 
> 4) Have you checked the UART parameters to ensure your clock and 
divisors
> etc are giving you the correct baud rate?
> 
> Andy
> 
> 
> -----Original Message-----
> From: lpc2000@yahoogroups.com [mailto:lpc2000@yahoogroups.com]On 
Behalf
> Of poland459
> Sent: 10 May 2006 11:40
> To: lpc2000@yahoogroups.com
> Subject: [lpc2000] Re: Interrupt in LPC22XX
> 
> 
> Thanks for your reply..I have added the asm code and called 
enableIRQ
> after the timer is enabled.. But the program is not jumping to 
ISR...
> 
> I forgot to mention in my first post that, iam using UART0 in 
polling
> mode and TIMER0 in ISR..(ISR is not triggered even if I use only
> TIMER0 in ISR).
> 
> here is the asm code..
> 
> static __inline unsigned long asm_get_cpsr(void) __arm
> {
>    unsigned long retval;
>   __asm { mrs retval, CPSR };
>    return retval;
> }
> 
> static __inline void asm_set_cpsr(unsigned long value)  __arm{
>   value = value;              // avoid warning: unused parameter
>   __asm { msr CPSR_c, R0 };   // value passed in R0
> }
> 
> unsigned long enableIRQ(void)
> {
>    unsigned long _cpsr;
> 
>    _cpsr = asm_get_cpsr();
>    asm_set_cpsr(_cpsr & ~IRQ_MASK);
>    return _cpsr;
> }
> 
> Thank you.
> 
> --- In lpc2000@yahoogroups.com, "fordp2002" <SimonEllwood@> wrote:
> 
> > I got it from the WinARM site a good place for examples.
> >
> > You may have other problems too, I did not read your code in 
detail.
> >
> > Let us know how you get on ;)
> >
> > FordP
> >
> >
> > Good
> > --- In lpc2000@yahoogroups.com, "poland459" <poland459@> wrote:
> > >
> > > Hi am new to this forum.I am using "free" KEIL evalution 
software
> as
> > > my IDE to work on LPCE2214 OLIMEX board. Am able to work on 
TIMER
> and
> > > serial port in "polling" mode. But when I enable ISR functions
> using
> > > VIC,my program in not jumping to ISR.but in debug mode i could
> see
> > > the jump to ISR. also I have DefaultISR in my code.here am
> attaching
> > > my code with this mail.
> > > // This program is created for LPC-E2214 board
> > > #include "lpc22xx.h"
> > >
> > > #define OSCILLATOR_CLOCK_FREQUENCY 14745600 //in MHz
> > > #define PLOCK 0x400 //in MHz
> > >
> > >
> > > void Initialize(void);
> > > void feed(void);
> > > void UART0Initialize(unsigned int baud);
> > > void UART0WriteChar(unsigned char ch0);
> > > unsigned char UART0ReadChar(void);
> > > unsigned char UART0ReadChar_nostop(void);
> > > unsigned int processorClockFrequency(void);
> > > unsigned int peripheralClockFrequency(void);
> > >
> > > void tc0(void)__irq;
> > > static void DefDummyInterrupt(void)__irq;
> > >
> > > void init_timer(void);
> > > void InitVIC(void);
> > >
> > > long volatile timeval;
> > >
> > > void wait (void) /* wait function */
> > > {
> > > unsigned long i;
> > > i = timeval;
> > > while ((i + 10) != timeval); /* wait 100ms */
> > > }
> > >
> > >
> > >
> > > int main()
> > > {
> > > /**** VARIABLES ****/
> > > unsigned char ch0 = 0x0;
> > > unsigned char ch1 = 0x0;
> > > long i=0;
> > >
> > > /**** INITIALIZATION ****/
> > > // Frequency initialization
> > > Initialize();
> > > // UART initialization
> > > UART0Initialize(9600);
> > >
> > > init_timer();
> > > InitVIC();
> > >
> > >
> > > while(1)
> > > {
> > >
> > > UART0WriteChar('3');
> > > wait();
> > >
> > > UART0WriteChar('2');
> > > wait();
> > > }
> > >
> > > }
> > >
> > >
> > > void Initialize(void)
> > > {
> > >
> > > // Setting Multiplier and Divider values
> > > PLLCFG=0x23;
> > > feed();
> > >
> > > // Enabling the PLL */
> > > PLLCON=0x1;
> > > feed();
> > >
> > > // Wait for the PLL to lock to set frequency
> > > while(!(PLLSTAT & PLOCK)) ;
> > >
> > > // Connect the PLL as the clock source
> > > PLLCON=0x3;
> > > feed();
> > >
> > > // Enabling MAM and setting number of clocks used for Flash
> memory
> > > fetch (4 cclks in this case)
> > > MAMCR=0x2;
> > > MAMTIM=0x4;
> > >
> > > // Setting peripheral Clock (pclk) to System Clock (cclk)
> > > VPBDIV=0x1;
> > >
> > > }
> > >
> > >
> > > void feed(void)
> > > {
> > > PLLFEED=0xAA;
> > > PLLFEED=0x55;
> > > }
> > >
> > > /* Setup the Timer Counter 0 Interrupt */
> > > void init_timer (void) {
> > > T0MR0 = 149999; // 10mSec = 150000-1 counts
> > > T0MCR = 3; // Interrupt and Reset on MR0
> > > T0TCR = 1; // Timer0 Enable
> > > VICVectAddr0 = (unsigned long)tc0; // set interrupt vector in 0
> > > VICVectCntl0 = 0x20 | 4; // use it for Timer 0 Interrupt
> > > VICIntEnable = 0x00000010; // Enable Timer0 Interrupt // Timer0
> Enable
> > > }
> > >
> > > /* Timer0 Compare-Match Interrupt Handler (ISR) */
> > > /* Timer Counter 0 Interrupt executes each 10ms @ 60 MHz CPU
> Clock */
> > > /* Timer Counter 0 Interrupt executes each 10ms @ 60 MHz CPU
> Clock */
> > > void tc0 (void) __irq
> > > {
> > > ++timeval;
> > > T0IR = 1; // Clear interrupt flag
> > > VICVectAddr = 0; // Acknowledge Interrupt
> > > }
> > > void DefDummyInterrupt(void)__irq
> > > {
> > > ;
> > > }
> > > void InitVIC()
> > > {
> > > VICDefVectAddr = (unsigned long)DefDummyInterrupt;
> > > }
> > >
> > >
> > > /**** UART0 ****/
> > > void UART0Initialize(unsigned int baud)
> > > {
> > > unsigned int divisor = peripheralClockFrequency() / (16 * baud);
> > >
> > > U0LCR = 0x83;
> > >
> > >
> > > //devisor
> > > U0DLL = divisor & 0xFF;
> > > U0DLM = (divisor >> 8) & 0xFF;
> > > U0LCR &= ~0x80;
> > >
> > > //set functionalite to pins: port0.0 -> TX0, port0.1 -> RXD0
> > > PINSEL0 = PINSEL0 & ~0xF | 0x5;
> > > }
> > >
> > > void UART0WriteChar(unsigned char ch0)
> > > {
> > > //when U0LSR_bit.THRE is 0 - U0THR contains valid data.
> > > while ((U0LSR && 0x20) == 0);
> > > U0THR = ch0;
> > > }
> > >
> > > unsigned char UART0ReadChar(void)
> > > {
> > > //when U0LSR_bit.DR is 1 - U0RBR contains valid data
> > > while ((U0LSR && 0x01) == 0);
> > > return U0RBR;
> > > }
> > > unsigned int processorClockFrequency(void)
> > > {
> > > //return real processor clock speed
> > > return OSCILLATOR_CLOCK_FREQUENCY * (PLLCON & 1 ? (PLLCFG & 0xF)
> +
> > > 1 : 1);
> > > }
> > >
> > > unsigned int peripheralClockFrequency(void)
> > > {
> > > //VPBDIV - determines the relationship between the processor
> clock
> > > (cclk)
> > > //and the clock used by peripheral devices (pclk).
> > > unsigned int divider;
> > > switch (VPBDIV & 3)
> > > {
> > > case 0: divider = 4; break;
> > > case 1: divider = 1; break;
> > > case 2: divider = 2; break;
> > > }
> > > return processorClockFrequency() / divider;
> > > }
> > >
> > > Please look into this and It would be a great help for me as i
> have
> > > been trying for it from past 2 weeks.
> > > I think, abviously iam missing some things. I did not changed 
any
> > > things in startup.s file.I will post the start up code if any
> body
> > > wanted to look in
> > > please guide me.appreciate your help.
> > >
> > > Thanks
> > >
> >
> 
> 
> 
> 
> 
> 
> 
> 
> Yahoo! Groups Links
>

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.