Le DMA est très probablement utilisé ici afin que le DAC puisse avoir une synchronisation régulière, générer une forme d'onde en changeant la sortie analogique à un intervalle connu.
Oui, s'il s'agit d'un bus partagé, alors ... vous devez partager.
Le processeur n'utilise pas toujours le bus, c'est donc parfois une bonne idée de partager avec un moteur dma. Et bien sûr, cela signifie que les priorités s'impliquent, parfois c'est juste qui est arrivé en premier (par exemple, avoir une commande fifo devant la ressource, et fifo up demandes, dans l'ordre où elles arrivent, oui ce ne serait pas nécessairement déterministe) ). Dans un cas comme celui-ci, vous souhaiterez peut-être que le DMA soit prioritaire sur le processeur afin que les éléments sensibles au temps comme les DAC ou les ADC aient un timing déterministe. Cela dépend de la façon dont ils ont choisi de le mettre en œuvre.
Les gens ont parfois cette hypothèse souvent incorrecte que dma est gratuit. Ce n'est pas qu'il consomme encore du temps de bus, s'il est partagé avec le cpu (ce qu'il est finalement comme il parle à une ressource avec laquelle le cpu peut parler), alors le cpu et / ou le dma sont bloqués, donc le cpu doit encore attendre temps, dans certaines implémentations (probablement pas votre microcontrôleur) le processeur est complètement bloqué jusqu'à ce que le dma se termine, le processeur est arrêté pour la durée. Tout dépend de la mise en œuvre. La partie libre de celui-ci est que le processeur n'a pas besoin d'être constamment interrompu ou d'interrogation ou de retenir son souffle pour un événement pour alimenter les données. Cela peut prendre son temps pour créer le prochain tampon sur dma. Il doit surveiller le transfert dma pour terminer et gérer cela, mais au lieu de dire chaque octet, il s'agit maintenant de plusieurs octets, d'un bloc de données.
Il n'y a pas de réponse universelle unique. "Cela dépend" ... de la conception spécifique de la chose que vous utilisez. Même dans une conception de puce / carte / système, il peut y avoir plusieurs moteurs dma et il n'y a aucune raison de supposer qu'ils fonctionnent tous de la même manière. Pour chaque instance, vous devez le comprendre, et malheureusement, souvent ils ne le documentent pas ou ne le documentent pas assez bien. Vous devrez donc peut-être créer des expériences si cela vous inquiète.