1.
Controlador
DMA
Un periférico DMA (Direct Memory Access) es un periférico capaz de gestionar, sin coste alguno en tiempo de CPU para el microprocesador, transferencias de bloques de datos desde una posición en el mapa de memoria del sistema microprocesador (origen) hacia otra (destino).
Una transferencia DMA hace referencia al trasvase de un grupo de datos en el mapa de memoria del sistema digital. El número de datos que se van a trasvasar es uno de los parámetros característicos de la transferencia DMA. El periférico DMA dispone de un contador de datos transferidos que se inicializa al número de datos que se desean trasvasar. Cada vez que el periférico transfiere un dato en el mapa de memoria del sistema, disminuye en una unidad dicho contador. Se dice que la transferencia DMA ha concluido cuando el registro contador de datos transferidos alcanza el valor cero.
Cada dato trasvasado en el mapa de memoria implica dos operaciones, una lectura del dato en la dirección origen (Read-DMA) y una escritura del mismo en la dirección destino (Write-DMA). Al final de cada proceso de tipo Read-DMA (Write-DMA) la dirección origen (destino) puede, normalmente, incrementarse o disminuirse en una unidad o permanecer constante.
Hasta ahora hemos analizado los sistemas microprocesadores como sistemas digitales en los que había un único maestro (el microprocesador) y multitud de esclavos (periféricos de almacenamiento de programas y datos, de conversión analógico-digital y digital-analógico, etc.). El maestro era el que gestionaba la transferencia de información por los buses del sistema: Activaba en modo lectura o escritura al periférico al que quería acceder, mediante las líneas asociadas a los buses de control y dirección, y completaba el acceso, siguiendo un estricto diagrama de tiempo suministrado por el fabricante, leyendo (o escribiendo) información del (en el) bus de datos del sistema.
Figura
4.26.
Estructura maestro-esclavo en un
sistema microprocesador.
El periférico DMA es un dispositivo que puede funcionar, en el sistema digital en el que se encuentre inmerso, como maestro o esclavo. El microprocesador puede acceder a él para configurar su modo de funcionamiento, como haría con cualquier otro periférico, comportándose el periférico DMA, en ese momento, como esclavo en el sistema. La característica fundamental que tiene este periférico es que, una vez configurado y habilitado, su funcionamiento normal consiste en realizar transferencias de información a través de los buses del sistema, sin que dicha transferencia suponga coste de CPU para el micro. Para poder realizar esa tarea, el periférico DMA necesita poder gobernar los buses y funcionar como maestro en el sistema digital. Obviamente, para no provocar conflictos en los accesos a los buses, sólo puede haber un maestro en el sistema.
Para evitar que aparezcan dos maestros que gobiernen las líneas de los buses del sistema se añade al bus de control de muchos microprocesadores un par de líneas, una de entrada (normalmente HLD) y otra de salida (normalmente HLDA), que implementan un protocolo de acuse de recibo. El protocolo que se establece implica que, por defecto, el maestro en el sistema es el microprocesador. Si algún periférico desea tomar el control de las líneas asociadas a los buses de datos, dirección y control, primero debe solicitarlo al maestro (esta petición se realiza activando la línea HLD de entrada al microprocesador). El microprocesador analiza internamente la petición y, si el usuario que ha programado el micro lo permite, atiende la petición (deja en triestado las líneas de los buses de dirección, control y datos). Una vez que el micro ha dejado de gobernar los buses del sistema le indica, activando la línea HLDA, al periférico que quería ser maestro (normalmente un periférico de tipo DMA) que puede gobernar los buses.
A partir de ese momento el que controla, como maestro, las líneas de los buses del sistema digital es el periférico DMA. El periférico realiza, entonces, una transferencia de información (programada previamente por el microprocesador) en el mapa de memoria del sistema digital. La transferencia de información es un proceso repetitivo que consiste en un acceso en lectura a una posición de memoria (el periférico DMA impone, en las líneas asociadas al bus de direcciones del sistema, el valor de la dirección de la posición a la que desea acceder, activa la señal de lectura asociada al bus de control y copia el valor que aparece en el bus de datos en un registro interno del periférico) y un acceso posterior en escritura a otra zona de memoria (el periférico DMA impone, en las líneas asociadas al bus de direcciones del sistema, el valor de la dirección de la posición a la que accede, activa la señal de escritura asociada al bus de control y copia el valor que aparece en el registro interno del periférico en el bus de datos). La dirección del bloque de memoria que se desea copiar, el tamaño de dicho bloque (que indica cuantas veces consecutivas accede en lectura y en escritura la DMA como maestro del sistema digital) y la dirección donde se desea copiar el bloque de memoria son datos que programó el microprocesador cuando accedió, para configurarlo, al periférico DMA. Una vez que el periférico DMA es maestro, el microprocesador no puede efectuar accesos al exterior por los buses del sistema hasta que la DMA no pase a ser esclavo, cosa que ocurre cuando se concluye el trasvase programado.
La utilidad que ofrece un periférico de este tipo es descargar al microprocesador de la realización de operaciones de trasvase de datos. Un periférico de este tipo tiene interés sólo si el usuario tiene previsto desarrollar aplicaciones en las que se realicen gran cantidad de trasvases de datos en el mapa de memoria del sistema digital.
El DSP dispone de un periférico DMA interno diseñado para la realización de transferencias de datos desde una posición origen hacia otra posición destino diferente, sin que ello suponga coste alguno de procesado para la CPU (de forma transparente a la CPU del sistema). Las transferencias las realiza el periférico empleando los buses internos de datos y direcciones dedicados a la DMA y se pueden realizar desde y hacia cualquier posición en el mapa de memoria del DSP.
El periférico DMA interno al DSP tiene, además, asignada una fuente de petición de interrupción a la CPU. Esta fuente se corresponde con el evento final de transferencia DMA (el registro contador de la transferencia DMA alcanza el valor cero).