Documento traducido del Inglés al Español por:
Authors: Anu M D, Lakshmi Natarajan
Ing. Edgardo Daniel Ucha. Ing. Brayan Andrés Bermudez. Para PSoC Latinoamérica
Associated Project: Yes Associated Part Families: All PSoC® 3 and PSoC 5LP parts 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 : AN52705
Traducción Bogotá DC Junio 2016
Resumen ........................................... ................................................................. ............................................ ............................................. .............................................. ............................................ ....................... .. 4 Introducción.................... Introducción.......................................... .............................................. ............................................. ............................................ ............................................. .......................................... .................... 4 Conceptos Básicos del DMA .......................................... ............................................................... ............................................ .............................................. ....................................... ................ 5 Configuración Configuración DMA .......................................... ................................................................ ............................................ ............................................. ............................................. ............................... ......... 6 Configuración del Canal .......................................... ................................................................ ............................................ ............................................. ........................................... .................... 7 Configuración Configuración TD ............................................. ................................................................... ............................................ ............................................ ............................................. ............................ ..... 8 Descripción general del componente DMA ............................................ ................................................................... ............................................. ............................. ....... 10 Conecciones del componente DMA ......................................... ............................................................... ............................................ ............................................. .......................... ... 10 Configuración Firmware del DMA .......................................... ................................................................. ............................................ ............................................ .......................... ... 11 Ejemplo 1: Transferencia periférica a periférico .......................................... ............................................................... ............................................ .................................. ........... 12 .................................................................. ............................................. ............................................ ............................. ....... 13 Ejemplo 1 Configuración DMA ........................................... Ejemplo 1 Código de Configuracion DMA ........................................... ................................................................. ............................................ ..................................... ...............15 Ejemplo 2: Transferencia Periférico-a-Memoria Periférico -a-Memoria .......................................... ............................................................... ............................................ .................................. ........... 16 Ejemplo 2 Configuración DMA .......................................... ................................................................ ............................................ ............................................ ................................. ........... 17 Ejemplo 2 Archivos del Proyecto ......................................... ............................................................... ............................................. ............................................. ............................. ....... 18 Ejemplo 3: Transferencia Memoria-a-Perif érico érico .......................................... ............................................................... ............................................ .................................. ........... 19 Ejemplo 3 Configuración DMA .......................................... ................................................................ ............................................ ............................................ ................................. ........... 20 Ejemplo 4: Transferencia Memoria-a-Memoria ........................................... .................................................................. ............................................ ................................ ........... 21 Ejemplo 4 Configuración DMA .......................................... ................................................................ ............................................ ............................................ ................................. ........... 22 .............................................. ............................................. ............................................ ............................. ....... 23 Ejemplo 4 Archivos del Proyecto................... Proyecto .......................................... Example 5: Concatenando TD ............................................ ................................................................... ............................................. ............................................ ................................. ........... 24 Ejemplo 5 Configuración DMA .......................................... ................................................................ ............................................ ............................................ ................................. ........... 25 Ejemplo 5 Archivos del Proyecto .......................................... ................................................................. ............................................. ............................................ ............................. ....... 25
Resumen ........................................... ................................................................. ............................................ ............................................. .............................................. ............................................ ....................... .. 4 Introducción.................... Introducción.......................................... .............................................. ............................................. ............................................ ............................................. .......................................... .................... 4 Conceptos Básicos del DMA .......................................... ............................................................... ............................................ .............................................. ....................................... ................ 5 Configuración Configuración DMA .......................................... ................................................................ ............................................ ............................................. ............................................. ............................... ......... 6 Configuración del Canal .......................................... ................................................................ ............................................ ............................................. ........................................... .................... 7 Configuración Configuración TD ............................................. ................................................................... ............................................ ............................................ ............................................. ............................ ..... 8 Descripción general del componente DMA ............................................ ................................................................... ............................................. ............................. ....... 10 Conecciones del componente DMA ......................................... ............................................................... ............................................ ............................................. .......................... ... 10 Configuración Firmware del DMA .......................................... ................................................................. ............................................ ............................................ .......................... ... 11 Ejemplo 1: Transferencia periférica a periférico .......................................... ............................................................... ............................................ .................................. ........... 12 .................................................................. ............................................. ............................................ ............................. ....... 13 Ejemplo 1 Configuración DMA ........................................... Ejemplo 1 Código de Configuracion DMA ........................................... ................................................................. ............................................ ..................................... ...............15 Ejemplo 2: Transferencia Periférico-a-Memoria Periférico -a-Memoria .......................................... ............................................................... ............................................ .................................. ........... 16 Ejemplo 2 Configuración DMA .......................................... ................................................................ ............................................ ............................................ ................................. ........... 17 Ejemplo 2 Archivos del Proyecto ......................................... ............................................................... ............................................. ............................................. ............................. ....... 18 Ejemplo 3: Transferencia Memoria-a-Perif érico érico .......................................... ............................................................... ............................................ .................................. ........... 19 Ejemplo 3 Configuración DMA .......................................... ................................................................ ............................................ ............................................ ................................. ........... 20 Ejemplo 4: Transferencia Memoria-a-Memoria ........................................... .................................................................. ............................................ ................................ ........... 21 Ejemplo 4 Configuración DMA .......................................... ................................................................ ............................................ ............................................ ................................. ........... 22 .............................................. ............................................. ............................................ ............................. ....... 23 Ejemplo 4 Archivos del Proyecto................... Proyecto .......................................... Example 5: Concatenando TD ............................................ ................................................................... ............................................. ............................................ ................................. ........... 24 Ejemplo 5 Configuración DMA .......................................... ................................................................ ............................................ ............................................ ................................. ........... 25 Ejemplo 5 Archivos del Proyecto .......................................... ................................................................. ............................................. ............................................ ............................. ....... 25
................................................................ ............................................ ..................................... ............... 26 Apéndice Apéndice A: DMA Pasos de Configuración .......................................... Paso 1: Inicialización Inicialización del canal c anal DMA ............................................ ................................................................... ............................................. ........................................ .................. 26 Paso 2: Asignación TD ......................................... ............................................................... ............................................ .............................................. ............................................. .....................27 Paso 3: Configuración TD ............................................. .................................................................... ............................................ ............................................ ..................................... .............. 27 Paso 4: Configurar fuente y destino de TD .......................................... ................................................................ ............................................ ..................................... ............... 28 Paso 5: Unir el TD con el canal ........................................... .................................................................. ............................................. ............................................ ............................. ....... 28 ................................................................... ............................................. ............................................ ............................. ....... 28 Paso 6: Habilitar el canal DMA ............................................ Otras funciones API del DMA ............................................ .................................................................. ............................................ ............................................ ................................. ........... 29 Apéndice B: Configuración del Asistente DMA ........................................... .................................................................. ............................................ ................................ ...........29 Paso 1: Seleccionar un canal DM A (instancia del componente DMA) ........................................... ............................................................. ..................29 Paso 2: Configuraciones Configuraciones globales. globales. ............................................ .................................................................. ............................................ ............................................ ......................29 Paso 3: Definir la transacción los descriptores para el canal ........................................... .................................................................. .......................... ... 30 Paso 4: Copiar el código có digo creado por el Asistente ............................................ .................................................................. ............................................ ......................... ... 31 Apéndice C: El ajuste prioridad del canal de DMA .............................................. .................................................................... ............................................ ......................... ... 31 Apéndice D: Ejemplos de Proyectos - Configur ación ación de la prueba ........................................... .................................................................. .......................... ... 32 Ejemplo 1: Transferencia Periférico-aPeriférico -a-Periférico Periférico - Eg1_ADC_DMA_DAC ............................................ ....................................................... ...........32 Ejemplo 2: Transferencia Periférico-a-Memoria Periférico -a-Memoria - Eg2_ADC_DMA_Mem .......................................... ........................................................ ..............32 Ejemplo 3: Transferencia Mermoria-a-Periférico Mermoria-a- Periférico - Eg3_Mem_DMA_DAC ............................................ ....................................................... ...........34 Ejemplo 4: Transferencia Memoria-a-Memoria – Memoria-a-Memoria – Eg4_Mem_DMA_Mem Eg4_Mem_DMA_Mem .......................................... ........................................................ ..............34 Ejemplo 5: Concatenando TD – TD – Eg5_TD_Chaining ............................................ ................................................................... ............................................ .....................34 Apéndice E: P E: Preguntas reguntas Frecuentes (FAQ): ............................................ .................................................................. ............................................ ..................................... ...............36 Histórico del Documento ........................................... .................................................................. ............................................ ............................................ ............................................. ......................37
La nota de aplicación AN52705 proporciona una introducción al acceso de memoria directa (DMA) que poseen PSoC 3 y PSoC 5LP. El DMA del PSoC puede transferir datos entre los periféricos dentro del chip y la memoria sin intervención del CPU. Esta nota de aplicación ilustra cómo configurar el DMA para la transferencia simple de datos, como así también de periférico a memoria, memoria a periférico, periférico a periférico y memoria a memoria, usando, para ello proyectos como ejemplo.
El controlador DMA (DMAC), que tiene el PSoC 3 y PSoC 5LP, puede transferir datos desde un origen a un destino sin la intervención de la CPU. Esto permite a la CPU para manejar otras tareas mientras el DMA efectúa 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 periféricos del chip incluyendo ADCs, DACs, filtro, USB, UART y SPI. Hay 24 canales independientes de DMA.
Esta nota de aplicación describe cómo configurar el DMA para la transferencia simple de datos. Incluye proyectos que muestran diferentes tipos de transferencias DMA: . Periférico a Memoria . Memoria a Periférico . Periférico a Periférico . Memoria a Memoria Esta nota de aplicación 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 introducción
la nota de aplicación AN54181,Getting Started with PSoC 3 (Comenzando con el PSoC3) y la nota de aplicación AN77759, Getting Started with PSoC5 (Comenzando con el PSoC5). Para una lectura más avanzada sobre DMA se puede recurrir al documento AN84810. Si desconoce el uso del PSoC Creator, pueden interiorizarse en la página PSoC Creator
El DMAC, que tienen el PSoC 3 y PSoC5LP, forman parte de un hub (concentrador) central llamado HUB Periférico (Peripheral HUB > PHUB) que conecta los periféricos, que se encuentran dentro del chip,como se muestra en la Figura 1
Figura 1. Concentrador Periférico (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 más periféricos. Los spokes, o rayos, pueden tener ser de 16 bits o 32 bits. Los periféricos
El ancho de los datos de un periférico es generalmente inferior o igual al ancho de datos del spoke (rayo) al cual está conectado. Si el ancho de datos de un periférico es mayor que la del spoke (rayo) al cual está conectado, la PHUB puede gestionar con el periférico 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 más detalles, PSoC 3 and PSoC 5LP Technical Reference Manuals (Manual de Referencia Técnica). Cada uno de los 24 canales DMA pueden transferir, independientemente, datos. Cada canal posee una cadena llamada Transaction Desc riptor (TD) (Descriptor, o descripción de Transacción)como se ve en la Figura 2. El TD contiene información como la dirección de origen, dirección de destino, la transferencia del conteo, y la siguiente TD dentro de la cadena. Puede haber un máximo de 128 TD’s. La combinación de un canal y TD describe la transferencia completa del DMA.
Cada canal DMA tiene una entrada de petición independiente, que inicia una transacción. Una solicitud DMA puede ser inicializada por un periférico o por la CPU. Cuando s e recibe una solicitud del DMA, el DMAC accede a los spokes (radios) conectados a la fuente y destino y mueve los datos según lo configurado dentro del canal y el TD asociado.
Una transferencia DMA es configurado mediante los regi stros de configuración pertenecientes al c anal y del TD. La Figura 3 muestra el canal y los parámetros de config uración TD.
La configuración de los parámetros del canal DMA se explica a continuación:
Los 16 bits superiores de una dirección de origen de 32 bits es configurado en el canal de registro de configuración
Los 16 bits superiores de una dirección de destino de 32 bits es configurado en este c anal de registro de configuración
Define el número de bytes que el canal DMA debe desplazar desde el origen al destino antes de que se libere el spoke (rayo). El DMAC toma posesión del spoke (rayo), transfiere el númer o de bytes especificado desde el origen a destino y luego libera el spoke (rayo). Para la próxima transferencia, vuelve a tomar posesión del spoke. Límite el conteo dentro del spoke, de transferencias DMA, a menos de o igual a 16.
Cuando se requieren múltiples transferencias de ráfaga para finalizar la transferencia de datos DMA, este bit determina la naturaleza de las ráfagas. Todas los bursts [ráfagas] posteriores después del primer burst se realizan automáticam ente sin una petición al DMA por separado. Sólo la primera transferencia de burst debe tener una solicitud del DMA.
Define el primer TD asociado al canal. El puntero a la primera TD es almacenada en la memoria de configuración del canal. Los punteros TD siguientes son almacenadas en la memoria de configuración TD, similar a una lista vinculada.
Define si retener la configuración original del TD para su posterior uso, para transferencias DMA subsiguientes. Por defecto las configuraciones TD son preservadas.
No preservar las configuraciones TD. Preservar las configuraciones TD.
Si se conservan las TD’s, el canal utiliza una memoria separada de la TD (correspondiente al número de canal) para realizar el seguimiento de la transacción en marcha; de lo contrario los registros originales de configuración del TD se utilizan como registros de trabajo para realizar el seguimiento de la actual tr ansacción.
Los parámetros de configuración del TD se explican a continuación:
Los 16 bits inferiores de los 32 bits de la dirección de origen configurado en el registro de c onfiguración TD
Los 16 bits inferiores de los 32 bits de la dirección de destino
El número total de bytes que se van a transferir desde el origen (fuente) a destino.
La cuenta de transferencia se usa junto con el parámetro de cuenta de burst. Por ejemplo, si desea mover 50 palabras de 2 bytes de un periférico de 16 bits a un búfer de memoria, el conteo de burst se establece en 2 y el conteo de transferencias se establece en 100.
Próximo TD, similar a una lista vinculada.
La Tabla 1 muestra las propiedades TD definidos por los campos de bits en el registro de configuración de propiedad TD. Tabla 1. Propiedades TD
Propiedades
Descripción
Si este bit está establecido, la dirección de origen se inc rementa a medida que avanza la transacción DMA. Si este bit está establecido, la dirección de destino se incrementa a medida que
avanza la transacción DMA. Si se establece, el DMA intercambia los bytes de los datos mientras se mueve datos desde el origen al destino. Define el tamaño 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 D MA.
0: Siguiente TD, en la cadena, sólo es ejecutado después de la siguiente solicitud d e DMA. 1: El siguiente TD, en la cadena, se ejecuta automáticamente después de terminada
la actual transferencia de TD. Si “seteado”, genera una señal DMA "hecho (finalizado)” después de la transferencia
de datos haya terminado. Esto se utiliza normalmente para crear una interrupción después de que la transferencia haya terminado. De ser “seteado”, la transacción en marcha puede terminarse mediante señal 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 periféricos del PSoC 3 utilizan el formato Little -Endian (PequeñoEndian). Por esta razón, el DMA debe estar configurado para intercambiar bytes cuando se desplaze datos de multiple-byte entre los registros ,de los periféricos, y la memoria del PSoC 3. Esto no es necesario para PSoC 5LP debido que ambos, periféricos y memoria , utiliza el mismo formato de endian.
Veamos ahora como configurar el DMA utilizando PSoC Creator.
Cualquier selección para este parámetro excepto "Inhabilitado",agrega
un
terminal
drq
al
La figura 4 muestra el componente del canal DMA
componente. El drq puede ser conectado a
en el Creador de PSoC.
cualquier señal de hardware, para activar el canal
Este componente se puede encontrar en la
DMA.
pestaña sistemas en el catálogo de componentes.
Sin el terminal DRQ, la operación del DMA se
Figura 4. Componente Canal DMA
activa sólo por la CPU.. Cuando este parámetro se establece en "derived", el tipo de disparo DMA - edge / level se determina
Terminales
a partir del origen del disparo DMA. Para mas
Opcionales
información,vea DMA componente hoja de datos.
: Cuando esta opción 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 terminal
TD
es
habilitado,
un
flanco
ascendente en este terminal detiene la transacción del DMA en curso. Tenga en cuenta que trq termina una cadena TD sólo si hay una rafaga
Puede establecerse los siguientes parámetros en la ventana de configuración del componente como
(burst) de transacción del DMA en curso. Consulte la hoja de componente para obtener más detalles.
se muestra en Figura 5. .Figura 5. Configuración DMA
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 interrupción, o a otro componente para acciones adicionales. Este parámetro define el tipo
de
señal
ascendente/Nivel).
Rising
Edge/Level
(Flanco
Establezca las propiedades del TD para definir si generara,o no, una señal en el terminal nrq , y si habilitar, o no, la terminación de TD utilizando trq.
El componente DMA genera un archivo fuente y el archivo de cabecera correspondiente para cada instancia DMA durante el proceso de construcción (building) del proyecto. Por ejemplo, si hay una instancia del componente DMA en su diseño que tiene el nombre DMA_1, entonces lo s archivos -DMA_1_dma.c y DMA_1_dma.h se crean durante el proceso de construcción. Estos archivos incluyen la API "DmaInitialize" que se utiliza para inicializar el canal DMA. Otras funciones del canal como la configuración del TD se incluyen en los archivos CyDmac.c y CyDmac.h en la carpeta fuente generada. A continuación se presentan los pasos de configuración 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 configuración de TD CyDmaTdSetConfiguration(TD_Handle,Transfer_Count,Next_TD,TD_Property);
4. Establecer la dirección 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 página 19. El asistente de DMA se puede utilizar para generar automáticamente el código para configurar el canal de DMA; véase el Apéndice B: Asistente de configuración de DMA en la página 21 para más detalles. Tener en cuenta que el asistente DMA soporta operaciones de DMA entre sólo un conjunto limitado de perifericos de PSoC. Si el asistente DMA no admite un periférico, debe configurar manualmente el canal DMA utilizando las funciones detalladas en el apéndice A. Lo que sigue a continuación son un conjunto de cuatro ejemplos que muestran en detalle cómo hacer transferencias DMA entre la memoria y los periféricos. Un quinto ejemplo
En este ejemplo se muestra cómo utilizar el DMA para hacer una transferencia periférico a periférico 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 Periférico a Periférico
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 . Después de recibir la petición, 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 periférico a periférico
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 Configuración
La configuración del canal tiene los 16 bits superiores de los 32 bits de la dirección de fuente y destino. CYDEV_PERIPH_BASE, definido dentro del archivo
cydevice.h,
archivo
generado
automáticamente por PSoC Creador, define la dirección base de todos los periféricos 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 próximo 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 relación con operación se repite en cada solicitud DMA.
El
los registros del componente, tal como muestra la parámetro Preserve TD es puesto en True. Tabla 3. Las definiciones sobre las direcció n pueden 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.
aplicación muestra este ejemplo. Véase el Apéndice D: Example Projects (Ejemplos de Proyectos)
Configuración de la prueba para obtener más información sobre cómo probar este proyecto.
El código de configuración del DMA para este ejemplo es visto mas abajo. Véase el Apéndice B: DMA
Wizard
configuración
Configuratiuon de
DMA)
para
( Asistente obtener
de más
información sobre cómo generar el código de configuración mediante el asistente de 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);
Este ejemplo muestra cómo hacer una transferencia periférico -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 periférica-a-memoria
La figura 9 muestra el diseño 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 señal EoC proveniente del ADC activa la petición 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 búfer de memoria RAM de destino, e incrementa la dirección de destino por 2. El contador de transferencias se decrementa en 2 después de cada Burst de transferencia. Esto se repite hasta que el contador de transferencia es puesto a 0, que a su vez genera una señal de "transacción completado" en el terminal NRQ del DMA, que activa la interrupción ISR_DMA_Done . En la rutina de servicio de interrupción se coloca un flag para indicar que la transacción se ha completado. El canal DMA es deshabilitado cuando se ha completado la transacción y de nu evo se habilita cuando el interruptor es oprimido de nuevo. Figura 9. Diseño, Transferencia Periférico-a-Memoria
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: Configuración del Canal
y la solicitud por ráfaga se establece en true.
El TD Preserve se establece en 1 (True), de manera que el ajuste original de TD, es decir, la dirección de origen, dirección de destino y el número de transferencias se conserven y las transacciones puedan ser repetidas.
Los 16-bits inferiores de dirección de origen y destino se especifican en la configura ción del La configuración del canal tiene los 16 bits superiores de la dirección de 32-bit tanto del origen
descriptor de transacción (TD [0]) como se ve en la Tabla 5.
y como destino. La dirección de origen es la misma que en el
Tabla 6: Valores de configuración
Ejemplo 1.
CYDEV_SRAM_BASE, definido en el archivo cydevice.h auto-generado por PSoC Creator, define la dirección base SRAM. Esto se usa con la macro HI16 para especificar los 16-bits superiores de la dirección 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 dirección de origen para 5LP PSoC pero no para PSoC 3. Esto se debe a que los 16-bits superiores de la dirección 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 inform ación
equivale a
específica perteneciente a Keil en los 16-bits
‘Número de muestras para ser almacenadas
superiores de la dirección de la variable. Por esta
(buffered) × Bytes por Muestra’
razón, HI16 (y adc_sampleArray) devuelve una
La
dirección incorrecta cuando se utiliza con el
incrementar la dirección de destino después de
propiedad
TD
está
configurado
para
finalización una vez que se encuentre el numero especificado de muestras en el buffer. Para el proyecto en PSoC 3, el TD también está configurado para intercambiar los bytes mientras mueve los datos del ADC a la memoria tal como se
El
proyecto
Eg2_ADC_DMA_Mem
que
se
encuentra dentro del archivo AN52705.zip, y que se adjunta con la presente nota de aplicación, comprueba
correspondiente a cada una de las propiedades del
configuración para este ejemplo es similar al del
TD se define en el archivo auto-generado, por
ejemplo
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"
1.
este
Los
ejemplo.
argumentos
Este
código
de
explica en la sección propiedad TD. Los bits
pasados
a
las
de Canales y TD mostradas anteriormente. Véase
(Or-ed) para establecer la propiedad de TD. el Apéndice D: Example Projects– Test Setup Con el fin de detener las transferencias del DMA
(Ejemplos de Proyectos-Configuración Prueba)
después de almacenar en el buffer el número
para más detalles sobre cómo probar este
especificado de muestras, TD [0] se concatena a
proyecto.
‘DMA_DISABLE_TD’ el cual deshabilita el canal DMA.
Este ejemplo muestra cómo utilizar el DMA para la transferencia de datos desde la memoria a un periférico. El ejemplo demuestr a la generación de ondas usando un DAC, como muestra la figura 10. Figura 10. Diagrama en bloques, Transferencia memoria-a-periférica
TD Property : Increment Source address
Una tabla de búsqueda (LUT) sinusoidal con 128 puntos se
La dirección de origen es incrementado en uno y la cuenta de
almacena en la memoria flash. Estos valores se envían
transferencia disminuye en uno después de cada transmisión
secuencialmente a un DAC, utilizando el DMA, para crear una
de Burst. Esto continúa hasta que todos los valores de la t abla
onda sinusoidal. Figura 11 muestra el dis eño para el proyecto.
sean enviados a DAC.
Un
reloj
es
el
componente
utilizado
para
generar,
periódicamente, peticiones DMA (DRQ). Cuando se recibe la petición, el canal DMA trae un byte de datos de la tabla de búsqueda (LUT) y lo escribe en el registro de datos DAC
Figure 11. Top Design, Memory-to-Peripheral Transfer
Las configuraciones del canal DMA y del TD para este proyecto se dan en las Tablas 7 y 8.
Tabla 8. Configuración TD[0]
Tabla 7. Configuración del Canal
La cuenta de transferencia es puesta al número total de bytes en la tabla (LUT) del seno.
El origen de la transferencia DMA es la tabla array
El TD está configurado para incrementar la
(matriz) de la sinusoide que se mantiene en la
dirección de origen, es decir, al puntero de la tabla
memoria flash.
(lut), después de cada transferencia de Burst.
El HI16 (sineTable) establece los 16 bits superiores de la dirección de origen para PSoC 5LP mientras que HI16 (CYDEV_FLS_BASE) se utiliza para identificar los 16 bits superiores de dirección de origen para PSoC 3 por las razones mencionadas
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 petición del DMA. Por lo tanto,la cuenta del Burst se establece en 1 byte y la petición por Burst se establece en true.
El
proyecto
Eg3_ADC_DMA_Mem
que
se
encuentra dentro del archivo AN52705.zip, y que se adjunta con la presente nota de aplicación, comprueba
este
ejemplo.
Este
código
de
Las configuraciones TD originales se conservan de
configuración para este ejemplo es similar al del
modo que pueda ser reutilizado.
ejemplo
Los 16 bits más bajos de las direcciones de origen y de destino se establecen con el macro LO16 como se indica en la Tabla 8.
1.
Los
argumentos
pasados
a
las
funciones se dan en las Tablas de configuraciones de Canales y TD mostradas anteriormente. Véase el Apéndice D: Example Projects– Test Setup (Ejemplos de Proyectos-Configuración Prueba) para más detalles sobre cómo probar este proyecto.
Este ejemplo se muestra cómo utilizar el DMA para hacer una transferencia de memoria -a-memoria. También muestra cómo 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 petición por CPU, como la figura 12 muestra. Figura 12. Diagrama en bloques, Transferencia de memoria-a-memoria
La figura 13 muestr a el diseño del proyecto. La función
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 después que el dispositivo de se haya encendido.
Cuando se complete la transferencia, se genera un
Cuando se recibe una petición 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
interrupción 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. Diseño: Transferencia Memori-a-Memoria
El parámetro petición por Burst se establece en false para que las peticiones por separado no sean Las configuraciones del canal DMA y TD para el
necesarios para cada transferencia del Burst.
proyecto se dan en la Tabla 9 y 10. Tabla 10. Configuración TD[0]
Tabla 9. Configuración Canal
Los 16 bits más bajos para las direcciones de la La fuente para la transferencia del DMA es el
fuente y de destino para la configuración 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 dirección 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
dirección de destino en la SRAM se establecen
dirección de origen, es decir, el puntero de una
usando la macro HI16 (CYDEV_SRAM_BASE).
array del flash y la dirección de destino, es decir, el puntero de una array de la RAM, después de cada
La cuenta del Burst es puesta a 1-byte de manera
Burst de transferencia. El TD es También
que el DMA pueda leer byte por byte desde la
configurado para enviar un pulso de término a
memoria flash y lo escribe en la array (matriz) de la
travez de NRQ después 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 rápidas.
para indicar que la transferencia se ha completado.
Sin
embargo,
también
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 finalización de la transferencia.
sea
compartida por otros canales DMA. Puesto que la transacción tiene que suceder una sola vez, la configuración TD no necesita ser
El
proyecto
Eg4_ADC_DMA_Mem
que
se
encuentra dentro del archivo AN52705.zip, y que se adjunta con la presente nota de aplicación, comprueba
este
ejemplo.
Este
código
de
configuración 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. Véase el Apéndice D: Example Projects– Test Setup (Ejemplos de Proyectos-Configuración Prueba) para más detalles sobre cómo probar este proyecto.
El canal DMA se configura para realizar dos transacciones (operaciones): Este ejemplo muestra cómo utilizar varios TDs con un solo canal y como concatenarlos. En este ejemplo los
* Transacción 1: ADC a RAM buffer1
datos del ADC se envían a dos buffers RAM por
* Transacción 2: ADC a RAM buffer2
separados, una después de la otra, utilizando un único canal DMA y dos TDs
Estas dos operaciones se configuran usando, por separado, los descriptores de transacción - TD [0] y TD [1] - y son concatenados entre sí usando la función TD concatenar (chaining) del DMA, como muestra la figura 14.
Figura 14. Diagrama en Bloques, Concatenamiento TD
Esta forma de configuración del TD puede utilizarse también para superar el límite de la cuenta de transferencia máxima 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 diseño para el proyecto es el mismo que en el Ejemplo 2.
Tabla 13. Configuración TD[1]
Las configuraciones de TD y del canal para este proyecto son dada en las Tablas 11, 12 y Tabla 13.
Tabla 11. Configuración Canal
Las configuraciones TD son similares a la del Ejemplo 2. El siguiente parámetro TD, DT [0], se establece en TD
[1],
y
viceversa,
para
transacciones.
Tabla 12. Configuración 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 a plicación, comprueba
este
ejemplo.
Este
código
de
configuración 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. Véase el Apéndice D: Example Projects – Test Setup (Ejemplos de Proyectos-Configuración Prueba) para más detalles sobre cómo probar este proyecto.
Recopilando Esta nota de aplicación ha descrito al controlador DMA en PSoC 3 y PSoC 5LP. El uso de ejemplos sencillos con PSoC Creator también se mostro, en esta nota de aplicación, cómo configurar el DMA para diferentes tipos de transferencias de datos. Para información más avanzada, consultar los Manuales Técnicos de Referencia de SoC 3 y PSoC 5LP y a la Hoja de datos del componente DMA dentro del PSoC Creator.
: Anu M.D. Sr. Applications Engineer BE in Electronics and Communication
Paso 1: Inicialización del canal DMA Channel_Handle = DMA_DmaInitialize( DMA_BYTES_PER_BURST, DMA_REQUEST_PER_BURST, HI16(Source Address), HI16(Destination Address))
La función API DmaInitialize () configura varios parámetros del canal DMA como se muestra a continuación: *
el número de bytes a ser leído y escrito por el canal DMA en un Burst (r áfaga).
Por ejemplo, si desea definir que el DMA recoja un dato de 8-bit del ADC, poner este parámetro en 1, ya que el canal DMA debe mover 1 byte de la fuente a destino por cada petición. O, si se quiere recoger 16 -bits de datos del ADC, poner este parámetro en 2.
*
Cada Burst (ráfaga) debe tener una petición por separado.
De ser puesto en 1, se debe solicitar individualmente cada transferencia de Burst. De ser puesto en 0, todos los Bursts subsiguiente después del primer Burst s on automáticamente realizados tener que peticionar por separado. (Sólo la primera transferencia Burst debe tener una petición del DMA).
*
Los 16 bits superiores de la dirección 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 dirección.
*
los 16 bits superiores de la dirección 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 información especifica de Keil en los 16 bits superiores de las direcciones de las variables. Por esta razón, 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 dirección 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 dirección superior Source
DMA_SRC_BASE
Peripheral
CYDEV_PERIPH_BASE
RAM
CYDEV_SRAM_BASE
TD_Handle = CyDmaTdAllocate(); La función 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 múltiples TDs, llamar a la función varias veces.
Paso 3: Configuración TD CyDmaTdSetConfiguration(TD_Handle, Transfer_Count, Next_TD, TD_Property); La función API CyDmaTdSetConfiguration() configura un TD, utilizando los siguientes parámetros: un identificador devuelto, previamente, por la función CyDmaTdAllocate()
*
*
*
el número total de bytes a mover desde origen a destino.
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 después que la transferencia TD es completada.
*
Usar los flags de registro de configuracion del TD como se muestra en la Tabla 15 para establecer
las propiedades de la transacción 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
Creator durante el proceso de construcción (build).
CyDmaTdSetAddress(TD_Handle, LO16(source), LO16(destination))
Debe revisar estos archivos de cabecera para identificar
las
direcciones
de
registro
del
componente.
La función API CyDmaTdSetAddress() establece las direcciones de fuente y de destino de un TD, utilizando los siguientes parámetros: un identificador devuelto, previamente,
*
CyDmaChSetInitialTd(Channel_Handle, TD_Handle) La función API CyDmaChSetInitialTD() establece el
por la función CyDmaTdAllocate()
primer TD del canal DMA: *
los 16 bits inferiores de la dirección de *
fuente
el manejo de la instancia de
DMA devuelto por la función DMA_DmaInitialize() *
los 16 bits inferiores de la
dirección de
PSoC
es
destino
altamente
componentes
se
programable
crean
de
los
-
* un manejador previamente devuelto por la función CyDmaTdAllocate()
muchos bloques
programables analógicos y digitales, y la ubicación física de un periférico pueden cambiar en función del diseño. Por lo tanto, no es posible un mapa un
Paso 6: Habilitar el canal DMA CyDmaChEnable(Channel_Handle, Preserve_TD) La función API CyDmaChEnable() habilita el canal DMA:
listado de registro de todos las direcciones de fuente y destino.
* el manejador de la instancia DMA devuelto por la función DMA_DmaInitialize()
En su lugar, los registros de cada componente se
* Si es TRUE (verdad), el canal DMA conserva las configuraciones TD (fuente, destino y conteo de transferencia) para que TD se puede
definen en los archivos de cabecera de la API de
Otras funciones API del DMA Par a activar un canal DMA desde una petición de la CPU, utilice esta función: CyDmaChSetRequest(Channel_Handle, CPU _REQ); Para deshabilitar un canal DMA, usar esta función: CyDmaChDisable(Channel_Handle);
*
el nombre de la instancia del componente
DMA en su proyecto Hacer click en
cuando terminemos
Paso 2: Configuraciones globales. Seleccione la configuración global de transferencia global (global settings) DMA, tal como muestra la Figura 16: Figura 16. Ajustes Globales
Como una alternativa a los pasos descritos en el Apéndice A, el Asistente de DMA puede hacer fácil el definir la configuración de firmware de un canal DMA y TD. Sin embargo, el asistente admite sólo unos pocos periféricos como es la fuente o destino DMA. Si no se admite un periférico, siga los pasos de configuración que se describen en el Apéndice A. Utilice este cuadro de diálogo para seleccionar los Para iniciar el asistente de DMA, ir a
parámetros de configuración DMA:
. los 16 bits superiores de las Paso 1: Seleccionar un canal DMA (instancia del
direcciones de fuente y destino
componente DMA) Seleccione el canal DMA que se va a configurado,
: cantidad de bytes a moverse en un solo Burst
como muestra la Figura 15:
si cada Burst requiere una solicitud por separado el número de descriptores de transacción que van a estar asociadas con el canal DMA (1 a 128). 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 parámetros del diálogo de la siguiente
DISABLED (0xFE). Si es un bucle, es la primera
manera:
TD.
Seleccionar la configuración global de la transferencia DMA, tal como muestra la Figura 17. La Tabla 16 describe cada parámetro de configuración del TD. Figura 17. Añadir descriptores de transacción
Hacer click en
cuando haya terminado. Entonces se genera el código necesario.
Paso 4: Copiar el código creado por el Asistente DMA Después de que se terminen de configurar los
Figura 18. Código Generado
canales DMA y TD, el asistente creara el código para el canal DMA. Este código incluye la configuraciónes para el canal DMA como para los TDs. El código se genera en una ventana de diálogo en el Asistente DMA, como muestra la figura 18. Para utilizar el código, seleccionar todo dentro de la ventana, copiarlo y pegarlo en su main.c.
Cuando se activan varias peticiones de canal de DMA, los canales DMA son procesados por DMAC basado en la configuración 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 más
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 caída de -3dB a 0,22 fs. La configuración 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.
La configuración de la prueba es el siguiente:
1. Conectar la señal de entrada al pin P0[2], la entrada al ADC. Asegúrese 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 (depuración), como muestra la Figura 20, para descargar el programa e iniciar la depuración.
Figura 20. Botón Debug (Depurar)
5. Añadir adc_sampleArray como una variable watch, tal como muestra la figura 21:
Figura 21. Variable Watch
6. Coloque un punto de interrupción en el interior del bucle if (DMADone_flag), como muestra la Figura 22:
Figura 22. Agregar u n 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 búfer. La ejecución se detiene en el breakpoint (punto de interrupción) después que la DMA haya transferido el número e specificado 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)
La configuración 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.
La configuración de la prueba es el siguiente: 1. Conectar el módulo LCD al header (conector) P18 (Módulo LCD - Puerto 2) del kit de desarrollo PSoC CY8CKIT001. 2. Asegúrese que el puente J12 está en la posición 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. Después 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 (TRANSFERID O). La figura 24 muestra un ejemplo de la pantalla LCD: Figura 24. Demostración en LCD de la transferencia DMA
La configuración para este ejemplo es el mismo que el del Ejemplo 2. La configuración es el siguien te:
1. Conectar la señal de entrada al pin P0[2], entrada al ADC. Asegúrese 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 hag a clic en el icono de Debug (depuración), como muestra la Figura 25, para descargar el programa e iniciar el debugging (depuración).
Figura 25. Botón Debug
5. Añadir 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 interrupción en el interior del bucle if(DMADone_flag), como muestra la Figura 27.
Figura 27. Añadir punto de Interrupción
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 ejecución se detiene en el punto de interrupción, después que DMA haya transferido el número especificado de muestras del ADC a la memoria. Para verificar el resultado, monitorear adc_sampleArray1 y adc_sampleAv en la ventana de inspección, tal como muestra la Figura 28 Figura 28. Muestras del ADC en la ventana Watch (inspección).
1. ¿Cómo se puede "bufferear" más de 4095 bytes utilizando DMA? El número máximo de transferencia de un TD está limitada a 4095 bytes. Si necesita transferir más de 4095 bytes utilizando un único canal de DMA, utilizar múltiples TDs y concatenarlos como se muestra en el ejemplo 5.
2. ¿Cómo encontrar las direcciones de origen y de destino de los periféricos para la transferencia de datos DMA? PSoC es altamente programable - muchos componentes son creados a partir de los bloques digitales y analógicas programables, y la ubicación física de un periférico pueden cambiar en función del diseño. 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 construcción. Debe revisar estos archivos de cabecera para identificar las direcciones de registro del componente.