TP de traitement du signal en temps réel
Carte EZ-Kit – ADSP21061
(Vous utiliserez jusqu’à la section 2 VisualDSP en session simulateur)
1. Première application
a. Evaluation
Ces TPs sur carte seront évalués par une séance de soutenance sur machine
ou vous devrez montrer le bon fonctionnement d’un des exercices demandés
ainsi que répondre aux questions posées dans le sujet. Vous passerez en
soutenance par binômes durant 15 min (une semaine après la dernière
séance).
b. Introduction
Le développement sur la carte EZ-Kit demande une connaissance large et
précise de nombreux aspects à la fois logiciels et matériels :
DMA, liaison série, pipeline, boucles câblées, interruptions, alignement
mémoire, modes d’adressage, jeu d’instruction, compilation, assemblage,
langage C et assembleur et enfin en traitement de signal : filtrage,
arithmétique fixe/flottante, échantillonnage, convolution.
Si vous n’avez jamais entendu parlé de tout ces termes, il est inutile de
commencer le TP. Sortez vos cours et définissez ces termes !
Dans tous les cas, le sujet de TP contient des portions en italique à
considérer comme des parties de cours qui vous apporteront les indications
pour le développement demandé et pour la partie du futur examen qui sera
consacrée à ce sujet.
De manière à aborder chaque notion pas à pas nous allons tout d’abord
développer une petite application simple tenant en une dizaine de ligne
d’assembleur : le clignotement d’une LED régi par l’interruption d’un
Timer.
Vous l’avez compris, le sujet est complexe avant d’arriver au traitement de
signal en temps réel mais vous serez guidé pas à pas dans cet énoncé de 10
pages… Prenez donc le temps de bien comprendre, rien n’est superflu dans
ce sujet !
c. Interruptions
Le SHARC possède 3 entrées d’interruptions externes (IRQ0, IRQ1, et IRQ2)
et de nombreuses autres sources d’interruptions (exceptions arithmétiques,
débordement de piles, fin de traitement du DMA…).
Toutes ces interruptions sont vectorisées (vecteur donc table).
La table IRPTL comporte 32 entrées de 4 instructions chacune. Elle est en
mémoire interne au début du bloc B0 (adresse 0x0002 0000).
Une interruption est traitée si elle est non masquée et les masquages sont
possibles à 2 niveaux :
Globalement, avec le bit IRPTEN du registre MODE 1 (0 : masquée, 1
démasquée)
Individuellement, avec les bits du registre IMASK (sauf le RESET)
Ou encore par une autre interruption en cours, on les appelle alors
interruptions imbriquées (NESTED).
Lorsqu’une interruption est acceptée :
Le compteur PC est poussé sur la pile,
S’il s’agit d’une interruption IRQi, Timer ou multi-processeur, les
registres ASTAT et MODE1 sont empilés,
La demande est effacée en remettant à 0 le bit IRPTL correspondant,
L’instruction lue dans le pipe-line au cycle suivant (fetch) est la
première instruction du vecteur d’interruption associé,
Tant que le programme d’interruption est en cours (avant l’instruction
RTI de retour d’interruption), le bit associé de IRPTL est forcé à 0
interdisant de mémoriser une nouvelle demande du même niveau
d’interruption. (Les interruptions sont traitées par priorité dans
l’ordre de la table IRPTL).
La Table IRPTL est donnée en annexe A.
Q1. Quel est le numéro de l’interruption du Timer dans cette table ?
Quel est le nom du registre autorisant la prise en compte d’une
interruption ? Et celui dans lequel est mémorisé le déclenchement ?
d. Quelques lignes d’assembleur
Vous remarquez que les adresses des vecteurs d’interruption sont
incrémentés de 4 systématiquement. Le DSP Sharc n’est pourtant pas une
architecture basée sur un alignement par octet.
Q2. A quel segment le bloc IRPTL est-il associé dans le fichier
LDF (reprenez l’ancien fichier LDF du 21061) ?
Quelle est la taille des mots adressés dans cet espace adressable ?
Finalement, pourquoi un vecteur IR correspond à 4 adresses ?
Le second vecteur IR correspond au vecteur de RESET du processeur. C’est
donc le point d’entrée de notre programme. Il fera appel à la fonction main
de l’application.
Q3. Quelle est l’adresse sur 32 bits du vecteur RESET ?
e. Le vecteur IRPTL, le vecteur RESET
Ouvrez un nouveau projet, ajoutez un nouveau fichier d’extension .asm.
Commencer par inclure la lib <def21061.h> qui contient tous les noms de
registres, les primitives de l’ISA de ce modèle de DSP.
Déclarer ensuite 2 sections successives l’une pour le vecteur d’interruption,
l’autre pour le code de l’application.
Une section se déclare par .SECTION suivi du bloc mémoire ou doit être
placé le contenu et enfin du nom de section (.SECTION/PM nom ou
.SECTION/DM _nom).
Faites attention de modifier le nom des sections dans le fichier LDF que
vous utilisez.
Remplissez la première section. Pour cela associez une étiquette (label)
à chaque vecteur et remplissez ce vecteur d’instructions NOP lorsque le
vecteur est réservé et d’instructions de retour d’interruptions (RTI) dans
les autres cas. Faites cela jusqu’au vecteur qui déclenchera le
clignotement de la LED : celui du Timer.
Remplissez la seconde section de 2 étiquettes (_start et _end). Le label
_end correspond à une boucle infinie sur l’instruction IDLE (comme
pour la fin de programme _lib_prog_term).
Le corps du programme est terminé, il reste à y placer notre application.
Tout d’abord, le vecteur RESET doit faire un saut (JUMP) à la fonction
main (_start). Tester à ce stade le programme en session simulateur.
Le vecteur RESET fait-il bien appel au main ?
Ensuite le vecteur TMZHI doit inverser la valeur qui commande l’allumage
de la LED pour la faire clignoter à la fréquence du TIMER puis faire un
retour d’interruption (RTI), soit 2 instructions.
Le Sharc possède 4 lignes externes nommées FLAG0 à FLAG3 pouvant
être programmées comme des entrées ou des sorties logiques. Le mode
entrée ou sortie est commandé par les 4 bits FLG0O à FLG3O du registre
d’état MODE2 (si champ = 1 => sortie). Le niveau de ces lignes est
commandé par les 4 bits FLG0 à FLG3 du registre ASTAT.
Pour inverser (complémenter) le niveau de la ligne (nous utiliserons ici
FLAG3) utilisez une des instructions binaire du jeu d’instructions du Sharc
présentées en annexe B.
Compilez pour vérifier le comportement, le vecteur TMZHI ne doit pas
s’exécuter puisque l’interruption est pour l’instant masquée.
f. Le main(), configuration des registres de contrôle
Enfin vous devez coder le contenu de la fonction principale. Le pseudo-
code est le suivant :
oPlacer la ligne FLAG3 en sortie dans MODE2 (cf. paragraphe
précédent),
oBloquer le TIMER dans le registre MODE2 (cf. annexe E),
oParamétrer la période du timer et son pas (cf. annexe C),
oDémasquer l’interruption TMZHI dans IMASK,
oAutoriser les interruptions globales (champs IRPTEN du registre
MODE1),
oDébloquer le TIMER dans le registre MODE2,
oBoucle sans fin (attente d’interruption).
Soit 9 instructions au total dans la fonction _start.
Placer un breakpoint sur la boucle infinie et tester le programme en mode
simulateur.
Afficher le contenu des registres ASTAT, TIMERS et IRQs par le menu
Registers/Core… pour visualiser si la valeur du bit FLG3 de ASTAT
s’alterne bien avec le dépassement du Timer.
Que se passe-t-il si l’instruction RTI est placée dans la 4e instruction du
vecteur TMZHI ? Pourquoi ?
Si le fonctionnement est correct basculez en mode EZ-KIT pour faire
tourner l’application sur la carte (passer pour cela à la section suivante).
Fermer le projet, puis le logiciel.
2. Le programme à la carte
a. Installation
Mis à part le mode de chargement du code, le processus de
développement d’applications embarquées sur la carte suit les mêmes
règles que celles décrites pour le simulateur au premier TP (cf. figure de
l’annexe C de l’énoncé 1).
La principale différence réside dans la configuration de VisualDSP++. La
session doit en effet correspondre à la carte EZ Kit 21061.
Le processus de compilation/exécution est ensuite identique à celui déjà
rencontré.
La communication avec la carte (chargement de code et console de
debug) peut se faire soit en utilisant le port série, soit en utilisant
l’émulateur branché sur un des slots PCI du PC. Nous allons tout d’abord
utiliser la liaison série :
Installer la carte : 1) branchement port série, 2) branchement
alimentation.
Lancer le logiciel en appuyant sur la touche CNTRL en continu,
Modifier alors la session. Lorsqu’une fenêtre vous invite à appuyer sur
le bouton RESET de la carte, n’en tenez pas compte et cliquez sur la
croix (rouge) de fermeture de la fenêtre et attendez quelques instants.
Le logiciel doit vous indiquer « Communication success »,
Ne jamais appuyer sur le bouton RESET de la carte sans que le logiciel
vous le demande (pour recommencer une exécution utiliser restart du
menu debug).
L’installation est alors terminée et vous pouvez continuer le TP.
Note : (La liaison série est lente, aussi à tout moment vous pouvez perdre
la synchronisation avec le PC. Si cela arrive trop souvent, vous pouvez
utiliser la liaison par émulateur. Pour cela vous vous reporterez alors à
l’annexe F).
Recompiler et exécuter votre code de première application. Afficher le
contenu des registres utiles, vérifier le comportement et faites varier la
période du timer.
Q4. Modifier le code pour faire clignoter également les LED FLAG2 et
FLAG1.
Quel problème se pose si on désire faire également clignoter la LED
FLAG0 ? Comment remédier à ce problème de manière générale ?
Modifier votre code de cette manière.
3. Acquisition / restitution d’un signal
a. Introduction – procédure de configuration
A partir de cette séance de TP vous allez développer des algorithmes de
traitement du signal en temps réel.
Pour cela la carte et le processeur doivent être configurés de la manière
suivante :
Configuration des vecteurs de reset de la carte pour le lancement de
l’application.
Configuration du port série du SHARC. Dans cette configuration est
précisée le sens de transmission, le nombre de canaux, la gestion de la
transmission par DMA…
Configuration du CODEC serial port AD1847. La spécification de ce
circuit est sur le site suivant, observez-y le schéma block-diagram :
http://www.datasheetcatalog.net/datasheets_pdf/A/D/1/8/AD1847.shtml
Ce circuit intègre un Codec Sigma/Delta dont la fréquence
d’échantillonnage va de 5,5KHz à 48KHz.
La sortie du circuit vers le DSP fournit en série les échantillons numérisés
sur 16 bits en PCM (Pulse Code Modulation).
Configuration des interruptions.
b. Programme de boot
A l’heure actuelle, la carte est configurée dans sa configuration de base
présente dans l’EEPROM, circuit interchangeable situé à côté des boutons
poussoirs. Cette config effectue un comptage binaire avec les LEDs et joue
sur la sortie audio le thème ‘Peter Gunn’. Le programme utilise l’algorithme
de Karplus-Strong (synthèse sonore par cordes pincées) pour simuler le son
d’un morceau enregistré.
Le DSP génère des échantillons audio numériques correspondant à une table
des données du morceau. Ces données sont transmises au codec 1847 à
1 / 10 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !