Il DMA è molto probabilmente usato qui in modo che il DAC possa avere un tempismo regolare, generare una forma d'onda cambiando l'uscita analogica ad un intervallo noto.
Sì, se si tratta di un bus condiviso, allora ... devi condividere.
La cpu non usa sempre il bus, quindi a volte è una buona idea condividere con un motore dma. E ovviamente questo significa che le priorità vengono coinvolte, a volte è solo chi ci arriva prima (per esempio hanno un comando FIFO di fronte alla risorsa e FIFO richieste in ordine, nell'ordine in cui arrivano, sì, non sarebbe necessariamente deterministico ). In un caso come questo, potresti voler che il dma abbia la priorità sulla CPU in modo che cose sensibili al tempo come DAC o ADC abbiano un tempismo deterministico. Dipende da come hanno scelto di implementarlo.
La gente a volte ha questo presupposto spesso errato che dma è gratuito. Non consuma ancora il tempo del bus, se condiviso con la CPU (che alla fine è come parla a una risorsa con cui la CPU può parlare), quindi la CPU e / o il dma vengono trattenuti, quindi la CPU deve ancora aspettare un po ' tempo, in alcune implementazioni (probabilmente non il tuo microcontrollore) la cpu è completamente trattenuta fino al completamento della dma, la cpu viene fermata per la durata. Dipende solo dall'implementazione. La parte gratuita di ciò è che la CPU non deve essere costantemente interrotta o polling o trattenere il respiro per alcuni eventi per alimentare i dati. Può volerci del tempo per creare il buffer successivo da sovrastare. Deve cercare il completamento del trasferimento dma e gestirlo, ma invece di dire che ogni byte ora è più byte, un blocco di dati.
Non esiste una risposta universale. "Dipende" ... dal design specifico della cosa specifica che stai usando. Anche all'interno di un progetto di chip / scheda / sistema potrebbero esserci più motori DMA e non vi è motivo di ritenere che funzionino tutti allo stesso modo. Per ogni caso devi capirlo, e sfortunatamente, spesso non lo documentano o lo documentano abbastanza bene. Quindi potresti dover creare alcuni esperimenti se è un problema.