Anda di halaman 1dari 37

NOTA DE APLICACIN - AN52705

PRIMEROS PASOS CON DMA PSoC3 PSoC5LP

Documento traducido del Ingls al Espaol por:

Authors: Anu M D, Lakshmi Natarajan

Ing. Edgardo Daniel Ucha.


Ing. Brayan Andrs Bermudez.
Para PSoC Latinoamrica

Associated Project: Yes


Associated Part Families: All PSoC 3 and PSoC 5LP parts
Software Version: PSoC Creator 3.0 SP1 and higher
Related Application Notes: AN61102, AN84810asd

http://www.psoclatinoamerica.com

Cypress Semiconductor Corporation.

Documento original : AN52705

Traduccin Bogot DC Junio 2016

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

Apndice A: DMA Pasos de Configuracin ..................................................................................................... 26


Paso 1: Inicializacin del canal DMA ........................................................................................................... 26
Paso 2: Asignacin TD .................................................................................................................................. 27
Paso 3: Configuracin TD .............................................................................................................................. 27
Paso 4: Configurar fuente y destino de TD ..................................................................................................... 28
Paso 5: Unir el TD con el canal ..................................................................................................................... 28
Paso 6: Habilitar el canal DMA ...................................................................................................................... 28
Otras funciones API del DMA ......................................................................................................................... 29
Apndice B: Configuracin del Asistente DMA .................................................................................................. 29
Paso 1: Seleccionar un canal DMA (instancia del componente DMA) ............................................................. 29
Paso 2: Configuraciones globales. .............................................................................................................. 29
Paso 3: Definir la transaccin los descriptores para el canal ..................................................................... 30
Paso 4: Copiar el cdigo creado por el Asistente ........................................................................................... 31
Apndice C: El ajuste prioridad del canal de DMA ............................................................................................. 31
Apndice D: Ejemplos de Proyectos - Configuracin de la prueba ..................................................................... 32
Ejemplo 1: Transferencia Perifrico-a-Perifrico - Eg1_ADC_DMA_DAC ....................................................... 32
Ejemplo 2: Transferencia Perifrico-a-Memoria - Eg2_ADC_DMA_Mem ........................................................ 32
Ejemplo 3: Transferencia Mermoria-a-Perifrico - Eg3_Mem_DMA_DAC ....................................................... 34
Ejemplo 4: Transferencia Memoria-a-Memoria Eg4_Mem_DMA_Mem ........................................................ 34
Ejemplo 5: Concatenando TD Eg5_TD_Chaining ........................................................................................ 34
Apndice E: Preguntas Frecuentes (FAQ): ....................................................................................................... 36
Histrico del Documento .................................................................................................................................... 37

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

Conceptos Bsicos del DMA


El DMAC, que tienen el PSoC 3 y PSoC5LP, forman parte de un hub (concentrador) central llamado HUB
Perifrico (Peripheral HUB > PHUB) que conecta los perifricos, que se encuentran dentro del chip,como se
muestra en la Figura 1

Figura 1. Concentrador Perifrico (Peripheral HUB)

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.

Configuracin del Canal


La configuracin de los parmetros del canal DMA se explica a continuacin:
. Direccin Superior de Origen (16 bits)
Los 16 bits superiores de una direccin de origen de 32 bits es configurado en el canal de registro de configuracin

. Direccin Superior de Destino (16 bits)


Los 16 bits superiores de una direccin de destino de 32 bits es configurado en este canal de registro de
configuracin
. Conteo de Burst [Rfaga] (1 a 127)
Define el nmero de bytes que el canal DMA debe desplazar desde el origen al destino antes de que se
libere el spoke (rayo). El DMAC toma posesin del spoke (rayo), transfiere el nmero de bytes especificado
desde el origen a destino y luego libera el spoke (rayo). Para la prxima transferencia, vuelve a tomar
posesin del spoke.
Lmite el conteo dentro del spoke, de transferencias DMA, a menos de o igual a 16.

. Peticin Por Burst [Rfaga] (0 o 1)


Cuando se requieren mltiples transferencias de rfaga para finalizar la transferencia de datos DMA, este
bit determina la naturaleza de las rfagas.
0: Todas los bursts [rfagas] posteriores despus del primer burst se realizan automticamente sin una
peticin al DMA por separado. Slo la primera transferencia de burst debe tener una solicitud del DMA.
1: Cada transferencia de burst requiere una peticin, solicitud, por separado.

.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.

Incrementar la Direccin de Destino

Si este bit est establecido, la direccin de destino se incrementa a medida que


avanza la transaccin DMA.

Intercambio [swap] Habilitado

Si se establece, el DMA intercambia los bytes de los datos mientras se mueve datos
desde el origen al destino.

Tamao de Intercambio[swap]

Define el tamao del intercambio realizado, si se estable Swap Enable.


0: Cada 2 bytes son endian intercambiados durante la transferencia DMA.
1: Cada 4 bytes son endian intercambiados durante la transferencia DMA.

Auto ejecutar siguiente TD

0: Siguiente TD, en la cadena, slo es ejecutado despus de la siguiente solicitud de


DMA.
1: El siguiente TD, en la cadena, se ejecuta automticamente despus de terminada
la actual transferencia de TD.

Evento de finalizacin de DMA

Si seteado, genera una seal DMA "hecho (finalizado) despus de la transferencia


de datos haya terminado. Esto se utiliza normalmente para crear una interrupcin
despus de que la transferencia haya terminado.

Habilitar la Terminacin TD

De ser seteado, la transaccin en marcha puede terminarse mediante seal de


hardware

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.

Cualquier seleccin para este parmetro excepto

Descripcin general del componente DMA

"Inhabilitado",agrega

La figura 4 muestra el componente del canal DMA

componente. El drq puede ser conectado a

en el Creador de PSoC.

cualquier seal de hardware, para activar el canal

Este componente se puede encontrar en la

DMA.

pestaa sistemas en el catlogo de componentes.

Sin el terminal DRQ, la operacin del DMA se

Figura 4. Componente Canal DMA

activa slo por la CPU..

un

terminal

drq

al

Cuando este parmetro se establece en "derived",


el tipo de disparo DMA - edge / level se determina
Terminales

a partir del origen del disparo DMA. Para mas

Opcionales

informacin,vea DMA componente hoja de datos.


Hardware Termination (trq): Cuando esta opcin

El componente del canal DMA y API asociado son


usados para configurar el DMA para transferir
datos.

se establece en TRUE (Verdadero),otro terminal


de entrada (trq) aparece en el componente. Siel
termina l

TD

es

habili tado , un

flanco

ascendente en este terminal detiene la transaccin

Conecciones del componente DMA


Puede establecerse los siguientes parmetros en
la ventana de configuracin del componente como
se muestra en Figura 5.
.Figura 5. Configuracin DMA

del DMA en curso. Tenga en cuenta que trq


termina una cadena TD slo si hay una rafaga
(burst) de transaccin del DMA en curso. Consulte
la hoja de componente para obtener ms detalles.
Transfer

complete

(nrq)[Transferencia finalizada

(nrq)]: Con el fin de indicar que la transferencia de


DMA est terminado, la TD se puede configurar
para crear un pulso cuyo ancho sea de 2 relojes
del bus en el terminal NRQ del canal de DMA, una
vez finalizada la transferencia. El terminal NRQ se
puede conectar a una interrupcin, o a otro
componente para acciones adicionales.
Hardware Request (drq): Este parmetro define el
tipo

de

seal

ascendente/Nivel).

Rising

Edge/Level

(Flanco

Establezca las propiedades del TD para definir si


generara,o no, una seal en el terminal nrq , y si
habilitar, o no, la terminacin de TD utilizando trq.

Configuracin Firmware del DMA


El componente DMA genera un archivo fuente y el archivo de cabecera correspondiente para cada instancia
DMA durante el proceso de construccin (building) del proyecto. Por ejemplo, si hay una instancia del
componente DMA en su diseo que tiene el nombre DMA_1, entonces los archivos -DMA_1_dma.c y

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.

Ejemplo 1: Transferencia perifrica a perifrico


En este ejemplo se muestra cmo utilizar el DMA para hacer una transferencia perifrico a perifrico simple,
es decir, desde el registro de salida de datos de un ADC al registro de entrada de datos de un DAC como
muestra la Figura 6.

Figura 6. Diagrama en Bloque de la transferencia Perifrico a Perifrico

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

Ejemplo 1 Configuracin DMA


Las configuraciones de TD y canal de lDMA para
este proyecto se muestran en la tablas 2 y 4.

Los TDs puede ser visto como una matriz (array) de


TDs concatenados; en este caso solo necesitamos
una matriz de un solo elemento: TD [0].
Tabla 4-TD[0] Opciones de la Configuracin

La configuracin del canal tiene los 16 bits


superiores de los 32 bits de la direccin de fuente y
destino. CYDEV_PERIPH_BASE, definido dentro del
archivo

cydevice.h,

archivo

generado

automticamente por PSoC Creador, define la


direccin base de todos los perifricos del PSoC
incluyendo el ADC y DAC. HI16 es un macro

La macro LO16 devuelve los 16 bits inferiores de un

generado por el PSoC Creator que devuelve los 16

valor de 32 bits.

bits superiores de un valor de 32 bits. Esta macro se

El canal DMA debe mover un byte por cada solicitud

utiliza para obtener los 16 bits superiores de la

del DMA, as la cuenta del Burst es puesta a 1 byte

direcciones de origen y de destino.

y la solicitud por Burst es puesta a True.


El prximo TD en ser ejecutado se establece en el

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.

adjunto AN52705.zip en la presente nota de

Tabla 3. Direcciones superiores alternativos.

aplicacin muestra este ejemplo. Vase el Apndice


D: Example Projects (Ejemplos de Proyectos) -

Configuracin de la prueba para obtener ms


informacin sobre cmo probar este proyecto.

El cdigo de configuracin del DMA para este


ejemplo es visto mas abajo. Vase el Apndice B:
DMA

Wizard

configuracin

Configuratiuon

de

DMA)

para

(Asistente
obtener

de
ms

informacin sobre cmo generar el cdigo de


configuracin mediante el asistente de DMA.

Ejemplo 1 Cdigo de Configuracion DMA


/* Define for DMA Configuration */
#define DMA_BYTES_PER_BURST
1
#define DMA_REQUEST_PER_BURST 1
#define DMA_SRC_BASE (CYDEV_PERIPH_BASE)
#define DMA_DST_BASE (CYDEV_PERIPH_BASE)
/* Variable declarations for the
* DMA_Chan is used to store the
uint8 DMA_Chan;
/* DMA_TD array is used to store
* Since there is only one TD in
uint8 DMA_TD[1];

DMA channel.
DMA channel */
all of the TDs associated with the channel
this example, DMA_TD array contains only one element */

/* DMA Configuration steps */


/* Step 1 */
/* DMA Initializations done for both the DMA Channels
* Burst count = 1, (8 bit data transferred to VDAC one at a time)
* Request per burst = 1 (transfer burst only on new request)
* High byte of source address = Upper 16 bits of ADC data register
* High byte of destination address = Upper bytes of the VDAC8 data register
* DMA_Chan holds the channel handle returned by the DmaInitialize function. This is
* used for all further references of the channel */
DMA_Chan = DMA_DmaInitialize(DMA_BYTES_PER_BURST, DMA_REQUEST_PER_BURST,
HI16(DMA_SRC_BASE), HI16(DMA_DST_BASE));
/* Step 2 */
/* Allocate TD for DMA Channel
* DMA_TD[0] is a variable that holds the TD handle returned by the TD allocate function.
* This is used for all further references of the TD */
DMA_TD[0] = CyDmaTdAllocate();
/* Step 3 */
/* Configure TD[0]
* Transfer count = 1 (total number of bytes to transfer from the ADC to DAC)
* Next Td = DMA_TD[0]. The same td has to repeat itself for every ADC EoC.
* Configuration = No special TD configurations required */
CyDmaTdSetConfiguration(DMA_TD[0], 1, DMA_TD[0], 0);
/* Step 4 */
/* Configure the td address
* Source address = Lower 16 bits of ADC data register
* Destination address = Lower 16 bits of VDAC8 data register */
CyDmaTdSetAddress(DMA_TD[0], LO16((uint32)ADC_DelSig_DEC_SAMP_PTR),
LO16((uint32)VDAC8_Data_PTR));
/* Step 5 */
/* Map the TD to the DMA Channel */
CyDmaChSetInitialTd(DMA_Chan, DMA_TD[0]);
/* Step 6 */
/* Enable the channel
* The Channel is enabled with Preserve TD parameter set to 1. This preserves the
* original TD configuration and reload it after the transfer is complete so that the TD
* can be repeated */
CyDmaChEnable(DMA_Chan, 1);

Ejemplo 2: Transferencia Perifrico-a-Memoria


Este ejemplo muestra cmo hacer una transferencia perifrico-a-memoria desde la salida de datos del
registro de un ADC hacia una matriz de memoria de 16 bits, como la figura 8 muestra.
Figura 8. Diagrama en bloques, transferencia perifrica-a-memoria

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 2 Configuracin DMA


Las configuraciones para el canal DMA y del TD
para este proyecto se encuentran en la Tabla 5 y
Tabla 6.

En este ejemplo, un resultado de 2 bytes


proveniente del ADC debe ser transferido del ADC
a la array de la RAM en cada solicitud de DMA y
por lo tanto el contador de Burst se establece en 2

Tabla 5: Configuracin del Canal

y la solicitud por rfaga se establece en true.


El TD Preserve se establece en 1 (True), de
manera que el ajuste original de TD, es decir, la
direccin de origen, direccin de destino y el
nmero de transferencias se conserven y las
transacciones puedan ser repetidas.
Los 16-bits inferiores de direccin de origen y

La configuracin del canal tiene los 16 bits


superiores de la direccin de 32-bit tanto del origen
y como destino.

destino se especifican en la configuracin del


descriptor de transaccin (TD [0]) como se ve en la
Tabla 5.

La direccin de origen es la misma que en el

Tabla 6: Valores de configuracin

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

La cuenta de transferencia es puesta a 400 que

a que el compilador Keil guarda informacin

equivale a

especfica perteneciente a Keil en los 16-bits

Nmero de muestras para ser almacenadas

superiores de la direccin de la variable. Por esta

(buffered) Bytes por Muestra

razn, HI16 (y adc_sampleArray) devuelve una

La

direccin incorrecta cuando se utiliza con el

incrementar la direccin de destino despus de

compilador Keil-PSoC 3.

cada Burst transferencia y generar una seal de

propiedad

TD

est

configurado

para

finalizacin una vez que se encuentre el numero


especificado de muestras en el buffer. Para el
proyecto en PSoC 3, el TD tambin est
configurado para intercambiar los bytes mientras
mueve los datos del ADC a la memoria tal como se

Ejemplo 2 Archivos del Proyecto


El

proyecto

Eg2_ADC_DMA_Mem

que

se

encuentra dentro del archivo AN52705.zip, y que


se adjunta con la presente nota de aplicacin,

explica en la seccin propiedad TD. Los bits

comprueba

correspondiente a cada una de las propiedades del

configuracin para este ejemplo es similar al del

TD se define en el archivo auto-generado, por

ejemplo 1. Los argumentos pasados a las

PSoC Creador,CyDmac.h. Los campos de bits

funciones se dan en las Tablas de configuraciones

requeridos en la propiedad se les aplica logica "O"


(Or-ed) para establecer la propiedad de TD.

este

ejemplo.

Este

cdigo

de

de Canales y TD mostradas anteriormente. Vase


el Apndice D: Example ProjectsTest Setup

Con el fin de detener las transferencias del DMA

(Ejemplos de Proyectos-Configuracin Prueba)

despus de almacenar en el buffer el nmero

para ms detalles sobre cmo probar este

especificado de muestras, TD [0] se concatena a

proyecto.

DMA_DISABLE_TD el cual deshabilita el canal


DMA.

Ejemplo 3: Transferencia Memoria-a-Perifrico


Este ejemplo muestra cmo utilizar el DMA para la transferencia de datos desde la memoria a un perifrico.
El ejemplo demuestra la generacin de ondas usando un DAC, como muestra la figura 10.
Figura 10. Diagrama en bloques, Transferencia memoria-a-perifrica

TD Property : Increment Source address

Una tabla de bsqueda (LUT) sinusoidal con 128 puntos se

La direccin de origen es incrementado en uno y la cuenta de

almacena en la memoria flash. Estos valores se envan

transferencia disminuye en uno despus de cada transmisin

secuencialmente a un DAC, utilizando el DMA, para crear una

de Burst. Esto contina hasta que todos los valores de la tabla

onda sinusoidal. Figura 11 muestra el diseo para el proyecto.

sean enviados a DAC.

Un

reloj

es

el

componente

utilizado

para

generar,

peridicamente, peticiones DMA (DRQ). Cuando se recibe la


peticin, el canal DMA trae un byte de datos de la tabla de
bsqueda (LUT) y lo escribe en el registro de datos DAC

Figure 11. Top Design, Memory-to-Peripheral Transfer

Ejemplo 3 Configuracin DMA


Las configuraciones del canal DMA y del TD para
este proyecto se dan en las Tablas 7 y 8.

Tabla 8. Configuracin TD[0]

Tabla 7. Configuracin del Canal

La cuenta de transferencia es puesta al nmero


total de bytes en la tabla (LUT) del seno.

El origen de la transferencia DMA es la tabla array


(matriz) de la sinusoide que se mantiene en la
memoria flash.
El HI16 (sineTable) establece los 16 bits superiores
de la direccin de origen para PSoC 5LP mientras
que HI16 (CYDEV_FLS_BASE) se utiliza para
identificar los 16 bits superiores de direccin de
origen para PSoC 3 por las razones mencionadas

El TD est configurado para incrementar la


direccin de origen, es decir, al puntero de la tabla
(lut), despus de cada transferencia de Burst.
Al final de la transferencia, un ciclo completo de
onda sinusoidal es generado en la salida del DAC.
El TD se conserva y conectado en un bucle a s
mismo a fin de generar una onda continua.

en los ejemplos anteriores.


El canal DMA debe mover un byte desde el array
(matriz) de la tabla hacia el DAC para cada peticin
del DMA. Por lo tanto,la cuenta del Burst se
establece en 1 byte y la peticin por Burst se
establece en true.
Las configuraciones TD originales se conservan de
modo que pueda ser reutilizado.
Los 16 bits ms bajos de las direcciones de origen
y de destino se establecen con el macro LO16
como se indica en la Tabla 8.

Ejemplo 3 Archivos del Proyecto


El

proyecto

Eg3_ADC_DMA_Mem

que

se

encuentra dentro del archivo AN52705.zip, y que


se adjunta con la presente nota de aplicacin,
comprueba

este

ejemplo.

Este

cdigo

de

configuracin para este ejemplo es similar al del


ejemplo 1. Los argumentos pasados a las
funciones se dan en las Tablas de configuraciones
de Canales y TD mostradas anteriormente. Vase
el Apndice D: Example ProjectsTest Setup
(Ejemplos de Proyectos-Configuracin Prueba)
para ms detalles sobre cmo probar este
proyecto.

Ejemplo 4: Transferencia Memoria-a-Memoria


Este ejemplo se muestra cmo utilizar el DMA para hacer una transferencia de memoria-a-memoria.
Tambin muestra cmo hacer que se dispare un canal DMA utilizando la CPU. En este ejemplo, un array
(matriz) de 8-bytes de la flash se copia a un array (matriz) de 8-bytes de la RAM usando la peticin por CPU,
como la figura 12 muestra.
Figura 12. Diagrama en bloques, Transferencia de memoria-a-memoria

La figura 13 muestra el diseo del proyecto. La funcin

Las direcciones de origen y de destino de TD, se

CyDmaChSetRequest

incrementan a medida que la transferencia avanza.

se

utiliza

para

activar

la

transferencia DMA aproximadamente un segundo


despus que el dispositivo de se haya encendido.

Cuando se complete la transferencia, se genera un

Cuando se recibe una peticin de la CPU, el DMA

pulso en el terminal nrq de la DMA. Esto activa la

transfiere 8 bytes del array (matriz) de la flash a la array

interrupcin ISR_DMADone que establece un flag para

(matriz) de la RAM como se ha configurado en los

indicar que la transferencia se ha completado. El nuevo

registros del canal y del TD.

contenido de la RAM se visualizan en el LCD.


Figura 13. Diseo: Transferencia Memori-a-Memoria

El parmetro peticin por Burst se establece en

Ejemplo 4 Configuracin DMA


Las configuraciones del canal DMA y TD para el
proyecto se dan en la Tabla 9 y 10.

false para que las peticiones por separado no sean


necesarios para cada transferencia del Burst.
Tabla 10. Configuracin TD[0]

Tabla 9. Configuracin Canal

Los 16 bits ms bajos para las direcciones de la


La fuente para la transferencia del DMA es el

fuente y de destino para la configuracin del TD se

"sourceArrray ' definido en la memoria flash. El

identifican por la macro LO16.

destino es 'destinationArray' en la RAM. Los 16-bits


superiores de la direccin de la fuente dentro de la

La cuenta de transferencia se establece en 8 para

flash se ajustan en HI16 (&sourceArray) en PSoC

que un total de 8 bytes se transfieran desde el

5LP y HI16 (CYDEV_FLS_BASE) en PSoC 3, tal

fuente al destino.

como se explica en los ejemplos anteriores.


De manera similar, los 16 bits superiores de la

El DT est configurado para incrementar la

direccin de destino en la SRAM se establecen

direccin de origen, es decir, el puntero de una

usando la macro HI16 (CYDEV_SRAM_BASE).

array del flash y la direccin de destino, es decir, el


puntero de una array de la RAM, despus de cada

La cuenta del Burst es puesta a 1-byte de manera

Burst de transferencia. El TD es Tambin

que el DMA pueda leer byte por byte desde la

configurado para enviar un pulso de trmino a

memoria flash y lo escribe en la array (matriz) de la

travez de NRQ despus de que todos los 8 bytes

RAM. Puede establecer la cuenta del Burst a 8-

se mueven desde el array del flash al arrary de la

bytes para que las transferencias de datos sean

RAM. Este pulso se utiliza para disparar un ISR

mas rpidas.

para indicar que la transferencia se ha completado.

Sin

embargo,

tambin

se

debe

establecer

El

siguiente

TD

se

establece

en

generalmente el conteo del Burst a valores

DMA_DISABLE_TD (0xFE) para deshabilitar el

inferiores para permitir que lo emitido

canal DMA tras la finalizacin de la transferencia.

sea

compartida por otros canales DMA.


Puesto que la transaccin tiene que suceder una
sola vez, la configuracin TD no necesita ser
preservada.

Ejemplo 4 Archivos del Proyecto


El

proyecto

Eg4_ADC_DMA_Mem

que

se

encuentra dentro del archivo AN52705.zip, y que


se adjunta con la presente nota de aplicacin,
comprueba

este

ejemplo.

Este

cdigo

de

configuracin para este ejemplo es similar al del


ejemplo 1. Los argumentos pasados a las
funciones se dan en las Tablas de configuraciones
de Canales y TD mostradas anteriormente. Vase
el Apndice D: Example ProjectsTest Setup
(Ejemplos de Proyectos-Configuracin Prueba)
para ms detalles sobre cmo probar este
proyecto.

Example 5: Concatenando TD

El canal DMA se configura para realizar dos


transacciones (operaciones):

Este ejemplo muestra cmo utilizar varios TDs con un


solo canal y como concatenarlos. En este ejemplo los

* Transaccin 1: ADC a RAM buffer1

datos del ADC se envan a dos buffers RAM por

* Transaccin 2: ADC a RAM buffer2

separados, una despus de la otra, utilizando un


nico canal DMA y dos TDs

Estas dos operaciones se configuran usando, por


separado,
los descriptores de transaccin - TD [0] y TD [1] - y
son
concatenados entre s usando la funcin TD
concatenar (chaining) del DMA, como muestra la
figura 14.
Figura 14. Diagrama en Bloques, Concatenamiento 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.

Tabla 13. Configuracin TD[1]

Ejemplo 5 Configuracin DMA


Las configuraciones de TD y del canal para este
proyecto son
dada en las Tablas 11, 12 y Tabla 13.
Tabla 11. Configuracin Canal

Ejemplo 5 Archivos del Proyecto


Las configuraciones TD son similares a la del
Ejemplo 2.
El siguiente parmetro TD, DT [0], se establece en
TD

[1],

viceversa,

para

transacciones.
Tabla 12. Configuracin TD[0]

concatenar

las

El

proyecto

Eg5_ADC_DMA_Mem

que

se

encuentra dentro del archivo AN52705.zip, y que


se adjunta con la presente nota de aplicacin,
comprueba

este

ejemplo.

Este

cdigo

de

configuracin para este ejemplo es similar al del


ejemplo 1. Los argumentos pasados a las
funciones se dan en las Tablas de configuraciones
de Canales y TD mostradas anteriormente. Vase
el Apndice D: Example ProjectsTest Setup
(Ejemplos de Proyectos-Configuracin Prueba)
para ms detalles sobre cmo probar este
proyecto.

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

Apndice A: DMA Pasos de Configuracin


Paso 1: Inicializacin del canal DMA
Channel_Handle = DMA_DmaInitialize(
DMA_BYTES_PER_BURST,
DMA_REQUEST_PER_BURST,
HI16(Source Address),
HI16(Destination Address))

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):

los 16 bits superiores de la direccin de destino. Use los macros

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)

Tabla 15. Propiedades TD

Paso 4: Configurar fuente y destino de TD


CyDmaTdSetAddress(TD_Handle,
LO16(source),
LO16(destination))

Creator durante el proceso de construccin (build).


Debe revisar estos archivos de cabecera para
identificar

las

direcciones

de

registro

del

componente.

La funcin API CyDmaTdSetAddress() establece


las direcciones de fuente y de destino de un TD,
utilizando los siguientes parmetros:
* TD_Handle: un identificador devuelto, previamente,

Paso 5: Unir el TD con el canal


CyDmaChSetInitialTd(Channel_Handle,
TD_Handle)
La funcin API CyDmaChSetInitialTD() establece el

por la funcin CyDmaTdAllocate()

primer TD del canal DMA:


* LO16(source): los 16 bits inferiores de la direccin de
* Channel_Handle: el manejo de la instancia de

fuente

DMA devuelto por la funcin DMA_DmaInitialize()


* LO16(destination): los 16 bits inferiores de la
direccin de

destino

PSoC es altamente
componentes

se

programable

crean

de

los

- muchos
bloques

programables analgicos y digitales, y la ubicacin


fsica de un perifrico pueden cambiar en funcin
del diseo. Por lo tanto, no es posible un mapa un
listado de registro de todos las direcciones de
fuente y destino.
En su lugar, los registros de cada componente se
definen en los archivos de cabecera de la API de
los componentes que son generados por PSoC

* TD_Handle: un manejador previamente devuelto


por la funcin CyDmaTdAllocate()

Paso 6: Habilitar el canal DMA


CyDmaChEnable(Channel_Handle,
Preserve_TD)
La funcin API CyDmaChEnable() habilita el canal
DMA:
* Channel_Handle: el manejador de la instancia DMA
devuelto por la funcin DMA_DmaInitialize()
* Preserve_TD: Si es TRUE (verdad), el canal DMA
conserva las configuraciones TD (fuente, destino y
conteo de transferencia) para que TD se puede
repetir

Otras funciones API del DMA


Para activar un canal DMA desde una peticin de la
CPU, utilice esta funcin:
CyDmaChSetRequest(Channel_Handle, CPU
_REQ);
Para deshabilitar un canal DMA, usar esta funcin:
CyDmaChDisable(Channel_Handle);

* DMA: el nombre de la instancia del componente


DMA en su proyecto
Hacer click en NEXT cuando terminemos
Paso 2: Configuraciones globales.
Seleccione la configuracin global de transferencia
global (global settings) DMA, tal como muestra la
Figura 16:

Apndice B: Configuracin del Asistente

Figura 16. Ajustes Globales

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.

Utilice este cuadro de dilogo para seleccionar los


parmetros de configuracin DMA:
Source and Destination: los 16 bits superiores de las

Paso 1: Seleccionar un canal DMA (instancia del


componente DMA)
Seleccione el canal DMA que se va a configurado,
como muestra la Figura 15:

direcciones de fuente y destino


Bytes per Burst: cantidad de bytes a moverse en un
solo Burst
Each Burst Requires a Request:

si cada Burst

requiere una solicitud por separado


Number of TDs:

el nmero de descriptores de

transaccin que van a estar asociadas con el canal


DMA (1 a 128).
Single Chain or Loop: esto define qu Next TD
(Siguiente TD) para el ltimo TD de la cadena. Si
es una sola cadena, el siguiente TD es DMA
Seleccionar los parmetros del dilogo de la siguiente

DISABLED (0xFE). Si es un bucle, es la primera

manera:

TD.

* Project: Nombre del proyecto en PsoC Creator

Dar click en NEXT cuando se termine.

Paso 3: Definir la transaccin los descriptores para el canal


Seleccionar la configuracin global de la transferencia DMA, tal como muestra la Figura 17. La Tabla 16
describe cada parmetro de configuracin del TD.
Figura 17. Aadir descriptores de transaccin

Hacer click en NEXT cuando haya terminado. Entonces se genera el cdigo necesario.

Paso 4: Copiar el cdigo creado por el Asistente


DMA
Despus de que se terminen de configurar los

Figura 18. Cdigo Generado

canales DMA y TD, el asistente creara el cdigo


para el canal DMA.
Este cdigo incluye la configuracines para el
canal DMA como para los TDs.
El cdigo se genera en una ventana de dilogo en
el Asistente DMA, como muestra la figura 18. Para
utilizar el cdigo, seleccionar todo dentro de la
ventana, copiarlo y pegarlo en su main.c.

Apndice C: El ajuste prioridad del canal de DMA


Cuando se activan varias peticiones de canal de DMA, los canales DMA son procesados por DMAC basado en
la configuracin de prioridad del canal. Pueden dar a cada canal DMA una de las ocho prioridades diferentes. La
prioridad del canal de DMA se establece en PSoC Creator - Design Wide Resources (*.cydwr) > DMA,, como
muestra la Figura 19.
Figura 19. Ajuste de prioridad del canal DMA

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

Apndice D: Ejemplos de Proyectos - Configuracin de la prueba


Ejemplo 1: Transferencia Perifrico-a-Perifrico - Eg1_ADC_DMA_DAC
En este ejemplo la frecuencia de muestreo del ADC (fs) es de 384 kHz. La salida se reconstruye mejor si la frecuencia
de entrada es menor que o igual a ~ 84kHz porque los ADCs delta sigma tienen un pasa bajo por naturaleza con una
cada de -3dB a 0,22 fs. La configuracin de la prueba es el siguiente:
1. Conectar el generador de funciones al pin P0 [2], entrada al ADC.
2. Ajuste el generador de funciones para obtener una onda sinusoidal de 100 Hz.
3. Conectar la punta del osciloscopio al pin P0 [0], la salida VDAC.
4. Generar (Build) el proyecto y programar el dispositivo.
5. Mirar la salida del pin P0 [0] en el osciloscopio. Debe ser una onda sinusoidal cuya frecuencia es de 100 Hz, la
misma que la de entrada.

Ejemplo 2: Transferencia Perifrico-a-Memoria - Eg2_ADC_DMA_Mem


La configuracin de la prueba es el siguiente:
1. Conectar la seal de entrada al pin P0[2], la entrada al ADC. Asegrese de que la entrada est dentro del rango
del ADC, VSSA a 2.048 V.
2. Conectar P6[1] al switch (SW1) en el DVK (kit de desarrollo).
3. Generar (Build) el proyecto.
4. Presione F5 o haga clic en el icono de Debug (depuracin), como muestra la Figura 20, para descargar el programa
e iniciar la depuracin.

Figura 20. Botn Debug (Depurar)

5. Aadir adc_sampleArray como una variable watch, tal como muestra la figura 21:

Figura 21. Variable Watch

6. Coloque un punto de interrupcin en el interior del bucle if (DMADone_flag), como muestra la Figura 22:

Figura 22. Agregar un Breakpoint

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)

Ejemplo 3: Transferencia Mermoria-a-Perifrico - Eg3_Mem_DMA_DAC


La configuracin de la prueba es el siguiente:
1. Conecte la punta del osciloscopio al pin P0[0], salida del VDAC.
2. Generar (Build) el proyecto y programar el dispositivo.
3. Observar la onda sinusoidal de frecuencia 7,8 kHz en el osciloscopio.

Ejemplo 4: Transferencia Memoria-a-Memoria Eg4_Mem_DMA_Mem


La configuracin de la prueba es el siguiente:
1. Conectar el mdulo LCD al header (conector) P18 (Mdulo LCD - Puerto 2) del kit de desarrollo PSoC CY8CKIT001.
2. Asegrese que el puente J12 est en la posicin ON para alimentar la pantalla LCD.
3. Generar (Build) el proyecto y programar el dispositivo.
4. Observe la pantalla LCD. La primera fila muestra el contenido del array Destino. Inicialmente todos los valores son
cero. Despus de transcurrido un segundo, la primera fila muestra 00 a 07, muestrando que el DMA ha transferido
con xito los datos desde la flash a la RAM. La segunda fila muestra el mensaje TRANSFERRED (TRANSFERIDO).
La figura 24 muestra un ejemplo de la pantalla LCD:
Figura 24. Demostracin en LCD de la transferencia DMA

Ejemplo 5: Concatenando TD Eg5_TD_Chaining


La configuracin para este ejemplo es el mismo que el del Ejemplo 2. La configuracin es el siguien te:
1. Conectar la seal de entrada al pin P0[2], entrada al ADC. Asegrese que la entrada est dentro del rango del ADC:
VSSA a 2.048 V.
2. Conectar P6[1] al switch (SW1) en el DVK (kit de desarrollo).
3. Generar (Build) el proyecto.
4. Presione F5 o haga clic en el icono de Debug (depuracin), como muestra la Figura 25, para descargar el programa
e iniciar el debugging (depuracin).

Figura 25. Botn Debug

5. Aadir adc_samplearray1 y adc_samplearray 2 como variables a monitorear como muestra la Figura 26.

Figura 26. Variable Watch (Monitor)

6. Coloque un punto de interrupcin en el interior del bucle if(DMADone_flag), como muestra la Figura 27.

Figura 27. Aadir punto de Interrupcin

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).

Apndice E: Preguntas Frecuentes (FAQ):


1. Cmo se puede "bufferear" ms de 4095 bytes utilizando DMA?
El nmero mximo de transferencia de un TD est limitada a 4095 bytes. Si necesita transferir ms de 4095 bytes
utilizando un nico canal de DMA, utilizar mltiples TDs y concatenarlos como se muestra en el ejemplo 5.
2. Cmo encontrar las direcciones de origen y de destino de los perifricos para la transferencia de datos DMA?
PSoC es altamente programable - muchos componentes son creados a partir de los bloques digitales y analgicas
programables, y la ubicacin fsica de un perifrico pueden cambiar en funcin del diseo. Por lo tanto, un mapa de
registro de todas las direcciones de origen y de destino no es posible, een su lugar, los registros de cada componente
se definen en los archivos de cabecera del API de componentes generadas por PSoC Creator durante el proceso de
construccin. Debe revisar estos archivos de cabecera para identificar las direcciones de registro del componente.

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.

Histrico del Documento


Ttulo del Documento: PSoC 3 and PSoC 5LP - Getting Started with DMA (Primeros Pasos con DMA)
AN52705
Numero del Documento: 001-52705
Revision ECN

Orig. of
Change

Submission Description of Change


Date

**

2710860

LNAT

05/25/09

New Application Note.

*A

2768731

LNAT

09/24/09

Updated the projects for PSoC Creator Beta 3 version.


Added information about configuring the Termout signals

*B

2951774

LNAT

06/14/10

Updated the projects for PSoC Creator Beta 4.1


Added more information regarding the DMA configuration

*C

2966485

LNAT

08/26/10

Updated the projects for PSoC Creator Beta 5.


Used DMA Wizard in the projects.

*D

3269575

LRDK

06/06/11

Rewritten in Simplified English.

*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

Project updates for PSoC Creator 2.0.


Updated in new template.

*G

3822782

ANCY

11/27/2012

Updated for PSoC 5LP.

*H

3844498

ANMD

12/18/2012

Re-written to improve clarity

*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.

Anda mungkin juga menyukai