http://www.psoclatinoamerica.com
INDICE
Resumen ............................................................................................................................................................ 4
Introduccin........................................................................................................................................................ 4
Conceptos Bsicos del DMA ............................................................................................................................. 5
Configuracin DMA ............................................................................................................................................ 6
Configuracin del Canal ................................................................................................................................. 7
Configuracin TD ........................................................................................................................................... 8
Descripcin general del componente DMA ................................................................................................ 10
Conecciones del componente DMA ............................................................................................................... 10
Configuracin Firmware del DMA ................................................................................................................ 11
Ejemplo 1: Transferencia perifrica a perifrico ................................................................................................. 12
Ejemplo 1 Configuracin DMA ..................................................................................................................... 13
Ejemplo 1 Cdigo de Configuracion DMA ...................................................................................................... 15
Ejemplo 2: Transferencia Perifrico-a-Memoria ................................................................................................. 16
Ejemplo 2 Configuracin DMA ....................................................................................................................... 17
Ejemplo 2 Archivos del Proyecto ................................................................................................................... 18
Ejemplo 3: Transferencia Memoria-a-Perifrico ................................................................................................. 19
Ejemplo 3 Configuracin DMA ....................................................................................................................... 20
Ejemplo 4: Transferencia Memoria-a-Memoria .................................................................................................. 21
Ejemplo 4 Configuracin DMA ....................................................................................................................... 22
Ejemplo 4 Archivos del Proyecto.................................................................................................................... 23
Example 5: Concatenando TD .......................................................................................................................... 24
Ejemplo 5 Configuracin DMA ....................................................................................................................... 25
Ejemplo 5 Archivos del Proyecto .................................................................................................................... 25
Resumen
La nota de aplicacin AN52705 proporciona una introduccin al acceso de memoria directa (DMA) que
poseen PSoC 3 y PSoC 5LP. El DMA del PSoC puede transferir datos entre los perifricos dentro del chip
y la memoria sin intervencin del CPU. Esta nota de aplicacin ilustra cmo configurar el DMA para la
transferencia simple de datos, como as tambin de perifrico a memoria, memoria a perifrico, perifrico a
perifrico y memoria a memoria, usando, para ello proyectos como ejemplo.
Introduccin
El controlador DMA (DMAC), que tiene el PSoC 3 y PSoC 5LP, puede transferir datos desde un origen a un
destino sin la intervencin de la CPU. Esto permite a la CPU para manejar otras tareas mientras el DMA
efecta transferencias de datos, logrando as un entorno de multiprocesamiento.
El controlador DMA (DMAC) del PSoC es muy flexible, se puede transferir datos entre la memoria y
perifricos del chip incluyendo ADCs, DACs, filtro, USB, UART y SPI. Hay 24 canales independientes de
DMA.
Esta nota de aplicacin describe cmo configurar el DMA para la transferencia simple de datos. Incluye
proyectos que muestran diferentes tipos de transferencias DMA:
. Perifrico a Memoria
. Memoria a Perifrico
. Perifrico a Perifrico
. Memoria a Memoria
Esta nota de aplicacin asume que est familiarizado con el desarrollo de aplicaciones utilizando PSoC
Creator para PSoC 3 o 5LP PSoC. Si eres nuevo en PSoC 3 o PSoC 5LP, se recomienda como introduccin
la nota de aplicacin AN54181,Getting Started with PSoC 3 (Comenzando con el PSoC3) y la nota de
aplicacin AN77759, Getting Started with PSoC5 (Comenzando con el PSoC5).
Para una lectura ms avanzada sobre DMA se puede recurrir al documento AN84810. Si desconoce el uso
del PSoC Creator, pueden interiorizarse en la pgina PSoC Creator
La PHUB tiene ocho buses de datos que se llaman Spokes (rayos). Cada spoke, o rayo, conecta la CPU y
la DMAC a uno o ms perifricos. Los spokes, o rayos, pueden tener ser de 16 bits o 32 bits. Los perifricos
conectados a un spoke, o rayo, pueden ser de 8 bits, 16 bits o 32 bits.
El ancho de los datos de un perifrico es generalmente inferior o igual al ancho de datos del spoke (rayo) al
cual est conectado. Si el ancho de datos de un perifrico es mayor que la del spoke (rayo) al cual est
conectado, la PHUB puede gestionar con el perifrico y llevarlo al mismo ancho de datos del spoke (rayo).
El PHUB tiene dos bus masters (maestros), la CPU y el DMAC.
La CPU y el DMAC pueden acceder a distintos spokes del PHUB al mismo tiempo. Si el CPU y la DMAC
intentan acceder al mismo tiempo al mismo spoke, se produce un arbitraje dentro del bus.
Ver, para ms detalles, PSoC 3 and PSoC 5LP Technical Reference Manuals (Manual de Referencia Tcnica).
Cada uno de los 24 canales DMA pueden transferir, independientemente, datos. Cada canal posee una
cadena llamada Transaction Descriptor (TD) (Descriptor, o descripcin de Transaccin)como se ve en la
Figura 2.
El TD contiene informacin como la direccin de origen, direccin de destino, la transferencia del conteo, y
la siguiente TD dentro de la cadena. Puede haber un mximo de 128 TDs. La combinacin de un canal y
TD describe la transferencia completa del DMA.
Cada canal DMA tiene una entrada de peticin independiente, que inicia una transaccin. Una solicitud DMA
puede ser inicializada por un perifrico o por la CPU. Cuando se recibe una solicitud del DMA, el DMAC
accede a los spokes (radios) conectados a la fuente y destino y mueve los datos segn lo configurado dentro
del canal y el TD asociado.
Configuracin DMA
Una transferencia DMA es configurado mediante los registros de configuracin pertenecientes al canal y del TD. La
Figura 3 muestra el canal y los parmetros de configuracin TD.
.TD Inicial
Define el primer TD asociado al canal. El puntero a la primera TD es almacenada en la memoria de
configuracin del canal. Los punteros TD siguientes son almacenadas en la memoria de configuracin TD,
similar a una lista vinculada.
. Preservar TD (0 o 1)
Define si retener la configuracin original del TD para su posterior uso, para transferencias DMA
subsiguientes.
Por defecto las configuraciones TD son preservadas.
0: No preservar las configuraciones TD.
1: Preservar las configuraciones TD.
Si se conservan las TDs, el canal utiliza una memoria separada de la TD (correspondiente al nmero de
canal) para realizar el seguimiento de la transaccin en marcha; de lo contrario los registros originales de
configuracin del TD se utilizan como registros de trabajo para realizar el seguimiento de la actual
transaccin.
Configuracin TD
Los parmetros de configuracin del TD se explican a continuacin:
. Direccin Inferior Origen (16 bits)
Los 16 bits inferiores de los 32 bits de la direccin de origen configurado en el registro de configuracin TD
. Direccin Inferior Destino (16 bits)
Los 16 bits inferiores de los 32 bits de la direccin de destino
.Conteo deTransferencia (0 a 4095 bytes)
El nmero total de bytes que se van a transferir desde el origen (fuente) a destino.
La cuenta de transferencia se usa junto con el parmetro de cuenta de burst. Por ejemplo, si desea mover
50 palabras de 2 bytes de un perifrico de 16 bits a un bfer de memoria, el conteo de burst se establece en
2 y el conteo de transferencias se establece en 100.
.Prximo TD [Next TD]
Prximo TD, similar a una lista vinculada.
. Propiedades TD
La Tabla 1 muestra las propiedades TD definidos por los campos de bits en el registro de configuracin de
propiedad TD.
Tabla 1. Propiedades TD
Propiedades
Incrementar la Direccin de Origen
Descripcin
Si este bit est establecido, la direccin de origen se incrementa a medida que avanza
la transaccin DMA.
Si se establece, el DMA intercambia los bytes de los datos mientras se mueve datos
desde el origen al destino.
Tamao de Intercambio[swap]
Habilitar la Terminacin TD
El compilador Keil del PSoC 3 utiliza como formato el Big Endian (Endian Grande) para almacenar variables
de 16 bits y 32 bits. Pero los registros perifricos del PSoC 3 utilizan el formato Little-Endian (PequeoEndian). Por esta razn, el DMA debe estar configurado para intercambiar bytes cuando se desplaze datos
de multiple-byte entre los registros ,de los perifricos, y la memoria del PSoC 3. Esto no es necesario para
PSoC 5LP debido que ambos, perifricos y memoria , utiliza el mismo formato de endian.
Veamos ahora como configurar el DMA utilizando PSoC Creator.
"Inhabilitado",agrega
en el Creador de PSoC.
DMA.
un
terminal
drq
al
Opcionales
TD
es
habili tado , un
flanco
complete
(nrq)[Transferencia finalizada
de
seal
ascendente/Nivel).
Rising
Edge/Level
(Flanco
DMA_1_dma.h se crean durante el proceso de construccin. Estos archivos incluyen la API "DmaInitialize"
que se utiliza para inicializar el canal DMA. Otras funciones del canal como la configuracin del TD se
incluyen en los archivos CyDmac.c y CyDmac.h en la carpeta fuente generada.
A continuacin se presentan los pasos de configuracin de firmware para DMA:
1. Iniciar el canal DMA
Channel_Handle = DMA_DmaInitialize(DMA_BYTES_PER_BURST, DMA_REQUEST_PER_BURST,
HI16(Source Address), HI16(Destination Address))
2. Crear instancia de un TD
TD_Handle = CyDmaTdAllocate();
3. Establecer la configuracin de TD
CyDmaTdSetConfiguration(TD_Handle,Transfer_Count,Next_TD,TD_Property);
4. Establecer la direccin de TD
CyDmaTdSetAddress(TD_Handle, LO16(Source Address), LO16(Destination Address))
5. Establecer los canales iniciales TD
CyDmaChSetInitialTd(Channel_Handle, TD_Handle)
6. Habilitar el canal DMA
CyDmaChEnable(Channel_Handle, preserve_TD)
Los detalles indicados arriba se explican con mayor detalle en el Apendice A: Configuraciones en la pgina
19.
El asistente de DMA se puede utilizar para generar automticamente el cdigo para configurar el canal de
DMA; vase el Apndice B: Asistente de configuracin de DMA en la pgina 21 para ms detalles.
Tener en cuenta que el asistente DMA soporta operaciones de DMA entre slo un conjunto limitado de
perifericos de PSoC.
Si el asistente DMA no admite un perifrico, debe configurar manualmente el canal DMA utilizando las
funciones detalladas en el apndice A. Lo que sigue a continuacin son un conjunto de cuatro ejemplos que
muestran en detalle cmo hacer transferencias DMA entre la memoria y los perifricos. Un quinto ejemplo
muestra cmo construir un mltiple-cadena TD.
Como muestra la Figura 7, el ADC es configurado en 8 bits, en modo de entrada simple para que coincida
con el formato de datos del VDAC, el cual es un voltaje DAC de 8 bits. La solicitud de hardware (DRQ) del
canal DMA est habilitada y conectada al terminal EoC del ADC, de manera que el ADC pueda hacer una
solicitud de transferencia de datos cada vez que haya un resultado disponible en el ADC .
Despus de recibir la peticin, el canal DMA lee un byte de datos del registro de salida del ADC y escribe
en la registro de datos DAC.
Figura 7. Top Design, transferencia de perifrico a perifrico
cydevice.h,
archivo
generado
valor de 32 bits.
Como una alternativa, puede asignar la parte superior mismo TD(looped) [en bucle], por lo que la misma
de las direcciones de origen y destino en relacin con operacin se repite en cada solicitud DMA.
El
los registros del componente, tal como muestra la parmetro Preserve TD es puesto en True.
Tabla 3. Las definiciones sobre las direccin pueden Ejemplo 1 Archivos del proyecto
ser encontrados en los archivos ADC DelSig.h y El proyecto Eg1_ADC_DMA_DAC en el archivo
VDAC8.h de los componente, respectivamente.
Wizard
configuracin
Configuratiuon
de
DMA)
para
(Asistente
obtener
de
ms
DMA channel.
DMA channel */
all of the TDs associated with the channel
this example, DMA_TD array contains only one element */
La figura 9 muestra el diseo del proyecto. Cada vez que se oprime el Pin_Switch;se dispara el ISR_Switch,
y se establece un indicador (flag) en el ISR para habilitar el canal DMA. Una vez que el canal DMA es
habilitado, la seal EoC proveniente del ADC activa la peticin del canal DMA.
En cada solicitud DMA, el DMA trae 2 bytes de la fuente - el registro de salida del ADC - los escribe en el
bfer de memoria RAM de destino, e incrementa la direccin de destino por 2. El contador de transferencias
se decrementa en 2 despus de cada Burst de transferencia.
Esto se repite hasta que el contador de transferencia es puesto a 0, que a su vez genera una seal de
"transaccin completado"
en el terminal NRQ del DMA, que activa la interrupcin ISR_DMA_Done .
En la rutina de servicio de interrupcin se coloca un flag para indicar que la transaccin se ha completado.
El canal DMA es deshabilitado cuando se ha completado la transaccin y de nuevo se habilita cuando el
interruptor es oprimido de nuevo.
Figura 9. Diseo, Transferencia Perifrico-a-Memoria
Ejemplo 1.
CYDEV_SRAM_BASE, definido en el archivo
cydevice.h auto-generado por PSoC Creator,
define la direccin base SRAM. Esto se usa con la
macro HI16 para especificar los 16-bits superiores
de la direccin de destino.
Como alternativa, el puntero del array de la RAM
se puede utilizar con la macro HI16 para especificar
los 16-bits superiores de la direccin de origen para
5LP PSoC pero no para PSoC 3. Esto se debe a
que los 16-bits superiores de la direccin de la
memoria RAM es cero para PSoC 3, esto es debido
equivale a
La
compilador Keil-PSoC 3.
propiedad
TD
est
configurado
para
proyecto
Eg2_ADC_DMA_Mem
que
se
comprueba
este
ejemplo.
Este
cdigo
de
proyecto.
Un
reloj
es
el
componente
utilizado
para
generar,
proyecto
Eg3_ADC_DMA_Mem
que
se
este
ejemplo.
Este
cdigo
de
CyDmaChSetRequest
se
utiliza
para
activar
la
fuente al destino.
mas rpidas.
Sin
embargo,
tambin
se
debe
establecer
El
siguiente
TD
se
establece
en
sea
proyecto
Eg4_ADC_DMA_Mem
que
se
este
ejemplo.
Este
cdigo
de
Example 5: Concatenando TD
Esta forma de configuracin del TD puede utilizarse tambin para superar el lmite de la cuenta de
transferencia mxima de un solo TD, que es de 4096 bytes para un solo canal DMA. Tenga en cuenta que
los 16 bits superiores de las direcciones de fuente y destino deben ser los mismos para todos los TDs
dentro de la cadena.
El diseo para el proyecto es el mismo que en el Ejemplo 2.
[1],
viceversa,
para
transacciones.
Tabla 12. Configuracin TD[0]
concatenar
las
El
proyecto
Eg5_ADC_DMA_Mem
que
se
este
ejemplo.
Este
cdigo
de
Recopilando
Esta nota de aplicacin ha descrito al controlador DMA en
PSoC 3 y PSoC 5LP. El uso de ejemplos sencillos con PSoC
Creator tambin se mostro, en esta nota de aplicacin, cmo
configurar el DMA para diferentes tipos de transferencias de
datos. Para informacin ms avanzada, consultar los
Manuales Tcnicos de Referencia de SoC 3 y PSoC 5LP y a
la Hoja de datos del componente DMA dentro del PSoC
Creator.
Sobre el Autor
Nombre: Anu M.D.
Ttulo: Sr. Applications Engineer
Antecedentes: BE in Electronics and Communication
from Model Engineering College, Cochin.
Contacto: anmd@cypress.com
La funcin API DmaInitialize () configura varios parmetros del canal DMA como se muestra a
continuacin:
* DMA_BYTES_PER_BURST: el nmero de bytes a ser ledo y escrito por el canal DMA en un Burst (rfaga).
Por ejemplo, si desea definir que el DMA recoja un dato de 8-bit del ADC, poner este parmetro en 1, ya que el
canal DMA debe mover 1 byte de la fuente a destino por cada peticin. O, si se quiere recoger 16 -bits de datos
del ADC, poner este parmetro en 2.
* DMA_REQUEST_PER_BURST: Cada Burst (rfaga) debe tener una peticin por separado.
De ser puesto en 1, se debe solicitar individualmente cada transferencia de Burst. De ser puesto en 0, todos
los Bursts subsiguiente despus del primer Burst son automticamente realizados tener que peticionar por
separado. (Slo la primera transferencia Burst debe tener una peticin del DMA).
* HI16(Source Address): Los 16 bits superiores de la direccin de la fuente. HI16 es un macro creado por
PSoC Creator para especificar los 16 bits superiores de los 32-bits de un valor o direccin.
* HI16(DestinationAddress):
proporcionados en la tabla anterior para identificar los 16 bits superiores de las direcciones de fuente y
destino para PSoC 3.
El compilador Keil de PSoC 3 almacena informacin especifica de Keil en los 16 bits superiores de las
direcciones de las variables. Por esta razn, utilizar las siguientes constantes que se muestran en la Tabla
14. Estan definidas en CyDevice.h junto con la macro HI16 para configurar los 16 bits superiores de la
direccin de origen y destino para PSoC 3 sobre todo cuando la transferencia de fuente o destino del DMA
es la memoria RAM o memoria flash
Tabla 14. Macro de 16 bits direccin superior
Source
DMA_SRC_BASE
Peripheral
CYDEV_PERIPH_BASE
RAM
CYDEV_SRAM_BASE
Flash
CYDEV_FLS_BASE
Paso 2: Asignacin TD
TD_Handle = CyDmaTdAllocate();
La funcin API CyDmaTdAllocate() crea una instancia del TD y devuelve el identificador a TD. El identificador
TD es utilizado por otras API para configurar el TD.
Para crear mltiples TDs, llamar a la funcin varias veces.
Paso 3: Configuracin TD
CyDmaTdSetConfiguration(TD_Handle,
Transfer_Count,
Next_TD,
TD_Property);
La funcin API CyDmaTdSetConfiguration() configura un TD, utilizando los siguientes parmetros:
* TD_Handle: un identificador devuelto, previamente, por la funcin CyDmaTdAllocate()
* Transfer_Count: el nmero total de bytes a mover desde origen a destino.
* Next_TD: el ndice del TD siguiente en la cadena del TD. Si este TD es de ser el ltimo dentro de la cadena,
utilizar la macro DMA_DISABLED_TD (0xFE) para desactivar el canal DMA despus que la transferencia TD es
completada.
* TD_Property: Usar los flags de registro de configuracion del TD como se muestra en la Tabla 15 para establecer
las propiedades de la transaccin DMA. Proceder hacer un OR con los flags para configurar la propiedad TD. Por
ejemplo, para configurar el TD para intercambiar 4 bytes durante la transferencia de datos, utilice:
(TD_SWAP_EN | TD_SWAP_SIZE4)
las
direcciones
de
registro
del
componente.
fuente
destino
PSoC es altamente
componentes
se
programable
crean
de
los
- muchos
bloques
DMA
Como una alternativa a los pasos descritos en el
Apndice A, el Asistente de DMA puede hacer fcil el
definir la configuracin de firmware de un canal DMA
y TD. Sin embargo, el asistente admite slo unos
pocos perifricos como es la fuente o destino DMA.
Si no se admite un perifrico, siga los pasos de
configuracin que se describen en el Apndice A.
Para iniciar el asistente de DMA, ir a PSoC Creator
> Tools > DMA Wizard.
si cada Burst
el nmero de descriptores de
manera:
TD.
Hacer click en NEXT cuando haya terminado. Entonces se genera el cdigo necesario.
Cuando tanto la CPU como el DMAC solicitan,al mismo tiempo, acceso a mismo punto en un PHUB, la CPU tiene
prioridad por defecto. El PHUB maneja el arbitraje entre DMA y CPU, y entre los canales DMA. Para ms
informacin ver PsoC 3, PsoC 5LP Architecture TRM
5. Aadir adc_sampleArray como una variable watch, tal como muestra la figura 21:
6. Coloque un punto de interrupcin en el interior del bucle if (DMADone_flag), como muestra la Figura 22:
7. Presione F5 para ejecutar el programa. Pulse el interruptor (SW1) conectado a P6[1] para permitir que el DMA para
iniciar el muestreo del ADC en el bfer. La ejecucin se detiene en el breakpoint (punto de interrupcin) despus que
la DMA haya transferido el nmero especificado de muestras desde el ADC a la memoria.
El resultado se puede verificar en la ventana de monitoreo (monitoring) observando a adc_sampleArray, como la
Figura 23 muestra:
Figura 23. Muestras de ADC en Watch Windows (ventana del monitor)
5. Aadir adc_samplearray1 y adc_samplearray 2 como variables a monitorear como muestra la Figura 26.
6. Coloque un punto de interrupcin en el interior del bucle if(DMADone_flag), como muestra la Figura 27.
7. Presione F5 para ejecutar el programa. Pulse el interruptor (SW1) conectado a P6[1] para habilitar el DMA para
iniciar el sampleo del ADC y guardar dentro del buffer. La ejecucin se detiene en el punto de interrupcin, despus
que DMA haya transferido el nmero especificado de muestras del ADC a la memoria.
Para verificar el resultado, monitorear adc_sampleArray1 y adc_sampleAv en la ventana de inspeccin, tal como
muestra la Figura 28
Figura 28. Muestras del ADC en la ventana Watch (inspeccin).
3. Cmo se utiliza DMA con protocolos de comunicacin como UART, SPI, etc.?
Al utilizar protocolos de comunicacin como UART y SPI con DMA, hay que establecer el tamao del bfer a 4 o
menos, de modo que las interrupciones internas no se activen para transferencias de datos. Utilizar punteros de
hardware FIFO como direcciones de lectura y escritura para el DMA y disparar el DMA usando el estado del nivel
FIFO configurado como interrupciones. Hacer la Peticin de Hardware del canal DMA como el nivel disparo con el fin
de utilizarlos con los niveles FIFO.
4. Detalles sobre la sincronizacin de tiempos de transferencia DMA?
Los datos detallados de transferencia DMA se pueden encontrar en el "PSoC 3, PSoC 5LP Technical Reference
Manual" (Manual Tcnico de Referencia). Una discusin detallada sobre la sicronizacin DMA est ms all del
alcance de esta nota de aplicacin.
Orig. of
Change
**
2710860
LNAT
05/25/09
*A
2768731
LNAT
09/24/09
*B
2951774
LNAT
06/14/10
*C
2966485
LNAT
08/26/10
*D
3269575
LRDK
06/06/11
*E
3355465
ANUP
08/26/2011
Updated Introduction
Updated TD0 Configuration section
Updated channel configuration table
Updated Figure 8
Updated operation section.
*F
3444066
ANMD
11/22/2011
*G
3822782
ANCY
11/27/2012
*H
3844498
ANMD
12/18/2012
*I
4445042
KRIS
07/16/2014
Updated Software Version in page 1 as PSoC Creator 3.0 SP1 and higher.
Updated Related Application Notes in page 1 as AN61102, AN84810.
Updated Introduction.
Updated attached example projects for PSoC Creator 3.0 SP1.
Completing Sunset Review.