WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

La technique de transfert DMA

( Télécharger le fichier original )
par Imen Nasr
Ecole supérieure des communications de Tunis - ingénieur en télécommunication 2011
  

Disponible en mode multipage

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

Implémentation

sous DSP de la

technique de

transfert DMA

avec la logique

Ping Pong

Réalisé par :

Imen NASR

W i n C o m 2 0 1 0 - 2 0 1 1

2

Sommaire

1. Objectif 3

2. Spécification du transfert DMA 3

2.1. La notion DMA 3

2.2. Mise en place du transfert DMA 4

2.3. La logique « Ping Pong » 4

3. Implémentation de la solution 5

3.1. Mise en oeuvre du transfert DMA 5

3.1.1. La fonction SetUpDMA 5

3.1.2. La fonction DoDMA 6

3.1.3. La fonction WaitForDMADone 6

3.2. L'implémentation de la logique Ping Pong 7

Conclusion 9

1.

Objectif

On se propose d'implémenter sous Visual DSP la technique de transfert DMA et ce en utilisant traitement en parallèle des données. Ce transfert sera également basé sur la logique Ping Pong.

2. Spécification du transfert DMA

Ce paragraphe à pour but de décortique le problème et de spécifier les besoins techniques de la solution à implémenter.

2.1. La notion DMA

DMA est l'acronyme anglais de Direct Memory Access ce qui veut dire un accès direct à la mémoire. Il s'agit d'un transfert direct et bidirectionnel de données via un contrôleur adapté entre un périphérique et la mémoire principale de la machine. Ce procédé ne fait pas intervenir le processeur que pour initier et conclure le transfert à travers des interruptions.

Ainsi le transfert DMA offre un moyen plus rapide pour l'échange de blocs de données, entre la mémoire et le périphérique en question ou entre deux blocs de mémoire, que la méthode classique. En effet, cette dernière fait intervenir le processeur dans le transfert de chaque octet ; c'est-à-dire par la lecture, l'écriture, la vérification de la fin de l'échange et l'incrémentation d'adresses en plus du traitement des données transférées.

En ce qui concerne la technique DMA, un autre périphérique spécialisé se charge du transfert, à savoir le contrôleur DMA ou le DMAC, et le processeur n'a qu'à s'occuper du traitement de données. Le processeur donne au DMAC les informations concernant l'échange, c'est à dire l'adresse de début du bloc en mémoire, la taille du bloc et le sens de l'échange et autorise l'échange.

Il y a également une introduction de la notion de priorité vu que la mémoire n'autorise qu'un seul accès par cycle. En fait, n'ayant pas le pouvoir d'attendre aussi longtemps que le processeur, le DMAC est plus prioritaire en accédant à la mémoire que le processeur. Cette technique s'appelle le vol de cycle.

4

2.2. Mise en place du transfert DMA

On se propose de transférer des données à partir d'un périphérique de stockage externe vers la mémoire interne du DSP.

Trois fonctions interviennent dans le transfert DMA :

· La fonction SetUpDMA pour initier le transfert de données.

· La fonction DoDMA pour exécuter ce transfert.

· La fonction WaitForDMADone pour synchroniser le transfert de données par le DMAC et leur traitement par le DSP.

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.

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.

Conclusion

Le transfert DMA combiné avec la logique Ping Pong demeure une solution efficace pour le traitement en parallèle de données. Cette technique est employée en traitement de signal comme dans le cas de calcul de la FFT et la DCT. Elle a certains avantages dont on peut citer la réduction des pertes de données, l'équilibrage de la cadence des données en entrée et en sortie et l'efficacité en matière de traitement en temps réel.






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Je voudrais vivre pour étudier, non pas étudier pour vivre"   Francis Bacon