Lo más probable es que el DMA se utilice aquí para que el DAC pueda tener alguna temporización regular, generar una forma de onda cambiando la salida analógica en algún intervalo conocido.
Sí, si se trata de un autobús compartido... hay que compartirlo.
La cpu no siempre utiliza el bus, por lo que a veces es una buena idea compartir con un motor dma. Y, por supuesto, esto significa que las prioridades se involucran, a veces es sólo quién llegó primero (por ejemplo, tener un comando fifo en frente del recurso, y las solicitudes fifo up, en el orden en que llegan, sí que sería no-necesariamente-determinista). En un caso como este puedes querer que la dma tenga prioridad sobre la cpu para que las cosas sensibles al tiempo como los DACs o ADCs tengan un tiempo determinista. Depende de cómo hayan decidido implementarlo.
La gente a veces tiene esta suposición, a menudo incorrecta, de que la dma es gratuita. No lo es, sigue consumiendo tiempo de bus, si se comparte con la cpu (que eventualmente lo es, ya que habla con un recurso con el que la cpu puede hablar) entonces la cpu y/o la dma se detienen, por lo que la cpu todavía tiene que esperar algún tiempo, en algunas implementaciones (probablemente no su microcontrolador) la cpu se detiene por completo hasta que la dma se completa, la cpu se detiene por la duración. Solo depende de la implementación. La parte libre de esto es que la cpu no tiene que estar constantemente siendo interrumpida o sondeando o conteniendo la respiración por algún evento para alimentar los datos. Puede tomarse su tiempo para crear el siguiente búfer para dma. Tiene que mirar para la transferencia dma para completar y tratar con eso, pero en lugar de decir cada byte es ahora múltiples bytes, algún bloque de datos.
No hay una respuesta universal. "Depende"... del diseño específico de la cosa concreta que estés utilizando. Incluso dentro de un diseño de chip/placa/sistema puede haber múltiples motores dma y no hay razón para asumir que todos funcionan de la misma manera. Para cada caso tienes que averiguarlo, y desafortunadamente, a menudo no lo documentan o lo hacen lo suficientemente bien. Así que puede que tengas que crear algunos experimentos si es una preocupación.
9 votos
Te sugiero que mires las características de tu CPU y si puede hacer algo más que acceder a la memoria. He oído hablar de algunas CPUs que pueden hacer cosas como decisiones o cálculos, no estoy seguro de si esto es común en absoluto..
0 votos
¿Debe la CPU dedicar su tiempo a transferir datos a un puerto de E/S o delegar la tarea en un dispositivo dedicado?
0 votos
Sí, la CPU puede hacer otras cosas, pero en un sistema embebido probablemente pasa mucho tiempo interactuando con periféricos, especialmente puertos de E/S. ¿No tendría más sentido tener un bus de datos extra sólo para DMA? ¿No tendría más sentido tener un bus de datos extra sólo para DMA? ¿O normalmente no es necesario? La situación en la que querrías un bus extra es cuando estás tratando de empujar los límites de tu hardware, que asumo es cuando querrías usar DMA de todas formas.
1 votos
Ejemplo simple, digamos que quieres hacer muchas impresiones de información a un puerto serie. Puedes sentarte y esperar a que se envíe cada byte (lento), copiarlo en un buffer y luego usar interrupciones en la CPU para enviar cada byte cuando el puerto esté listo (mucho cambio de contexto = lento), o copiarlo en un buffer y dejar que el controlador DMA temporice los datos mientras la CPU está ocupada haciendo otras cosas (puede ser más rápido).
2 votos
Una vez vi una portada de EDN en la que aparecía el dibujo de un hombre con un zapato enorme de un metro de largo y el titular: "Si es un zapato, llévalo". Lo que quería decir era que si una pieza hace diez cosas que no necesitas y una que sí, y el precio, el espacio que ocupa y el presupuesto de energía encajan, entonces deberías usarla y no perder el tiempo buscando algo con menos características.
0 votos
Por ejemplo, si la CPU quiere leer datos del disco duro, en lugar de perder tiempo leyendo byte a byte, la CPU puede dejar el trabajo para DMA y hacer cosas más útiles mientras espera a que los datos se copien en la RAM.