LPC1110 confusión sobre el reloj del sistema predeterminado y la velocidad en baudios de uart

Estoy tratando de familiarizarme con los ARM en el ejemplo del dispositivo LPC1110. Y existe cierta confusión sobre la selección de la velocidad en baudios para UART.

Supongo que se está ejecutando 12MHzdespués del reinicio. El manual LPC111x ( pdf ) dice que debo configurar UARTCLKDIVprimero (según tengo entendido, es un divisor previo para el reloj UART). Lo configuré en 1. Entonces creo que UART_PCLK = 12MHz

Ahora necesito cargar el divisor en el pestillo de 16 bits U0DLM:U0DLL. El manual dice que

baud rate = UART_PCLK / (16 * divisor)

También hay ajustador de divisor fraccionario, pero creo que no lo uso.

Así que el código se ve así:

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;

Y maravillosamente esto no funciona , es decir, veo el lío en la terminal. Después de algunas búsquedas en Google y experimentos, descubrí que funcionará bien si cambio la primera línea a 48MHz:

int divisor = 48000000 / (16 * 9600);

Así que supuse que PLL podría estar habilitado, pero cuando leí el manual llegué a la conclusión de que no lo está. Después de restablecer el reloj principal, debería funcionar directamente desde el oscilador RC interno. Y uso el valor 12000000 MHz cuando grabo firmware con mxlila herramienta.

¿Qué me puedo perder aquí?

El ejemplo n.º 3 de PS Code de aquí no usa un divisor de 16 bits, sino que carga 0x9B(155) a UARTCLKDIV. Dicen que esto obtiene una velocidad de transmisión de 19200, lo que significa que también funcionan aproximadamente 47.6 MHz(según tengo entendido).

Respuestas (1)

Lo siento, ese fue mi error. Después de depurar los valores de las direcciones de control, descubrí que PLL está activado. Después de investigar un poco más, descubrí que estaba activado en el módulo de inicialización que adjunté a mi proyecto. Lo apagué y todo funciona como se esperaba.