Actualmente estoy trabajando con Atmel AT91SAM7X256. Tiene una lata de i/f con múltiples multibyte cuadros de mensaje. Sin embargo, la USARTs sólo tiene un único byte de almacenamiento en búfer, que es un poco de un dolor cuando estoy tratando de hacer RS485 de paquetes basado en material.
Respuestas
¿Demasiados anuncios?Su AT91SAM7X256 tiene 13 Controlador de DMA y los canales de 64 KB de RAM. Es más eficiente hacer la RAM de propósito general y el uso de la DMAC para almacenar el transmisor y el receptor de datos.
Si la RAM es en lugar de poner en pequeños grumos de FIFOs etc, no puede ser utilizado para otros propósitos que no UART aplicaciones. Tener dos cosas que hacen el mismo trabajo - FIFOs y DMAC - no es un buen uso de transistor de recursos.
El software generalmente tendría que mover los datos entre las FIFOs y la memoria RAM de todos modos. La transmisión sería de RAM->FIFO->TxUART pero ahora es RAM->TxUART. Del mismo modo, la recepción sería RxUART->FIFO->memoria RAM, pero ahora es RxUART->memoria RAM.
El uso de la DMAC, la transmisión y recepción de los tamaños de búfer puede ser decidido por su software, dividiendo la RAM como le parezca.
La principal utilidad de un FIFO se deriva de su capacidad para evitar tener que tener el CPU interactuar con carácter individual eventos en el tiempo-crítico de moda. Si un chip de hardware puede tomar el cuidado de todas las críticas en el tiempo las respuestas a los distintos eventos de carácter, que puede permitir el puerto serie el manejo de asignar una prioridad más baja de lo que sería necesario, por lo tanto permitiendo que el chip para satisfacer mejor las necesidades de temporización de otros procesos.
Por desgracia, una cola FIFO en sí y de por sí no suele ser suficiente para satisfacer los requisitos de tiempo, y en algunos casos podría ser en realidad más de un obstáculo en vez de una ayuda. Si, por ejemplo, usa una conexión xon/xoff señalización (anticuado, tal vez, pero a veces todavía se requiere en la ausencia de otras protocolo de cables) y un dispositivo recibe un xoff, se debe aplazar la transmisison nada más allá del actual carácter en el búfer de transmisión. Para un chip que tiene una gran búfer de transmisión para hablar de forma fiable a un dispositivo que tiene un pequeño búfer de recepción y los usos xon/xoff señalización, o bien debe tener un medio de pausar la transmisión sin borrar el buffer [equipo adicional] o, de lo contrario abstenerse de poner más bytes en el búfer de que el receptor sería capaz de manejar pasado el xoff [que requeriría tener una manera para que el transmisor para saber el número de bytes en el buffer, de nuevo, el hardware extra].
Además, no importa cómo es grande un chip del búfer de recepción podría ser, tendría que ser constantemente agarrar todos los datos desde el búfer de recepción en cualquier momento que se estaba transmitiendo en orden a buscar un xoff menos que recibió xoff puede ser detectado sin mirar para todo [de nuevo, más hardware].
Algunas de hardware UART dispositivos que están diseñados para ser encuestados escasamente pobladas (por ejemplo, USB-a-serial convertidores) tener bastante grande FIFOs en ellos, pero ellos también tienen hardware que les permita reaccionar de forma autónoma a una serie de acontecimientos externos. Para un buffer de gran tamaño en una UART para ser realmente útil, es necesario tener hardware junto con lo que no sería necesario tanto cuando se utiliza un pequeño UART.
Todos los que habiendo sido dicho, el argumento de que la DMA elimina la necesidad de un buffer de gran tamaño no está totalmente de retención de agua. Si los requisitos externos requeriría que una aplicación de manejar toda la serie de caracteres de eventos dentro de los tres caracteres veces, mediante el uso de un doble buffer UART con ninguna DMA pueden facilidad de software requisitos de tiempo de respuesta en comparación con un único búfer de uno y no de DMA, mientras que es mucho más conveniente que el uso de DMA.
En un MCU, no hay ninguna razón para tener un hardware dedicado para el gran UART buffers, ya que es tan fácil hacer lo mismo en el propósito general de RAM con interrupciones y/o DMA.
De esa manera, el chip de los usuarios que no necesitan ese tipo de almacenamiento en búfer para su UARTs puede utilizar la memoria para algo más.
Con la interfaz CAN, la falta de tiempo son más estrictas, y la longitud del mensaje tiene un límite. Además, puede tomar varios intentos para transmitir un mensaje, así que tiene sentido para búfer de mensajes completos en lugar de bytes.