Autor Tema: dudas DMA  (Leído 6839 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
dudas DMA
« en: 23 de Febrero de 2014, 12:09:19 »
Buenas, si bien en la facu estudimos algo de dma, fue en pc y teórico y nada de implementación en micros.
El tema es que quiero empezar a hacer uso de esta funcionalidad si es que realmente me sirve.

la idea es implementarlo en el osd, puntualmente en el código de acá http://www.todopic.com.ar/foros/index.php?topic=42254.msg350993#msg350993

como ven, para sacar los datos por el SPI armo un array de char y después en funcion de la línea en la que me encuentro y de la posición horizontal, dada por el timer, saco la info. como estoy usando el spp configurado como spi, veo que tiene dma (estoy hablando del lpc1769).
la idea sería si es posible configurar el dma, armar en memoria toda la info a envia y que el timer dispare el pedido de dma, de modo tal que el software se libere y todo el proceso de envío de datos a la pantalla se haga por hardware.

entonces mis dudas son, se puede usar para eso el dma? ahorraré tiempo de micro con el uso de dma en este caso.

el tema es que con el micro voy a tener que hacer muchas cosas, la funcion de osd, lalectura del gps, la lectura de los sensores de la imu por i2c, el calculo de la DCM, la lectura de las ordenes del radiocontrol, el manejo de los 4 esc de los motores (4x pwm), la lectura del ina219 para medición de corriente y tensión y varias cosas más... pensba que usar dma podría ayudar al proceso...

Saludos!
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: dudas DMA
« Respuesta #1 en: 27 de Febrero de 2014, 10:52:57 »
Me respondo solo luego de una basta investigacion. No solo que el DMA sirve para esto, sino que es la funcion del micro que más deberiamos explotar.

Por ahora estoy leyendo:

http://www.nxp.com/documents/application_note/AN10850.pdf

y una implementacion práctica en:

http://msys-mv.blogspot.com.ar/2011/01/dma-in-lpc17xx.html

Cuando tenga todo armado y empiece a probar reporto resultados.

Saludos!
-
Leonardo Garberoglio

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: dudas DMA
« Respuesta #2 en: 27 de Febrero de 2014, 11:12:59 »
Poder se puede, yo utilizo mucho la DMA porque es muy util para todo, te ahorras codigo y encima evitas tener que hacer tu propia funcion de transferencia.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: dudas DMA
« Respuesta #3 en: 27 de Febrero de 2014, 11:15:35 »
Donde hay info para los PICs ??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: dudas DMA
« Respuesta #4 en: 27 de Febrero de 2014, 11:34:51 »
Donde hay info para los PICs ??

aquí:

http://www.todopic.com.ar/foros/index.php?topic=38271.0

Realmente es fantástico el uso de DMA, cuanto más leo más me digo "como no lo usé acá o allá"... es tremendo el código que te ahorrás y el tiempo de CPU!!!!

sds.
-
Leonardo Garberoglio

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: dudas DMA
« Respuesta #5 en: 27 de Febrero de 2014, 11:43:10 »
Hola Leo,

El tema de los DMA en micros al alcance del hobbista es bastante reciente. Si bien hace décadas que existe el DMA en CPUs de PC y otros, en  microcontroladores accesibles a mercados minoristas no han sido tan populares en el pasado. Creo que por eso en parte muchos desconocen directamente lo que es el DMA.
Personalmente no lo he usado nunca en los ARM, ni PIC. Sí lo he usado en procesadores de PC y en algún que otro microprocesador (Hitachi SH2 y Motorola 68000).

Igualmente, como decís, son de gran ayuda para copiar memoria, volcar datos desde un periférico, etc. sin que el CPU intervenga

Saludos!
« Última modificación: 27 de Febrero de 2014, 11:46:31 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: dudas DMA
« Respuesta #6 en: 27 de Febrero de 2014, 11:54:17 »
.... El tema de los DMA en micros al alcance del hobbista es bastante reciente. Si bien hace décadas que existe el DMA en CPUs de PC y otros, en  microcontroladores accesibles a mercados minoristas no han sido tan populares en el pasado. Creo que por eso en parte muchos desconocen directamente lo que es el DMA.....

Bruno, como andas!

A mi siempre me quedó el recuerdo de la facu (tecnicas digitales 3) cuando dimos DMA en CPUs de PC lo serprendente que me pareció y lo útil. Totalmente de acuerdo en que en los micros de gama baja no hay DMA y por eso no debe ser tan popular.
Ahora con el LPC si todo es como me lo imagino es una barbaridad!

Configuro un canal del DMA que se dispare por un timer (ver el OSD) para sacar la info por SPI. Con esto el micro ya queda libre durante todo el tiempo que tardaba en mandar los datos a la pantalla, tengo que calcularlo, pero es mucho.
Configuro otro canal para lectura de sensores por I2C. De esta forma me olvido de hacer todo el software que se encarag de leer los sensores, simplemente me encargo de ir a la posicion de memoria donde dije que se almacenen las lecturas y uso los valores almacenados.

Todo lo que tiene que ver con comunicacion entre periféricos y memoria queda transparente para el software... solo hay que ir a la memoria y leer los valores!!!

Lo que no sé aún es como sería con el I2C, el tema direcciones de dispositivo, registros a leer, etc. eso tengo que verlo... por ahora con el SPI ya tengo bastante!

Saludos!
-
Leonardo Garberoglio

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: dudas DMA
« Respuesta #7 en: 27 de Febrero de 2014, 15:25:43 »
Me interesa, me interesa...
de los pies a la cabeza !!


(que antiguedad !!) :D :D :D

Igual habiendo leído un poco lo que puso el mago de Inglaterra, sigo sin entender como funcionaria, por ejemplo si tengo que leer un conversor A/D externo por SPI, que no admite DMA (creo) como el CS5534 de Cirrus Logic, como se haria??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: dudas DMA
« Respuesta #8 en: 27 de Febrero de 2014, 15:42:26 »
Me interesa, me interesa...
de los pies a la cabeza !!


(que antiguedad !!) :D :D :D

Igual habiendo leído un poco lo que puso el mago de Inglaterra, sigo sin entender como funcionaria, por ejemplo si tengo que leer un conversor A/D externo por SPI, que no admite DMA (creo) como el CS5534 de Cirrus Logic, como se haria??

es la duda parecida a como hago para leer sensores por I2C... o sea, el modulo DMA del uC como configura al periferico para que mande los datos?...
creo que la cosa va por "de que forma se dispara el DMA". Generalmente uno configura el periferico origen, el destino, las direcciones y "el disparador" del DMA. En mi caso, cuando quiero sacar datos el disparador es un timer... ahora, para recivir....
Hay que seguir leyendo... En el post de merlinz no esta la respuesta?

Sds.!
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: dudas DMA
« Respuesta #9 en: 27 de Febrero de 2014, 16:10:07 »
Bueno, em ARM se puede y si bien no es fácil, aquí hay una explicacion:

https://mbed.org/questions/1237/Possible-to-use-DMA-for-SPI-Master-read/

Aparentemente (nunca use el SPI para comunicacion, solo lo hice para sacar datos serie velozmente), el SPI es full duplex y constantemente el maestro como el esclavo envían informacion. Mientras el Maestro envía comando, el esclavo envía NULL's. Es así? bueno, teniendo en cuenta eso para los buffer's entonces se configura el ADC para que envíe un grupo de datos y dos canales DMA. Un canal se encarga de sacar tantos nulls como datos se quieran leer (entiendo que para que se generen las señales de clock) y otro canal DMA para que lea los datos que entran por el SPI... de esta forma funcionaría en un ARM. Hay que tener en cuenta que los canales de DMA son en una sola direccion, por lo que para hacer una comunicacion full duplex hay que configurar 2 canales....

Como se hace en PIC? ni idea!!!!! jjjajaja estimo que de forma similar....

Saludos!
-
Leonardo Garberoglio

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: dudas DMA
« Respuesta #10 en: 27 de Febrero de 2014, 16:16:15 »
El i2c creo que no acepta DMA, en microchip por ejemplo no lo acepta, solo spi, en arm no lo se pero creo que es igual.

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: dudas DMA
« Respuesta #11 en: 27 de Febrero de 2014, 16:34:37 »
Efectivamente, los LPC17xx no pueden hacer uso del DMA para I2C y por lo que estoy leyendo tampoco sería útil tampoco:

http://www.embeddedrelated.com/groups/lpc2000/show/54656.php

Saludos!
-
Leonardo Garberoglio

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: dudas DMA
« Respuesta #12 en: 27 de Febrero de 2014, 17:32:55 »
Buscatelo en SPI y te servira. Fijate si es util el DMA, tengo una memoria externa (MRAM) aunque funciona como una flash pero mejor, pues si quiero grabar 200bytes simplemente inicio la transferencia y el DMA se encarga de pasar esos 200bytes a la RAM sin necesidad de HACER NADA MAS  :-/

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: dudas DMA
« Respuesta #13 en: 27 de Febrero de 2014, 17:41:08 »
Claro, creo que ahí esta el tema. El DMA estoy viendo que es útil en dos situaciones:
Transferencia de mucha informacion entre periferico y uC (el ejemplo que pones)
Muchas transferencias de poca informacion. Este es el caso de mi OSD, en el que tengo que enviar pequeñas cantidades de datos, pero son muchísimos datos y estan siempre en la misa posicion de memoria.

en esos casos es muy beneficioso el uso de DMA...

Saludos!
-
Leonardo Garberoglio

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: dudas DMA
« Respuesta #14 en: 27 de Febrero de 2014, 17:50:23 »
otro ejemplo que te pongo es el siguiente:

Tengo un IC ADC externo, este tiene 16 canales. Pues con el DMA+SPI lo activo y me olvido totalmente de hacer nada mas, cuando necesite saber que valor tiene un canal simplemente accedo a la memoria CANAL
  • y ahi obtengo el resultado del ultimo valor recogido. Todo esto esta ordenado, es decir el canal 0 pertenece a la memoria CANAL[0] asi ordenadito. Tambien se puede usar con el ADC interno el MCU el cual tambien tengo 5 canales sampleando y cuando quiera ver el valor de ese canal simplemente accedo a la memoria CANAL
  • .


 

anything