Efectivamente Manolo.
El DMA según he leido, es para poder programar que los periféricos escriban o lean en un rango de memoria del PIC automáticamente sin necesidad de que el procesador los atienda. Con esto se puede asignar un buffer de memoria a cada periférico de tamaño variable.
Por ejemplo, si quieres enviar 80 caracteres por RS-232, antes tenías que atender una interrupción cada 2 bytes o 4 bytes enviados. Ahora, el micro los escribe en memoria de forma consecutiva, se programa el DMA para que envie esa zona de memoria a la UART y listo. Cuando acabe la transmisión se generará una sola interrupción, por lo que se ahorra en pérdidas de tiempo atendiendo interrupciones. Lo mismo para el SPI, I2C, CODEC, etc...
En mi caso, el módulo del codec de un 30F6012 tiene un buffer de 4 'ridiculos' bytes. Si quiero muestrear audio con una calidad aceptable, tengo que muestrear y procesar esos 4bytes a 32KHz, lo que significa una interrupción cada 32us aproximadamente. Con el DMA podré programar un buffer con los bytes que yo quiera y las interrupciones no se notarán tanto, ya que saltarán cada 2048 o 4096 bytes.