I'm trying to get acquainted with ARMs on example of LPC1110 device. And there is some confusion about selecting baud rate for UART.
I suppose it is running at
12MHz after reset. The LPC111x manual (pdf) says that I should set
UARTCLKDIV first (as I understand, it is pre-divisor for UART clock). I set it to
1. So I think UART_PCLK = 12MHz
Now I need to load divisor to 16-bit latch
U0DLM:U0DLL. Manual says that
baud rate = UART_PCLK / (16 * divisor)
There is also fractional divisor adjuster, but I think I do not use it.
So the code looks like this:
int divisor = 12000000 / (16 * 9600); UARTCLKDIV = 1; U0LCR = 0x83; // enable divisor loading U0DLM = divisor >> 8; // divisor high byte U0DLL = divisor & 0xFF; // divisor low byte U0LCR = 0x03; // disable divisor loading U0FCR = 0x07;
And wonderfully this do not work, i.e. I see the mess in terminal. After some googling and experiments I've found that it will work all right if I change the first line to
int divisor = 48000000 / (16 * 9600);
So I supposed PLL could be enabled - but as I read the manual I came to conclusion it is not. After reset main clock should work directly from internal RC oscillator. And I use value 12000000 MHz when burning firmware with
What may I miss here?
P.S. Code example #3 from here do not use 16-bit divisor, instead loading
0x9B (155) to
UARTCLKDIV. They say this gets 19200 baud rate which means they also run at about
47.6 MHz (as I understand).