--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
<main.c>
Hola,
Me parece que está mal LPCOpen, te paso a contar:
- El problema es que el DMA lee el DR del ADC en cualquier momento, no cuando el ADC termina. Por eso las muestras repetidas.
- El UM en la sección 47.7.3 (ADC -> DMA control) dice que el DMA tiene que leer el DR del canal que te interesa, no el GDR, para limpiar el request por DMA.
- Los ADC y DAC están conectados por BREQ al DMA, o sea van por burst. Acá entra en juego el burst size. En la misma sección del UM dice "If the
number of ADC channels is not equal to one of the predefined DMA-supported burst sizes (applicable DMA burst sizes are 1, 4, 8), set the burst size to one." En criollo, quiero leer un solo canal, burst size tiene que estar en 1.
Entonces, el archivo chip/src/gpdma_18xx_43xx.c tiene TODO MAL CONFIGURADO:
- Línea 68, vas a ver GPDMA_BSIZE_4 para ADC0 y para ADC1. Eso tiene que ir en GPDMA_BSIZE_1 (al menos para leer un solo canal).
- Línea 136, address del registro que lee el DMA, decía (&LPC_ADC0->GDR), tiene que decir (&LPC_ADC0->DR[1]) o el ch que corresponda, lo cual es un problema porque tenés que tocar acá si querés cambiar de canal. No sé si hay alguna función que puede modificarla en runtime, sino va a haber que inventar una.
En fin, modificá esas dos cosas en gpdma_18xx_43xx.c y te tendría que andar bien.
Saludos.
En principio me sucede lo mismo con el ejemplo que me acabas de pasar.Lo pruebo con un contador de ticks cada x ms. Por mas que modifique la frecuencia de sampleo del ADC, la interrupción de DMA salta con la misma frecuencia. Y en teoría, si por ejemplo bajo la freq de muestreo la interrupción debería suceder en un tiempo mayor.