FIFO
Los FIFO se usaban regularmente a fines de los 80 en los UART. (Los estaba usando regularmente a partir de 1989, por ejemplo). El 16550 (y finalmente el 16554 [quad UART]) hizo que los FIFO de 16 bytes estuvieran disponibles fácilmente. Dadas las velocidades de procesamiento, las latencias de interrupción y las crecientes tasas en serie del día, fue muy conveniente y útil.
El beneficio obvio es que la tasa de interrupción (o sondeo) puede ser menos frecuente. Si la sobrecarga de eventos es costosa, reducir la frecuencia ayuda mucho.
Pero también hay problemas con el uso de FIFO (más de 1 byte). El nivel de activación de recepción (estos dispositivos generalmente permiten algunas opciones) significa que el software no examina ninguno de los datos entrantes hasta que se alcanza ese umbral y se dispara una interrupcion. O, si el remitente se detiene por un momento, el umbral de activación podría nunca alcanzarse. (Esto se manejó a veces al permitir un retraso en el peor de los casos especificado / documentado, a menudo con 4 caracteres), y de todos modos se provocaría una interrupción si se produjera un retraso similar. Esto puede ser malo para los sistemas en tiempo real o cuando se procesa paquetes y cuando el último fragmento de un paquete completo se encuentra en la FIFO con un largo retraso antes de que se envíe el siguiente paquete. Por lo tanto, hay compensaciones entre un mejor rendimiento general y la latencia.
Si la sobrecarga de interrupción no es mala o si sus tasas de datos son lo suficientemente lentas, es probable que sea más sencillo hacerlo sin el FIFO. Para admitir un FIFO se necesita más código que no para uno porque aumenta la cantidad de estados y problemas por los que preocuparse.
DMA
Esto puede ser muy útil, a veces. Por ejemplo, en los SiLabs (era Cygnal) C8051F06x (que utilicé mucho, ya que es el only MCU luciendo un ADC de 16 bits decente, deje solo uno que se ejecuta en \ $ 1 \: \ text {MHz} \ $ tasas de conversión), no tiene la opción ninguna en el asunto si desea admitir la tasa máxima de conversión de ADC de \ $ 1 \: \ text {MHz} \ $. El C8051F06x utiliza un núcleo 8051 con un solo DPTR. Y es demasiado lento para seguir el ritmo. Sin el DMA, las capacidades del convertidor de ADC habrían sido inaccesibles y, por lo tanto, desperdiciadas.
Usualmente, se agrega DMA porque hay al menos un periférico en la familia que lo requiere o lucharía sin él. Una vez que se agrega, puede ser relativamente fácil habilitar la unidad DMA para que sea compatible con más dispositivos. Si es fácil de hacer y no es demasiado difícil de documentar y admitir, es probable que esté habilitado. (También puede ver que DMA admite memoria para transferencias de memoria).
Algunos DMA no son solo "programar algunos registros y dejarlos volar". En realidad, puede ser una máquina de estado más sofisticada que le permite programarla para diferentes tareas. Una vez más, con gusto abriré el MCU C8051F05x. Es DMA requiere alguna "programación" para funcionar. Y la documentación (cuando estaba jugando con ella) era completamente inadecuada. (Inutilizable, de hecho, ya que no fue posible programarlo correctamente para el ADC sin la información adicional que faltaba). Tuve que preguntarle a SiLabs, quien tomó algunas semanas para localizar, localizar y luego preguntar al DMA original. diseñador (que había hecho el trabajo 8 años antes), luego en Singapur, creo, para poder responder a mis preguntas.
Resumen
Muchas ideas llegan cuando se enfrentan los problemas causados cuando se deben soportar altas velocidades de datos. El soporte de hardware, ya sea un FIFO o DMA o algún otro esquema, puede ser muy útil. Estas soluciones generalmente también vienen con sus problemas adicionales (todas las espadas tienen dos filos). Por lo tanto, en la mayoría de los casos hay un software y un precio de soporte continuo que se debe pagar. (Y como en mi caso, los retrasos debidos a tener que localizar a un diseñador para descubrir cómo usarlo implican otro tipo de riesgo: existen menos personas que saben cómo funciona algo y que pueden ayudarlo y aquellos que asisten a los retrasos en la obtención de dicha ayuda.) Pero generalmente vale la pena pagar, cuando surge una situación en la que desea un FIFO o DMA.