Leí en el libro "Serial Port complete, 2nd edition" que el reloj de la UART debería ser 16 veces la tasa de baudios , pero nunca he visto ningún microcontrolador en el que establezcamos la frecuencia de la UART antes de configurarlo para un baudio específico tasa. Entonces:
1) ¿Por qué la frecuencia debe ser 16 veces la tasa de baudios?
2) ¿Me puede dar un ejemplo de cualquier microcontrolador donde establecemos la frecuencia UART?
3) ¿Cuál es el propósito de configurar la frecuencia de reloj de la UART si tenemos temporizadores? Por ejemplo, generamos la tasa de baudios en un simple 89c52 a través del temporizador 1 y no configuramos ninguna frecuencia.
4) ¿Cuál es la idea de establecer la tasa de baudios con un temporizador como lo hacemos en 89c5x. ¿Cómo se vincula a la frecuencia UART?
5) RS-232 es el "estándar recomendado 232" y un UART es físico. El hardware realiza conversiones paralelo-serie y serie-paralelo. ¿Tengo razón?
6) ¿El UART contiene un contador, de modo que después del bit de inicio espera 8 ciclos y luego, después de cada 16 ciclos, se toman las muestras de la línea RX para detectar el bit?
1) ¿Por qué la frecuencia debe ser 16 veces la tasa de baudios?
Como Chris ya ha señalado en los comentarios, no hay señal de reloj, los UART RS-232 son sistemas asíncronos. Esto significa que no tenemos idea de cuándo comenzarán los datos entrantes y es una apuesta bastante segura que el reloj del transmisor funcionará a una velocidad ligeramente diferente a la de los receptores. Para hacer frente a esto, el UART sobremuestrea los datos entrantes para que pueda obtener una medida razonable de dónde están las transiciones en los datos. Para sobremuestrear, necesita un reloj que funcione significativamente más rápido que la velocidad de datos.
2) ¿Me puede dar un ejemplo de cualquier Microcontrolador donde configuramos la frecuencia UART?
Prácticamente todos ellos contendrán varios registros para establecer esto. por ejemplo, en el LPC1768 hay un registro divisor fraccional para configurar el escalador previo del reloj a la lógica UART. En general, establecer la frecuencia del reloj para la lógica UART también establece la velocidad en baudios para la salida, por lo que puede no ser obvio que está configurando un reloj a 16 veces la velocidad en baudios.
3) ¿Cuál es el propósito de configurar la frecuencia del reloj en UART si tenemos temporizadores? Por ejemplo, generamos una tasa de baudios en 89c52 simple a través del temporizador 1 y no configuramos ninguna frecuencia.
¿Para que pueda ejecutar cada UART a una velocidad de transmisión diferente sin usar todos sus temporizadores?
4) ¿Cuál es la idea de establecer la velocidad en baudios con un temporizador como lo hacemos en 89c5x? ¿Cómo se vincula a la frecuencia UART?
Ni idea, no usé la parte pero eso parece un poco extraño.
5) Se recomienda RS-232 estándar 232 y UART es físico. El hardware realiza conversiones paralelo-serie y serie-paralelo. ¿Tengo razón?
Sí, el UART tiene un búfer de transmisión y recepción de 8 bits, el procesador solo maneja bytes de datos, el hardware UART maneja la conversión a serie y viceversa.
6) ¿UART contiene un contador, de modo que después del bit de inicio espera 8 ciclos y luego, después de cada 16 ciclos, se toman muestras de la línea RX para detectar el bit?
Contiene una máquina de estado que rastrea el punto actual en el ciclo de transmisión/recepción. Esta máquina de estado contendrá contadores y lógica para detectar transiciones, iniciar y detener bits y generar/comprobar bits de paridad. A menos que desee diseñar su propio UART, no necesita preocuparse por lo que sucede exactamente dentro de esa máquina de estado. Si desea diseñar su propio UART, entonces ese es un tema completamente nuevo.
La pregunta y algunas de las respuestas confunden "reloj", "frecuencia" y "tasa de baudios".
Como se explicó, hay un reloj dentro de la UART que suele ser 16 veces la tasa de baudios deseada. Cuando tenía cabello, este reloj se proporcionaba a la UART mediante un divisor de hardware, generalmente configurado por interruptores DIP, desde un oscilador de cristal.
Pero un UART como un 16550 o el UART en un microcontrolador contiene el circuito divisor. Cuando "establece la velocidad en baudios" escribiendo en un registro UART, está configurando el divisor. La entrada es un reloj de alta frecuencia, a menudo el reloj del procesador.
Entonces, un 16550 a menudo tendrá una entrada de un oscilador de cristal de 1.8432 MHz. Divida eso por 16 y obtendrá 115200 baudios, la velocidad más rápida disponible con ese UART usando esa entrada. Para obtener esa tasa de baudios, establecería el divisor de tasa de baudios del UART en 1. Establezca el divisor en 2 y obtendrá 57600 baudios. Ajústelo a tres y obtendrá 38400 baudios, etc.
Los UART más sofisticados tienen una lógica de "divisor fraccional", que le permite obtener velocidades de transmisión estándar (o cercanas a ellas) de un oscilador de entrada que no es un múltiplo entero de la velocidad de transmisión.
Algunos de los principios de diseño de los UART se remontan a los días en que el costo combinado de un cristal, un circuito dividido por tres y un divisor de frecuencia de potencia de dos sería menor que el costo de un divisor de frecuencia totalmente programable.
La forma más versátil de diseñar un UART sería usar divisores de frecuencia programables separados para transmitir y recibir, cada uno configurado para 1x la tasa de baudios, y "atasco" cada uno en un conteo programable cuando el lado correspondiente del UART está inactivo. Sin embargo, hacer las cosas de esa manera requeriría el uso de dos divisores de frecuencia totalmente programables separados. Es más económico tener un divisor programable compartido entre transmisión y recepción, pero que funcione lo suficientemente rápido como para que tanto el transmisor como el receptor puedan dividirlo aún más de forma independiente.
chris stratton
Aimal
chris stratton
lior kogan
TonyM
jimmyb
olin lathrop
sstobbe
viejo contador de tiempo