Dear All,
I am working my project of led Blinking.The controller used is arm7 LPC2214.Crystal is 11.0592mhz. Which works fine but only one problem is, to make it working i have to touch one of my Oscilloscope probe to crystal of controller.Then it start working.Also works well in keil debugger(internal) and on proteus.So please help me to solve this problem. The source code is as follows,
#include <lpc22xx.h> #include <stdio.h> #define VREF 3 #define Beep 0x00001000 #define LED1 0x00000800 #define LED2 0x00000400 #define LED3 0x00000200 #define LED4 0x00000100 #define CE 0x00000001 #define OE 0x00000002 #define WE 0x08000000 #define low IO0CLR = LED1 ; \ IO0CLR = LED2 ; \ IO0CLR = Beep ; #define hig IO0SET = LED1 ; \ IO0SET = LED2 ; \ IO0SET = Beep ; unsigned int val; unsigned long Fosc = 11059200; unsigned long Fcclk = 0; unsigned long Fcco = 0; unsigned long Fpclk = 0 ; void TargetResetInit(void) { Fcclk = Fosc * 4; Fcco = Fcclk * 4; Fpclk = (Fcclk / 4) * 1 ; MEMMAP = 0x2; //remap PLLCON = 3; if ((Fpclk / (Fcclk / 4)) == 1) VPBDIV = 0x10; else if ((Fpclk / (Fcclk / 4))== 2) VPBDIV = 0x11; else if ((Fpclk / (Fcclk / 4)) == 4) VPBDIV = 1; if ((Fcco / Fcclk) == 2) PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5); else if ((Fcco / Fcclk) == 4) PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5); else if ((Fcco / Fcclk) == 8) PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5); else if ((Fcco / Fcclk) == 16) PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5); PLLFEED = 0xaa; PLLFEED = 0x55; while((PLLSTAT & (1 << 10)) == 0); PLLCON = 3; PLLFEED = 0xaa; PLLFEED = 0x55; MAMCR = 0; if( Fcclk < 20000000) MAMTIM = 1; else if ( Fcclk < 40000000) MAMTIM = 2; else MAMTIM = 3; MAMCR = 2; VICIntEnClr = 0xffffffff; VICVectAddr = 0; VICIntSelect = 0; } void Delay (unsigned long a) { while (--a!=0); } void ledInit(void) { IO2DIR = 0xFFFFFFFF; IO2SET = 0; IO1PIN = 0x00000000; IO1DIR |= CE; IO1DIR |= OE; IODIR1 |= CE; IODIR1 |= OE; IO1SET |= CE; IO1SET |= OE; IO3DIR = 0xFFFFFFFF; IO3SET = WE; IO0DIR = LED1; IO0SET |= LED1; } static void ledOn(int led){ IO0CLR = led; } static void ledOff(int led){ IO0SET = led; } void delay(int d){ for(; d; --d); } int main(void) { ledInit(); TargetResetInit(); ledOn(LED2); ledInit(); while(1) { ledOn(LED1); delay(20000*8); delay(20000*8); delay(20000*8); delay(20000*8); delay(20000*8); ledOff(LED1); delay(20000*8); delay(20000*8); delay(20000*8); delay(20000*8); delay(20000*8); } }
Thanks & regards, Girish