3.1.3. La fonction WaitForDMADone
Cette fonction a pour objectif de synchroniser le transfert DMA
et le traitement au niveau du processeur.
Extern_Buff
Intern_Buff1
Intern_Buff2
Output_Buf
Traitement
Ci-dessous est le code source de cette fonction :
Il arrive parfois que le processeur termine le traitement avec
que la procédure d'échange DMA n'arrive à sa fin. Dans ce
cas il faut occuper le processeur à vérifier si le transfert est
terminé et ce en examinant le troisième bit du registre
MDMA_D0_IRQ_STATUS. Il est mis à 0 si le canal DMA est en repos et
à 1 sinon.
3.2. L'implémentation de la logique Ping Pong
Le but est de mettre en place un traitement de test qui emploie
la technique Ping Pong.
8
Selon le schéma précédent, le transfert
DMA se fait à partir d'une source externe « Extern_Buf » vers
deux buffers internes « Intern_Buf1 » et « Intern_Buf2 ». A
chaque fois que l'un des buffers est rempli, le processeur utilise les
données qui y sont stockées pour effectuer son traitement et
envoyer la sortie vers autre buffer externe. En appliquant la logique Ping
Pong, le canal DMA transfère une partie des données vers le
premier buffer, ces dernières sont traitées ensuite par le
processeur. Parallèlement à ce traitement, le canal DMA effectue
un deuxième transfert de données vers le deuxième buffer
qui seront exploitées par le processeur. Cette procédure se
répète jusqu'à ce que le transfert total soit
terminé.
Afin de ne pas tomber dans le cas où le processeur ait
terminé sont traitement de l'un des buffers et demande l'accès
vers l'autre avant que le transfert vers celui-ci ne soit achevé on
utilise la fonction WaitForDMADone pour assurer la synchronisation.
Ci-dessous le code source complet de l'implémentation du
transfert DMA avec la technique Ping Pong.
|