"Etiquetado" ¿Los datos viajan a través del puerto serie?

0

Si estoy leyendo datos de múltiples canales (UART) de un microprocesador, pero quiero que se lean continuamente, imagino que lo lógico sería pasar por los canales y los datos de salida, mientras que, de manera similar, Recorriendo las entradas en el lado del software de la computadora receptora y leyéndolas e ingresándolas en buffers separados. Pero me resulta difícil creer que la computadora y el microprocesador envíen y reciban datos en perfecta sincronicidad, por lo que tendría sentido que cada información se adjuntara a algún tipo de "etiqueta" para identificar su canal de origen a medida que avanza. a la computadora

¿Cómo se podría hacer eso, porque imagino que al agregar etiquetas como supuse anteriormente, se reduciría el rendimiento de la capacidad de la computadora para leer un gran volumen de señales, ya que luego tiene que analizar los datos de estas etiquetas? Sin embargo, esta es solo una conjetura lógica sobre cómo se lograría este efecto, así que quizás haya una mejor manera de hacerlo que sea totalmente diferente.

    
pregunta Scorch

1 respuesta

3

TL;DR:

  • No hay necesidad de dicho etiquetado. Simplemente hay un búfer para cada "canal", en ubicaciones predeterminadas (o asignadas dinámicamente por el sistema operativo, pero no importa). Así que sabemos dónde los datos recibidos por cada canal están en la RAM.
  • El procesador puede enviar y recibir datos simultáneamente (si esto es lo que quiere decir con "sincronicidad").
  • Se pueden garantizar los rendimientos de rendimiento.

La pregunta es un poco confusa, así que no estoy seguro de poder identificar el nivel de lo que entiendes y el punto en el que comienzas a perderte. Así que trataré de explicar desde el principio.

Entonces, primero, ¿qué hay en un microprocesador? Hay muchos subbloques allí, no solo una CPU. Cada UART es otro bloque, por ejemplo. Y cada bloque puede funcionar independientemente de los demás. Todos pueden trabajar en paralelo.

Ahora, ¿qué sucede cuando un byte llega a un UART? El UART lee el byte, bit por bit, y cuando se ha leído el byte completo, lo coloca en un registro de hardware. También notifica a la CPU (a través de una interrupción) que le dice que hay un byte disponible. A partir de ahí, a la UART ya no le importa lo que le pase a este byte. El próximo trabajo de UART es estar listo para el siguiente byte que viene.

Sin embargo, se ha notificado a la CPU, por lo que, con suerte, se ha realizado el firmware para activar una rutina apropiada cuando se activa la interrupción de UART. Esta rutina obtendrá el byte del registro (ubicado en una dirección específica, decidida por el fabricante del chip) y lo copiará en un búfer en algún lugar de la RAM (ubicado en una dirección, dentro del espacio de la RAM, decidido por el desarrollador del firmware: usted) . La CPU entonces, tal vez, actualizará algunas variables en el programa para saber cuántos bytes se han leído, eventualmente cambiará a un nuevo búfer si está lleno, etc, ... y continuará con las otras tareas que tiene que hacer.

¿Qué sucede cuando varios UART están trabajando en paralelo? Primero, los bytes no tienen que estar sincronizados entre todos los UART, porque cada UART es independiente. Así que los bytes pueden llegar cuando quieran. Cuando llega un byte, el UART activará su interrupción propia , por lo que la CPU sabrá qué UART ha recibido un byte (en algunas MCU, varios UART pueden compartir la misma interrupción, pero siempre hay una manera para comprobar qué UART ha recibido realmente el byte, a través de algunos registros de control). Luego, la rutina de interrupción, una vez que se haya determinado el UART, leerá el registro apropiado, porque cada UART tiene su propio registro de recepción propio . Así que la CPU obtendrá el byte, sabiendo de qué UART proviene. Luego copiará el byte en el búfer apropiado, porque cada "canal" debe tener su búfer propio . Así que ya ves que no hay necesidad de "etiquetar" en ningún momento. Es solo que los bytes de cada canal terminan en diferentes ubicaciones predeterminadas en la memoria.

Entonces, tal vez, una vez que se hayan capturado suficientes bytes, deberá enviarlos a otro UART. Funciona igual. La CPU le indicará a la salida UART que envíe un byte colocando el valor de byte en un registro de hardware específico. Y el UART avisará a la CPU a través de una interrupción cuando la transmisión se haya completado, por lo que la CPU puede solicitar al UART que envíe el siguiente byte.

En general, la CPU no tiene muchas cosas que hacer aquí. Solo obtenga los bytes tan pronto como los UART de entrada los reciban y devuélvalos al UART de salida adecuado. Todo esto se hace a través de lecturas / escrituras de registros de hardware específicos en el momento adecuado. La CPU no hace realmente las operaciones de transmisión / recepción. Y todos los UARTs y la CPU trabajan al mismo tiempo. Por lo tanto, con las CPU con un rendimiento razonable, puede garantizar el máximo rendimiento. Además, al usar DMA, la carga de la CPU puede disminuir aún más ... Pero DMA será para el próximo capítulo.

    
respondido por el dim

Lea otras preguntas en las etiquetas