Estimados, tiro una consulta a ver si alguien me tira un salvavidas.
Estoy usando, o intentando usar, el DMA del LPC1769 disparado por el adc (y el adc por el timer). Mi idea es muestrear un canal del ADC, llenar un buffer con el DMA y que salte la irq cuando el buffer se llene. Avancé bastante, pero me encuentro con varios problemas.
- Disparo el DMA con la interrupción del ADC, pero la interrupción del dma no se activa al llenar el buffer, se activa con cada muestra nueva.
- la irq del DMA no limpia el bit de interrupción pendiente del ADC por lo que si no lo limpio en una rutina externa, la isr del dma se queda pegada.
Estuve trabajando tanto con la librería de LPCOpen y CMSIS, lo probé tanto con el esquema de memoria lineal como con listas enlazadas, pero no logro solucionar lo anterior.
Por otro lado, el manual del LPC1769 me resulta un poco confuso con algunos modos que no encuentro bien la definición, por ejemplo Modo Burst, Modo Last Burst (qué diferencia hay entre uno y otro? y que implica que sea modo burst?). Entiendo que con cada REQUEST, el DMA inicia N transferencias (lo indicado en los campos SBSize y DBSize del registro Control) de una del tamaño indicado (SWidth y DWidth) si esta en modo burst, y cuando las termina, decrementa en 1 la cuenta. Cuando llega un nuevo REQUEST, empieza otra vez el proceso, así hasta terminar la cuenta indicada en el campo TransferSize del registro Control. Cuando termino la cuenta, puede generar una interrupción TerminalCount. Es correcto esta forma de interpretarlo? el REQUEST debería llegar en mi caso con cada interrupción del ADC (que tiene que tener activada la irq individual del canal pero no el general en el NVIC)
Hay alguna documentación aparte del Manual UM10360 y la AN10917 donde se explique más a fondo el funcionamiento del DMA de NXP?
Desde ya mil gracias a todos!