Como ya se ha comentado previamente, la única función que tiene un periférico DMA es el trasvase de datos desde una posición inicial (origen) hacia una posición final (destino), proceso conocido como transferencia DMA que consta de dos operaciones o eventos, una lectura de la dirección fuente (Read-DMA) y una escritura en la dirección destino (Write-DMA). Las transferencias DMA que un usuario puede programar en el DSP se pueden parar al final de cualquier evento DMA, bien de lectura o de escritura (bits START en tabla 4-6 y tabla 4-7).
El usuario puede programar cuatro formas de realización de las transferencias DMA, según la sincronización impuesta entre la fuente y el destino (bits 8 y 9, SYNC, del registro global de configuración del periférico). Los cuatro tipos de transferencia DMA se muestran en la figura 4.29.
Se programa la forma en que se realizan las transferencias de tipo DMA, estableciendo una especie de breakpoint (parada controlada de la transferencia DMA) al final de uno, los dos o ninguno de los eventos de que se compone la transferencia DMA (recuérdese que la transferencia se compone del evento lectura del dato en la posición de origen y el de escritura del mismo en la posición de destino), tabla 4-9. Las peticiones de las interrupciones habilitadas para generar eventos DMA son las que se encargan de relanzar, cuando dichas peticiones aparecen, las transferencias DMA (en esto consiste la generación de eventos DMA asociados a las interrupciones, tema 15):
· SYNC = ‘00’. Sin sincronización entre la fuente y el destino. Las interrupciones habilitadas para generar eventos DMA son ignoradas, no afectan a los procesos de transferencia que se realizan cuando no haya conflictos en la estructura pipeline. No existe ningún breakpoint.
· SYNC = ‘01’. Sincronización de la fuente. La DMA no realiza transferencias mientras no llegue alguna interrupción que tenga habilitada la generación de eventos de tipo DMA. Cuando llega una petición de interrupción, que tenga habilitada la generación de eventos DMA, se inicia la transferencia DMA realizándose primero un evento de lectura (Read-DMA) y a continuación se lleva a cabo un evento de escritura (Write-DMA). Existe, por tanto, un único breakpoint situado al comienzo del evento Read-DMA.
· SYNC = ‘10’. Sincronización del destino. Como en el caso anterior, la DMA no realiza transferencias mientras no llegue alguna interrupción que tenga habilitada la generación de eventos de tipo DMA. Cuando llega una petición de interrupción, que tenga habilitada la generación de eventos DMA, se inicia la transferencia DMA realizándose primero un evento de escritura (Write-DMA) y a continuación se lleva a cabo un evento de lectura (Read-DMA). Existe, por tanto, un único breakpoint situado al comienzo del evento Write-DMA.
· SYNC = ‘11’. Sincronización de la fuente y el destino. Antes de cada evento de lectura o escritura DMA hay que esperar a que ocurra una interrupción que tenga habilitada la generación de eventos de tipo DMA. Existen, por tanto, dos breakpoints situados al comienzo de los eventos Read-DMA y Write-DMA.
En la figura 4.30 se muestran los diagramas de tiempos simplificados asociados a las transferencias de tipo DMA. Obsérvese que las gráficas se encuentran ordenadas según la zona de memoria que hace las veces de origen y destino de la transferencia (memoria interna, memoria externa asociada al bus principal y memoria externa asociada al bus de expansión). Nótese, además, que no existe diferencia entre los accesos a través del bus de expansión con MSTRB ó IOSTRB al contrario de lo que veíamos cuando analizábamos los accesos a memoria externa del DSP. Se puede observar que:
ü
Los procesos de
lectura y escritura de la DMA efectuados sobre memoria interna tardan un ciclo
máquina.
ü Los procesos de lectura y escritura de la DMA efectuados sobre memoria externa tardan más de dos ciclos máquina. Primero se efectúa el proceso de recogida del dato. Posteriormente dicho dato es almacenado en un registro de la DMA (ciclo de registro interno) y, finalmente, se realiza el trasvase del dato a la dirección de destino. Cw y Cr representan los estados de espera programados en los accesos, a través del bus externo seleccionado (principal ó de expansión). Cuando el usuario haya lanzado transferencias DMA por un determinado bus del sistema es conveniente que no modifique el registro de control de dicho bus (no altere la forma de generación ni el número de estados de espera programados al comienzo del proceso DMA) sin parar previamente la generación de los eventos DMA. Se evitan, de esta forma, accesos externos erróneos con cero estados de espera.
Figura 4.29. Sincronización de las transferencias DMA con la petición de las
interrupciones habilitadas para generar eventos DMA.
Figura 4.30. Transferencias DMA: Tiempo de ejecución de los accesos en lectura (Read-DMA) y escritura (Write-DMA), para diferentes fuente y destino.
Mientras no se programe, la DMA permanece inactiva (después de un reset el periférico DMA para las transferencias en curso y no realiza trasvase de datos). Para poder usar el periférico DMA del DSP primero es necesario configurarlo. La configuración debe realizarse, según aconseja el fabricante, manteniendo inactivo el periférico siguiendo, por tanto, el proceso indicado en la figura 4.31: En primer lugar se debe parar el periférico -poner los dos bits START del registro global de control de la DMA a cero-, posteriormente se realiza la configuración del periférico manteniendo los bits START a cero -se escribe en el registro de control global de la DMA, se programa la dirección de origen y destino así como el número de datos a transferir-, y finalmente se habilita el periférico -se ponen las banderas START a un valor distinto de 00-.