2.3. La logique « Ping Pong »
La technique Ping Pong ou la technique de double buffer
s'applique lorsqu'on dispose de données à traiter par bloc. On
peut citer par exemple le cas de la DCT ou la FFT appliquée à un
ensemble de N échantillons d'un signal donné. La figure suivante
illustre bien cette technique :
Ce schéma traite le cas de la FFT appliquée
à des blocs d'échantillons d'un signal. Les avantages d'une telle
technique sont la réduction des pertes de données, la cadence des
données est identique à l'entrée et à la sortie et
elle est efficace pour le traitement de données en temps réel.
3. Implémentation de la solution
Dans cette partie on se propose de mettre en place, sur un
processeur Blackfin 533, la technique de transfert DMA en se basant sur la
logique Ping Pong.
3.1. 0 isereQ r uvIerISurtIDQW-ItrD0 $
Comme l'on a expliqué précédemment, cette
technique de transfert est mise en place en utilisant les trois fonctions
SetUpDMA, DoDMA et WaitForDMADone.
3.1.1. La fonction SetUpDMA Ci-dessous le code source
de cette fonction :
Cette fonction prend comme paramétres adresse de la
mémoire source, l'adresse de la mémoire de destination et la
taille des données à transférer. Cette fonction permet
d'initier le transfert. Pour ce faire elle fait appel á des registres
particuliers :
· MDMAD0STARTADDR : un registre de 32 bits qui contient
l'adresse de destination.
· MDMAS0STARTADDR : un registre de 32 bits qui contient
l'adresse de la
source.
· MDMAD0XCOUNT : contient le nombre de colonne de la
mémoire de destination
· MDMAS0XCOUNT : contient le nombre de colonnes à
lire de l'espace mémoire source.
Une valeur de 0 dans XCOUNT correspond á 65.536
éléments.
· MDAMD0YCOUNT : contient le nombre de lignes la
mémoire de destination. Dans ce cas, chaque élément est
codé sur 4 cases mémoires consécutives (4 octets).
6
· MDMA_S0_Y_COUNT : contient le nombre de lignes de la
mémoire source.
· MDMA_D0_X_MODIFY : contient le pas d'augmentation dans
l'adresse de destination chaque fois que le chargement d'un
élément est effectué. Dans notre, le pas est égale
à 4 puisque chaque éléments est codé sur 4 octets.
Sa valeur est le décalage entre le dernier mot d'une « ligne »
et le premier mot de la prochaine «rangée»
· MDMA_S0_X_MODIFY : contient le pas
d'incrémentation dans l'adresse de la source.
3.1.2. La fonction DoDMA
Ci-dessous est le code source de cette fonction :
Cette fonction exécute l'échange de
données via le DMAC. Elle utilise deux registres à 16 bits,
MDMA_S0_CONFIG et MDMA_D0_CONFIG, pour configurer les paramètres DMA et
les modes d'opérations.
· MDMA_S0_CONFIG : Pour lancer la lecture à
partir de la source. Ce registre prend la valeur décimale 0x0009. En
effet, le premier bit est fixé à 1 pour activer le DMA. Le
deuxième bit est fixé à 0 pour charger le mode lecture.
Quant aux deux bits qui suivent, ils indiquent la longueur de la donnée
à transférer, dans ce cas égaux à 10, qui signifie
une longueur de 32 bits. On obtient alors 1001 ? 0x0009 en hexadécimal.
Le mode 1D est activé alors le cinquième bit est fixé
à 0.
· MDMA_DO_CONFIG : Pour lancer le mode écriture
dans la mémoire de destination. D'une manière analogue à
ce qui a été expliqué ci-dessus ce registre prend la
valeur 1011 pour activer et exécuter l'écriture dans la
destination ce qui donne une valeur de 0x000b en hexadécimal.
|