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.
Hello everybody,
I am using Keil microvision IDE (EVALUATION copy) for my project testing. I am burning hex file through flash magic software using ISP mode.
Initially i wrote simple serial port (uart0) example code.Also added few lines to toggle LED connected to pin P1.24.
Now when i compiled code in Microvision V5 (keil MDK), its serial message showing in my PC hyper terminal. Bit LED (related port pin) state not changed to show blinking.
Hence i copy code & compiled in Microvision Keil 4 IDE, But there nither serial messaging nor led blinking happened.
when i retested same in Keil MDK again serail message shows but not LED, why so ?
I tested all parameters well again & again ( FOSC,CCLK,PCLK settings, UART0 & port settings). All are correct.
Anybody has any idea whether my controller is not executing well?
have some found similar issue?
/* Author:- Embedded Laboratory FOSC = 10MHz CCLK = 60MHz PCLK = 15MHz */ #include <LPC213X.H> void initClocks(void); void initGPIO(void); void toggle_led(void); void delay_100ms(unsigned char ii); #define REL_EN (0x01<<22) //p0.22 #define LED1 (0x01<<24) //p1.24 //#define LED2 (0x01<<26) //p1.26 char String[]="Welcome to LPC!!! \n\r\n"; unsigned int delay; /*********************************************/ /**************Function Prototypes************/ void UART0_Init(void); void UART0_Write(unsigned char value); void UART0_Write_Text(unsigned char msg[]); unsigned char UART0_Read(void); /*********************************************/ unsigned char msg[] = "Embedded Laboratory\r\n"; unsigned char echo_test[] = "Echo Test\r\n"; int main() { initClocks(); initGPIO(); UART0_Init(); UART0_Write_Text(msg); UART0_Write_Text(echo_test); while(1) { toggle_led(); UART0_Write(UART0_Read()); } } /****************Function Definition**********/ void initClocks(void) { PLLCON = 0x01; //Enable PLL //PLLCFG = 0x24; //Multiplier and divider setup //12mhz crystal PLLCFG = 0x25; //Multiplier and divider setup //10mhz crystal PLLFEED = 0xAA; //Feed sequence PLLFEED = 0x55; while(!(PLLSTAT & 0x00000400)); //is locked? PLLCON = 0x03; //Connect PLL after PLL is locked PLLFEED = 0xAA; //Feed sequence PLLFEED = 0x55; // VPBDIV = 0x01; // PCLK is same as CCLK i.e.60 MHz VPBDIV = 0x00; // PCLK =15mhz is same as 1/4th of CCLK i.e.60 MHz } /***************UART-0 Functions**************/ void UART0_Init(void) { PINSEL0 = 0x00000005; //P0.0 as TX0 and P0.1 as RX0 U0LCR = 0x83; //Enable access to Divisor Latches //and Set 8 bit Character Length with 1 Stop bit and Parity Disabled //Access to Divisor Latches is Enabled, in order to write Baud Rate Generator Registers //Values to be written in Baud Rate Registers U0DLM and U0LL /* Formula is Baud_Rate = PCLK*MulVal / [(16*(256*U0DLM+U0DLL)*(MulVal + DivAddVal))] Example:- MulVal = 1; DivAddVal = 0; Baud_Rate = 9600; PCLK = 15MHz U0DLM = 0; Hence, U0DLL = 15000000/(9600*16) = 97.65625 = 98 U0DLL = 98 = 0x62 */ U0DLM = 0x00; U0DLL = 0x62; //Baud Rate of 9600 U0LCR = 0x03; //Disable Access to Divisor Latches } void toggle_led(void) { IOCLR1 = LED1; //IOCLR1 = LED2; delay_100ms(10); IOSET1 = LED1; //IOSET1 = LED2; delay_100ms(10); } //delay of 100 msec void delay_100ms(unsigned char ii) { unsigned i,j; i = 648117; j = i * ii; for(i=0;i<=j;i++) { ii = 0; } } void initGPIO(void) { PINSEL1 = 0x00000000; PINSEL2 = 0x00000000; IODIR0 = 0xFFFFFFFC; IODIR1 = 0xFFFF0000; } void UART0_Write(unsigned char value) { /* THRE bit can be extracted by this U0LSR & 0x20 THRE = 0 means data is present. THRE = 1 means register is empty. In order to transmit data, we have to wait will the THRE = 1, then only we can transmit data. */ while(!(U0LSR&0x20)); //THRE = 0 stay here U0THR = value; } void UART0_Write_Text(unsigned char msg[]) { while(*msg) { UART0_Write(*msg); msg++; } } unsigned char UART0_Read(void) { /* Receiver Data Ready = U0LSR.0 bit RDR bit can be extracted by this U0LSR & 0x01 RDR = 0 means no Data is Received in U0RBR RDR = 1 means that Data is present in U0RBR */ while(!(U0LSR & 0x01)); //RDR = 0 stay here return (U0RBR); } /*********************************************/
Please guide me.
Regards & thanks,
Kishor.