Etude du kit

publicité
TP Traitement de signal
2003/2004
PROCESSEUR DE
TRAITEMENT DE SIGNAL
DSP56002 DE MOTOROLA
Adrien Bérard
Max Prat Carrabin
Classe 35
ESIEA Paris
Avril 2004
ESIEA Paris
2 / 24
Table des Matières
I.
II.
INTRODUCTION .......................................................................................................................................... 4
INITIATION AU DSP ................................................................................................................................... 6
1.
Etude du kit .......................................................................................................................................... 6
a.
b.
c.
2.
III.
3.
4.
5.
6.
7.
8.
9.
IV.
Emplacement mémoire .................................................................................................................................... 6
Étude des ports A, B et C ................................................................................................................................. 6
Fonctions circuit CODEC CS-4215 ................................................................................................................. 7
Etude du soft ........................................................................................................................................ 7
APPLICATIONS ...................................................................................................................................... 9
Configuration du port B en entrées/sorties TTL .................................................................................. 9
Dérive d’un signal.............................................................................................................................. 10
Intégrale d’un signal .......................................................................................................................... 11
Synthèse d’un signal........................................................................................................................... 13
Oscillateur numérique........................................................................................................................ 15
Filtre RIF ........................................................................................................................................... 17
Applications personnelles .................................................................................................................. 20
CONCLUSION ...................................................................................................................................... 23
ESIEA Paris
3 / 24
I. Introduction
Cette semaine de TP avait pour objectif de nous familiariser avec le DSP de chez Motorola, le
DSP56002, ainsi que divers algorithmes de traitement de signal.
Nous avons tout d’abord suivi pas à pas les étapes de la partie « Initiation au DSP » ce qui
nous a permi de prendre en main le debuggeur 56k et l’assembleur 5600x.
Les manuels que nous avions a disposition se sont avérés indispensables pour comprendre le
fonctionnement du DSP56002, et pour correctement le programmer en assembleur.
Durant cette semaine de TP, nous nous sommes familiarisés avec le MOTOROLA
DSP56002, et la manière de le programmer en assembleur. Nous avons ainsi écrit plusieurs
algorithmes correspondant aux exercices de traitement de signal et à nos applications
personnelles.
Nous avons étudié le kit en précisant les emplacements mémoires disponibles, puis en
identifiant les trois ports A, B et C et en nous intéressant au CAN (Convertisseur Analogique
Numérique) CS-4215 intégré au DSP56002.
Puis, nous avons abordé l’utilisation du compilateur et du débuggeur Motorola grâce au
programme « suiveur ». Ce programme simple nous a permis de comprendre et de pouvoir
utiliser par la suite les entrées/sorties Jack IN et OUT.
Enfin, dans la partie « Applications » nous avons programmé en assembleur 7 programmes
de traitement de signal :
-
configuration du port B en entrées/sorties TTL
-
dérivée d’un signal
-
intégrale d’un signal
-
synthèse d’un signal
-
oscillateur numérique
-
filtre RIF
ESIEA Paris
4 / 24
-
application personnelle : l’écho
L’objectif du TP et les moyens donnés sont rappelés dans le sujet.
ESIEA Paris
5 / 24
II. Initiation au DSP
1. Etude du kit
a. Emplacement mémoire
D’après la documentation constructeur, le DSP Motorola 56002 possède deux types de
mémoire :
-
la mémoire appellée « programme » ou « program memery »: une RAM de 512 mots de
24 bits.
-
la mémoire des données appelée « data » ou « data memory » : deux ROM de 256 mots de
24 bits (X et Y).
La mémoire est répartie en 3 domaines : P qui est utilisé pour le corps du programme, X et Y
pour stocker des données utilisées par le programme.
La Ram se trouve entre les adresses $0000 et $3FFF.
Le DSP56002 attribue pour P 512 mots de 24 bits mappés entre $000 et $1FF.
Une EPROM programmable se trouve entre les adresses $8000 et $FFFF.
Il y a aussi :
-
une ROM à l’adresse $FFC0 longue de 64 mots gérant les entrées/sorties.
-
il y a une ROM dite « bootstrap » de 64 mots de 24 bits
-
deux ROM de 256 mots de 24 bits contenant les tables des sinus et cosinus.
b. Étude des ports A, B et C
Le port A peut être utilisé pour rajouter différents types de mémoire.
Il est composé :
- d’un bus d’adresse sur 16bits,
- d’un bus de donnée bidirectionnel sur 24bits
- et d’un bus de contrôle (pour la lecture/écriture, la sélection de la ressource
mémoire ou le contrôle l’accès aux bus)
Le port B peut être utilisé pour communiquer un calculateur externe.
Il est composé de 15 broches et peut fonctionner sous différents mode.
Le registre PBC (à l’adresse $FFE0) permet de choisir le mode du port :
PBC0
0
0
ESIEA Paris
PBC1
0
1
Mode du port B
Port parallèle E/S : TTL
Interface hôte
6 / 24
1
1
0
1
Interface hôte avdc Aknowledgement
Réservé Constructeur
En mode Port parallèle, le port B est contrôlé par les deux registres PBDDR (Port B Data
Direction Register) et PBD (Port B Data Register).
L’interface hôte est une interface full-duplex asynchrone qui peut être connectée directement
au bus de données d’un processeur dit hôte avec une architecture DMA ou compatible avec
celle du DSP.
Le port C se compose de neuf broches.
De la même façon que le port B, il peut fonctionner sous différents modes.
Le registre PCC situé à l’adresse X :$FFE1 permet de choisir parmi les modes proposés :
-
port parallèle E/S TTL (le registre PCDDR (adresse $FFE3) est utilisé pour choisir le sens
de la communication des lignes que le registre PCD permet de gérer)
-
interface de communication série synchrone SSI
-
interface de communication série synchrone/asynchrone SCI
c. Fonctions circuit CODEC CS-4215
Le circuit CS-4215 est un Crystal CS 4215 est un convertisseur analogique/numérique et
convertisseur numérique/analogique.
Il possède deux canaux de 16 bits servant à la conversion analogique/numérique et deux
canaux de 16 bits dédiés à la conversion numérique/analogique.
On peut choisir la fréquence d’échantillonnage (de 4kHz à 48kHz), la qualité (8 ou 16bits) et
le nombre de voix (mono ou stéréo).
2. Etude du soft
Nous avons chargé le programme suiveur.asm dans le DSP. Ce programme récupère le signal
du port IN et le retranscrit à son identique dans le port OUT.
Ce programme simple nous a permis de prendre en main le debuggeur et d’apprendre à gérer
en assembleur les entrée/sortie du DPS56002 pour traiter le signal dans la suite du TD. ce
programme nous a servi de base pour les autres programmes.
ESIEA Paris
7 / 24
Suiveur.asm fait appel à ada_init.asm qui permet d’initialier et de configurer le CS-4215. En
éditant le fichier ada_init.asm nous avons changer la fréquence d’échantillonnage.
Pour un taux d’échantillonnage de 48kHz, le signal disparaît si la fréquence appliquée en
entrée est supérieure à 24 kHz Pour une fréquence d’échantillonnage de 9kHz, on constate
que la fréquence de coupure est de 4.5 kHz.
L’observation nous montre donc que la fréquence de coupure est moitié moins la fréquence
d’échantillonnage : c’est la condition d’échantillonnage de Shannon-Nyquist.
ESIEA Paris
8 / 24
III. Applications
1. Configuration du port B en entrées/sorties TTL
Principe du programme :
Le programme suivant configure le port B et génère un signal d’horloge de fréquence
2000Hz.
Pour ce faire nous avons configurer le port B en entrée/sortie TTL. Le registre
PBDDR permet ensuite de mettre chaque bit en sortie.
Le bit PB0 est mis alternativement à 0 ou à 1 indéfiniment. La temporisation est assurée par la
subroutine pause. C’est le nombre de répétition de l’opération nop (no operation) qui permet
de définir une fréquence.
L’horloge du DSP est de 2Mhz, une instruction dure 0,5 micro-seconde. Pour obtenir
un isgnal d’horloge de 2Mhz nous devons répéter l’opération nop ??? fois.
Prorgamme :
PBC equ
PBDDR
PBD equ
org
org
jmp
org
$FFE0
equ
$FFE2
$FFE4
;initialisation de l'adresse du port BC
;initialisation de l'adresse du port BDDR
;initialisation de l'adresse du port BD
x:$0
p:0
debut
p:$40
;x commence à 0
; début du programme
debut movep #$0,x:PBC
movep #$7fff,x:PBDDR
horloge
movep
#$00,x:PBD
jsr
pause
movep #$01,x:PBD
jsr
pause
jmp horloge
pause
rep #500
nop
rts
ESIEA Paris
;données à l'adresse 0 voont sur le port BC
;données dans 7fff sur PBDDR
; B = 00
;appel de la fonction pause
; B = 01
;appel de la fonction pause
;boucle infinie du sous-programme horloge
;Répétition de l'instruction nop pour temporiser
9 / 24
2. Dérive d’un signal
Principe du programme :
Pour dériver le signal nous avons suivi l’algorithme suivant :
- acquisition du signal e(n)
- mémorisation du signal e(n)
- calcul de s(n) = e(n) – e(n-1)
- sortie de s(n)
- répéter
Ici nous travaillons en mono : nous recevons le signal du côté droit que nous plaçons dans la
variable a, et nous sortons à droite et à gauche le même signal.
Programme :
START EQU
$40
org
jmp
p:$0
START
org
jsr
jsr
jsr
jsr
p:$000c
ssi_rx_isr
ssi_rx_isr
ssi_tx_isr
ssi_tx_isr
org
;SSI receive data
;SSI receive data with exception
;SSI transmit data
;SSI transmit with exception
p:START
movep #$261009,x:PLL ;these labels are defined in the
movep #0000,x:BCR
;ada_init.asm program
ori #3,mr
;mask interrupts
movec #0,sp
;clear hardware stack pointer
move #0,omr
;operating mode 0
move #$40,r6
; initialise stack pointer
move #-1,m6
; linear addressing
include 'ada_init.asm'
TONE_OUTPUT EQU
HEADPHONE_EN+LINEOUT_EN+(LEFT_ATTN)+(RIGHT_ATTN)
TONE_INPUT
EQU MIC_IN_SELECT+(15*MONITOR_ATTN)
ESIEA Paris
10 / 24
loop_1
jset #2,x:SSISR,* ;wait for frame sync to pass
jclr #2,x:SSISR,* ;wait for frame sync
;move x:RX_BUFF_BASE,a
move x:RX_BUFF_BASE+1,a
jsr
process_stereo
move a,x:TX_BUFF_BASE
move a,x:TX_BUFF_BASE+1
move
move
move
move
jmp
;receive left
;receive right
;transmit left
;transmit right
#TONE_OUTPUT,y0 ;set up control words
y0,x:TX_BUFF_BASE+2
#TONE_INPUT,y0
y0,x:TX_BUFF_BASE+3
loop_1
process_stereo
move a,X0
; on place le signal dans une variable temporaire
sub
b,a
; on fait la derivation : on soustrait la valeur précédente (b) à la
valeur actuelle (a)
move X0,b ; on place la valeur actuelle (qui est dans la variable temporaire) dans b
rts
include 'txrx_isr.asm'
end
3. Intégrale d’un signal
Principe du programme :
Pour intégrerle signal nous avons suivi l’algorithme suivant :
- acquisition du signal e(n)
- calcul de s(n) = s(n-1) + e(n)
ESIEA Paris
11 / 24
-
mémorisation de s(n) pour l’utiliser à la boucle suivante
sortie de s(n)
répéter
Ici nous travaillons en mono : nous recevons le signal du côté droit que nous plaçons dans la
variable a, et nous sortons à droite et à gauche le même signal.
Programme :
START EQU
$40
org
jmp
p:$0
START
org
jsr
jsr
jsr
jsr
p:$000c
ssi_rx_isr
ssi_rx_isr
ssi_tx_isr
ssi_tx_isr
org
;SSI receive data
;SSI receive data with exception
;SSI transmit data
;SSI transmit with exception
p:START
movep #$261009,x:PLL ;these labels are defined in the
movep #0000,x:BCR
;ada_init.asm program
ori #3,mr
;mask interrupts
movec #0,sp
;clear hardware stack pointer
move #0,omr
;operating mode 0
move #$40,r6
; initialise stack pointer
move #-1,m6
; linear addressing
include 'ada_init.asm'
TONE_OUTPUT EQU
HEADPHONE_EN+LINEOUT_EN+(LEFT_ATTN)+(RIGHT_ATTN)
TONE_INPUT
EQU MIC_IN_SELECT+(15*MONITOR_ATTN)
loop_1
jset #2,x:SSISR,* ;wait for frame sync to pass
jclr #2,x:SSISR,* ;wait for frame sync
;move x:RX_BUFF_BASE,a
move x:RX_BUFF_BASE+1,a
jsr
move
ESIEA Paris
;receive left
;receive right
process_stereo
a,x:TX_BUFF_BASE
;transmit left
12 / 24
move
a,x:TX_BUFF_BASE+1
move
move
move
move
#TONE_OUTPUT,y0 ;set up control words
y0,x:TX_BUFF_BASE+2
#TONE_INPUT,y0
y0,x:TX_BUFF_BASE+3
jmp
;transmit right
loop_1
process_stereo
add b,a
move a,b
rts
include 'txrx_isr.asm'
end
Le principe est le même que pour la dérivée à l’exception près que l’on additionne le signal à
la somme des signaux précédents.
4. Synthèse d’un signal
Principe du programme :
A partir des valeurs de la fonction sinus présentes dans la ROM du DSP56002, nous allons
générer un signal sinusoidale en envoyant successivement et en boucle les valeurs de la
fonction sinus comprises entre les adresses $100 et $1FF.
Pour ce faire il faut initialiser OMR pour accéder à la table des sinus : une partie de
l'adressage de la RAM pointe vers la ROM.
Le registre R0 pointe vers le début de la table à l’adresse $100.
Nous plaçons la valeur $FF dans le registre M0 pour pouvoir répéter la lecture de la table
modulo 255.
On change le mode de la mémoire (OMR=4).
La vitesse d’exécution de chaque instruction étant la même, nous obtenons un signal
sinusoidal en sortie.
Programme :
ESIEA Paris
13 / 24
START EQU
$40
org
jmp
p:$0
START
org
jsr
jsr
jsr
jsr
p:$000c
ssi_rx_isr
ssi_rx_isr
ssi_tx_isr
ssi_tx_isr
org
;SSI receive data
;SSI receive data with exception
;SSI transmit data
;SSI transmit with exception
p:START
movep #$261009,x:PLL ; Ces labels sont d‚finis dans
movep #0000,x:BCR
; le programme ada_init.asm
ori #3,mr
; Interruption du masque
movec #0,sp
; Vide les stack machines
move #4,omr
; perating mode 4
move #$40,r6
; initialise stack pointer
move #-1,m6
; Adressage lin‚aire
include 'ada_init.asm'
TONE_OUTPUT
HEADPHONE_EN+LINEOUT_EN+(4*LEFT_ATTN)+(4*RIGHT_ATTN)
TONE_INPUT
EQU MIC_IN_SELECT+(15*MONITOR_ATTN)
move #$100,r0
move #$FF,m0
EQU
;adresse de la ROM sinus dans r0
loop_1
jset #2,x:SSISR,* ;wait for frame sync to pass
jclr #2,x:SSISR,* ;wait for frame sync
;
move x:RX_BUFF_BASE,a
;receive left
do #500,fin
jsr process_sinus
move a,x:TX_BUFF_BASE
;transmit left
do #1000,fin2
jsr process_sinus
move a,x:TX_BUFF_BASE
;transmit left
do #300,fin3
jsr process_sinus
move a,x:TX_BUFF_BASE
;transmit left
fin
fin2
ESIEA Paris
14 / 24
fin3
move #TONE_OUTPUT,y0 ;set up control words
move y0,x:TX_BUFF_BASE+2
move #TONE_INPUT,y0
move y0,x:TX_BUFF_BASE+3
jmp
loop_1
process_sinus
move y:(r0)+,a
nop
rts
include 'txrx_isr.asm'
end
5. Oscillateur numérique
Principe du programme :
Nous avons réaliser un osciallteur de 2000Hz en programmant un filtre RIF instable.
Comme indiqué dans le sujet, il convient de sortir le signal y(k) = A*y(k-1) + B*y(k2) avec A = 2*cos(teta), B=-1 et teta = 2 * pi * Fdésirée / Féchantillonage
Programme :
START EQU
pi
;pi
set
set
$40
@ACS(-1.0)
3.14
Fdesire set 2000.0
Fechan set 48000.0
teta set 2.0*pi*(Fdesire/Fechan)
cte_A set @COS(teta)
; il s'agit de la constante A/2
cte_C set @SIN(teta)
org
org
org
x:$100
y:$100
p:$0
jmp
START
org p:$000c
jsr ssi_rx_isr
jsr ssi_rx_isr
jsr ssi_tx_isr
ESIEA Paris
; champs mem x commencant a l'adresse 100
;SSI receive data
;SSI receive data with exception
;SSI transmit data
15 / 24
jsr
org
ssi_tx_isr
;SSI transmit with exception
p:START
movep #$261009,x:PLL ;these labels are defined in the
movep #0000,x:BCR
;ada_init.asm program
ori #3,mr
movec #0,sp
move #0,omr
move #$40,r6
move #-1,m6
;mask interrupts
;clear hardware stack pointer
;operating mode 0
; initialise stack pointer
; linear addressing
include 'ada_init.asm'
TONE_OUTPUT EQU
HEADPHONE_EN+LINEOUT_EN+(4*LEFT_ATTN)+(4*RIGHT_ATTN)
TONE_INPUT
move
move
move
EQU
#cte_A,y1
#0,x0
#cte_C,x1
MIC_IN_SELECT+(15*MONITOR_ATTN)
;dans y1 est stock‚ la constante A/2
;dans x0 est stok‚ y(n-2)
;dans x1 est stock‚ y(n-1)
move x0,x:TX_BUFF_BASE
;transmission de y(0) = 0
move x0,x:TX_BUFF_BASE+1
move x1,x:TX_BUFF_BASE
;transmission de y(1) = C
move x1,x:TX_BUFF_BASE+1
loop
jset #2,x:SSISR,* ;wait for frame sync to pass
jclr #2,x:SSISR,* ;wait for frame sync
jsr
proc
move
move
move
move
jmp
#TONE_OUTPUT,y0 ;set up control words
y0,x:TX_BUFF_BASE+2
#TONE_INPUT,y0
y0,x:TX_BUFF_BASE+3
loop
ESIEA Paris
16 / 24
proc
;y1 = A/2 et x1 = y(n-1) car correspond au signal envoye juste avant
;x0 = y(n-2) car correspond au signal envoye 2 coups avant
mpy x1,y1,a
move x0,b
subl b,a
;a = A/2*y(n-1)
;b = y(n-2)
;a=2*a-b a = A*y(n-1) - y(n-2)
move
x1,x0
; a cet instant x0 = y(n-1) donc au coup
d'apres x0 = y(n-2)
move
a,x1
; a cet instant x1 = y(n) donc au coup
suivant x1=y(n-1 )
move
move
a,x:TX_BUFF_BASE
;transmission de y(n)
a,x:TX_BUFF_BASE+1
rts
include 'txrx_isr.asm'
end
6. Filtre RIF
Principe du programme :
On désire implanter sur le DSP5600 un filtre numérique passe-bas dont la fréquence de
coupure Fc est égale à 1000Hz et pour une fréquence d’échantillonnage de Fe = 9600Hz.
Nous avons utilisé la méthoe dite de la fenêtre avec les coefficients indiqués dans le sujet.
Nous allons calculer et sortir le signal s(n) = a0*e(n) + a1*e(n-1) + … + aL-1 * e(n-(L-1))
avec a0 … aL-1 les coefficients et e(n) … e(n-(L-1)) les signaux d’entrée successfis avec
retard.
Programme :
h0
h1
ESIEA Paris
org
x:$300
dc
dc
-0
-0.02078865
17 / 24
h2
h3
h4
h5
h6
h7
h8
h9
h10
h11
h12
h13
h14
h15
h16
h17
h18
h19
h20
e21
e20
e19
e18
e17
e16
e15
e14
e13
e12
e11
e10
e9
e8
e7
e6
e5
e4
e3
e2
e1
ESIEA Paris
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
-0.03784134
-0.04324724
-0.03118298
0
0.04677446
0.10091023
0.15136535
0.18709786
0.2
0.18709786
0.15136535
0.10091023
0.04677446
0
-0.03118298
-0.04324724
-0.03784134
-0.02078865
-0
org
x:$1000
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
dc
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
org
p:$0
jmp
Start
18 / 24
org
p:$0c
jsr
jsr
jsr
jsr
ssi_rx_isr
ssi_rx_isr
ssi_tx_isr
ssi_tx_isr
org
p:$40
; SSI receive data
; SSI receive data with exception
; SSI transmit data
; SSI transmit with exception
Start
movep #$261009,x:PLL
movep #0000,x:BCR
ori
#3,mr
movec #0,sp
move #0,omr
move #$40,r6
move #-1,m6
; these labels are defined in the
; ada_init.asm program
; mask interrupts
; clear hardware stack pointer
; operating mode 0
; initialise stack pointer
; linear addressing
include 'ada_init.asm'
TONE_OUTPUT
EQU
HEADPHONE_EN+LINEOUT_EN+(4*LEFT_ATTN)+(4*RIGHT_ATTN)
TONE_INPUT
EQU MIC_IN_SELECT+(15*MONITOR_ATTN)
;move
move
move
move
#$1000,R1
#$300,R2
#$0,b
#$0,a
jset
jclr
#2,x:SSISR,*
#2,x:SSISR,*
Boucle
ESIEA Paris
; wait for frame sync to pass
; wait for frame sync
move x:RX_BUFF_BASE,a
dans a
; acquisition du signal à gauche
move x:RX_BUFF_BASE+1,b
dans b
; acquisition du signal à droite
19 / 24
jsr
rif
move a,x:TX_BUFF_BASE
move b,x:TX_BUFF_BASE+1
move
move
move
move
#TONE_OUTPUT,y0
y0,x:TX_BUFF_BASE+2
#TONE_INPUT,y0
y0,x:TX_BUFF_BASE+3
jmp
Boucle
; renvoi la valeur de a à gauche
; renvoie la valeur de b à droite
; set up control words
rif
move #$1000,R1
(e21)
move a,X0
move X0,X:(R1)
move #$1014,R1
move #$300,R2
;initialisation du registre R1 sur
do
#21,fin1
entre ici et fin1
;on répète 21 fois les instructions
move
move
mac
move
move
X:(R1)-,X0
X:(R2)+,Y0
X0,Y0,b
X:(R1)+,X0
X0,X:(R1)-
;on décrémente R1 et on le met dans X0
;on incrémente R2 et on le met dans Y0
;b= b + e(k)*h(k-1)
;on incrémente R1 et on le met dans X0
;e(k) devient e(k-1)
;e21=a, acquisition dans e21
;on met e1 dans R1
;on met h0 dans R2
fin1
move b,a
rts
include 'txrx_isr.asm'
end
7. Applications personnelles
Principe du programme :
ESIEA Paris
20 / 24
Le programme suivant permet de générer un écho en ajoutant au signal le signal précédent
tout en diminuant l’amplitude de celui-ci . Le signal réceptionné se propage durant tout la
durée d’émission du signal. Mais comme les valaurs d’amplitude sont entières, et qu’elles
diminuent à chaque fois pour chaque signal, celui finit par s’annuler.
L’addition de chaque répétition des signaux qui s’amenuisent avec le temps donne l’effet
d’écho.
Programme :
START equ $40
org
y:$0
org p:$0
jmp START
org
jsr
jsr
jsr
jsr
p:$000C
ssi_rx_isr
ssi_rx_isr
ssi_tx_isr
ssi_tx_isr
org
p:START
movep #$261009,x:PLL
movep #$0000,x:BCR
ori #3,mr
movec #0,sp
move #0,omr
move #$40,r6
move #-1,m6
include 'Ada_init.asm'
TONE_OUTPUT EQU
HEADPHONE_EN+LINEOUT_EN+(3*LEFT_ATTN)+(3*RIGHT_ATTN)
TONE_INPUT
EQU MIC_IN_SELECT+(2*MONITOR_ATTN)
move
#$4000,R0
; adresse de d‚part pour les stockage de l'écho
move #$9FFF,M0
Boucle
jset #2,x:SSISR,*
jclr #2,x:SSISR,*
move
x:RX_BUFF_BASE,a
ESIEA Paris
21 / 24
move
add
asr a
move
rep #2
asl
move
x:(R0),x0
; echo dans x0
x0,a
; addition de l'echo au signal
; affaiblissement du signal
a,x:(R0)+
; amplifie le signal avant de l'envoyer
a
a,x:TX_BUFF_BASE
;envoi le signal
move #TONE_OUTPUT,y0
move y0,x:TX_BUFF_BASE+2
move #TONE_INPUT,y0
move y0,x:TX_BUFF_BASE+3
jmp Boucle
include 'txrx_isr.asm'
ESIEA Paris
22 / 24
IV. Conclusion
Ce TP nous aura permit de mieux comprendre et surtout de mettre en application les
cours que nous avons étudier en cours de signal ; et plus particulièrement les notions de
dérivation et d’intégration.
Nous avons tout de même rencontré quelques difficultés. En effet, la sortie de la carte
du DSP avait un problème au niveau de son ressort et cela nous a obligé a emprunter des
cartes DSP à d’autres groupes pour vérifier nos programmes. De plus, nous avons des
problèmes de visualisation dû au mauvais réglages du GBF et de l’oscilloscope.
Cette semaine nous a donc permit de nous familiariser avec le DSP 56002, qui offre
une large gamme de traitement de signaux, qu'ils soient à vocation purement électronique ou
musicale. Cette application s'est donc révélée être très instructive mais aussi très ludique.
Le DSP (digital signal processor) comme son nom l’indique est un processeur de signaux.
Ainsi, nous avons pu réaliser d’intéressants programmes depuis la simple dérivée d’un signal
jusqu’à l’écho, l’inversion périodique des canaux gauche - droite, … Les DSP sont très
efficaces pour gérer les sons et ont donc une bonne place sur les cartes son pour PC comme
celles de Creative Labs (DSP Emu 10k). Ils sont aussi plus que de simples processeurs car on
peut facilement les reprogrammer. Avec l’essor des GSM, des lecteurs DVD et des modems
de tous genres (câble, xDSL, RTC 56kbits/s pour lesquels une bonne gestion des signaux
reçus est très importante), les DSP ont un bel avenir devant eux.
Au cours de cette semaine de TP, nous avons pu mettre en application et mieux comprendre
les cours que nous avons eu sur le signal. Ainsi les notions d’intégration, de dérivation,
d’échantillonnage de signal sont maintenant plus claires.
Enfin, nous avons eu quelques difficultés dans la semaine. La plupart concernaient le réglage
de l’oscilloscope et du générateur basse tension pour visualiser les résultats de nos
programmes. Nous avons eu également des problèmes dû au comportement parfois incohérent
du kit. Nous avons ainsi réalisé un programme qui générait un bruit rappelant celui d’un
spray. Le vendredi matin le programme fonctionnait bien mais l’après-midi alors que nous
n’y avions pas touché, le programme ne fonctionnait plus. De même pour le filtre RIF, lors de
la soutenance et malgré avoir modifié le programme ada_init.asm, la coupure ne se produisait
ESIEA Paris
23 / 24
qu’à 3 kHz. En prenant le programme ada_init.asm d’un autre groupe, cela a tout de suite
fonctionné.
En ce qui concerne les applications personnelles, nous avons voulu faire une mélodie en
utilisant le DSP pour générer les notes mais nous avons eu des problèmes pour trouver les
fréquences correspondant aux notes, pour les enchaîner afin de créer la mélodie et un manque
de temps.
ESIEA Paris
24 / 24
Téléchargement