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

2

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

Supongo que se está ejecutando en 12MHz después del reinicio. El manual de LPC111x ( pdf ) dice que debería configurar UARTCLKDIV primero (según entiendo, es pre-divisor para reloj UART). Lo puse a 1 . Así que creo que UART_PCLK = 12MHz

Ahora necesito cargar el divisor a 16 bits latch U0DLM:U0DLL . Manual dice que

baud rate = UART_PCLK / (16 * divisor)

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

Entonces 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 desorden en la terminal. Después de algunas búsquedas en Google y experimentos, encontré 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 una conclusión, no lo está. Después de reiniciar, el reloj principal debería funcionar directamente desde el oscilador RC interno. Y utilizo el valor 12000000 MHz al grabar firmware con la herramienta mxli .

¿Qué puedo extrañar aquí?

P.S. Ejemplo de código n. ° 3 no use el divisor de 16 bits, en su lugar cargue 0x9B (155) a UARTCLKDIV . Dicen que esto obtiene una velocidad de 19200 baudios, lo que significa que también se ejecutan a aproximadamente 47.6 MHz (según tengo entendido).

    

1 respuesta

1

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

    
respondido por el Rodion Gorkovenko

Lea otras preguntas en las etiquetas