PIA : Processeurs et Implantation d`Algorithmes

publicité
Département Signal et Télécommunication
Année Scolaire 2007/2008
5BE/5BS : Travaux Pratiques
PIA : Processeurs et Implantation
d’Algorithmes
5B ISE SIS
1/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
Le microprocesseur TMS320C50
Organisation générale
D'un point de vue physique, le C50 est doté d'une mémoire interne et peut être équipé de mémoire externe.
Chacun de ces espaces est lui-même séparable en quatre espaces fonctionnels :
– mémoire de programme,
– mémoire de données locale,
– mémoire de données globale (uniquement en mémoire externe),
– ports d’entrée/sortie.
La mémoire que le C50 est capable d’adresser est composée de :
– 64 K mots de 16 bits de mémoire de programme,
– 64 K mots de 16 bits de mémoire de données configurables en :
– mémoire de données locales,
– mémoire de données globales : zone mémoire permettant de partager des données entre plusieurs
processeurs.
– 64 K ports d’entrée/sortie (Input/Output).
La mémoire interne
L’utilisation de la mémoire interne, intéressante du point de vue temps d’accès, permet de travailler même en
l'absence de mémoire externe. Le TMS320C50 dispose de 10 K mots de RAM et de 2 K mots de ROM
organisés de la façon suivante :
– 2 K mots de 16 bits de ROM de démarrage, éventuellement activée à l’initialisation pour accéder à une
REPROM externe. Si cette possibilité n'est pas utilisée, une ROM externe de 32 K mots est accessible
directement entre 0 et 7FFH.
– 9 K mots de 16 bits de mémoire RAM programme ou données en simple accès,
– 1056 mots de 16 bits de RAM de données double accès (une lecture/écriture par cycle).
Dans la configuration utilisée dans le kit DSK, le processeur travaille en mode microprocesseur (la broche
MP MC est à 1), c'est-à-dire utilisant la ROM externe comme ROM programme.
La ROM interne
La ROM interne contient un programme d’initialisation (boot loader) qui permet, lors de la mise sous tension du
système d’initialiser le processeur et son environnement, et de transférer un programme utilisateur vers la
mémoire RAM du DSP. La ROM interne est située de 0000H à 07FFH.
5B ISE SIS
2/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
La RAM simple accès
Elle est formée de quatre blocs de 2 K mots et d’un bloc de 1 K mots. Elle nécessite un cycle du processeur
pour une opération de lecture ou d'écriture. Deux bits permettent la configuration de cette RAM simple accès ;
les bits OVLY et RAM du registre PMST :
RAM
OVLY
0
1
0
SARAM invalide
SARAM Programme
1
SARAM Donnée
SARAM Programme et Donnée
Figure 1 : Configuration de la SARAM
Les 9 K mots de RAM simple accès sont positionnés à l’adresse 800h dans la configuration mémoire de
programme ou mémoire de données.
La RAM double accès
La taille de cette mémoire est de 1056 mots de 16 bits. Comme son nom l’indique, le processeur peut accéder
deux fois à cette mémoire en un seul cycle : une fois en écriture et une fois en lecture. Cette mémoire permet
trois configurations différentes.
Les configurations
Les configurations passent, entre autres, par l'utilisation des registres ST0 (registre d'état 0), ST1 (registre
d'état 1), PMST (Processor Mode Status Register) et CBCR (Circular Buffer Control Register).
Configuration mémoire "données"
– Bloc B0 de 512 mots entre 100H et 2FFH en mémoire de données locale ou FE00H à FFFFH en espace
programme (configurable en fonction du bit CNF qui est à 0 lors du Reset indiquant que B0 est en mémoire
de données).
– Bloc B1 de 512 mots entre 300H et 4FFH en mémoire de données locale.
– Bloc B2 de 32 mots entre 60H et 7FH en mémoire de données locale.
Configuration mémoire programme - mode microprocesseur (bit
MP MC =1)
Seul le bloc B0 est accessible aux adresses FE00h à FFFFh.
5B ISE SIS
3/23
TP PIA
Département Signal et Télécommunication
Configuration mémoire programme - mode microcontrôleur (bit
Année Scolaire 2007/2008
MP MC =0)
Seul le bloc B0 est accessible aux adresses FE00h à FFFFh.
CNF
RAM
MP MC
0
0
0
0
0
1
0
1
0
0800h-2BFFh
0
1
1
0800h-2BFFh
SARAM
DARAM
ROM
Externe
0h-07FFh
0800h-FFFFh
0h-FFFFh
0h-07FFh
2C00h-FFFFh
0h-07FFh
2C00h-FFFFh
1
0
0
FE00h-FFFFh
1
0
1
FE00h-FFFFh
1
1
0
0800h-2BFFh
FE00h-FFFFh
1
1
1
0800h-2BFFh
FE00h-FFFFh
0h-07FFh
0800h-FDFFh
0h-FDFFh
0h-07FFh
2C00h-FDFFh
0h-07FFh
2C00h-FDFFh
Figure 2 : Configurations et cartographies de la mémoire programme
Configuration de la mémoire
– Emplacement des bits CNF, OVLY, RAM,
Les bits OVLY, RAM,
15
14
13
12
MP MC , etc.
MP MC se trouvent dans le registre PMST (Processor Mode Status Register) :
11
IPTR
10
9
8
7
6
5
4
3
2
1
bit 0
0
0
0
AVIS
0
OVLY
RAM
MP MC
NDX
TRM
BRAF
1
bit 0
Figure 3 : Registre PMST
Le bit CNF se trouve, quant à lui, dans le registre ST1 (Status Register 1) :
15
14
13
ARB
12
11
10
9
8
7
6
5
4
3
2
CNF
TC
SXM
C
1
1
HM
1
XF
1
1
PM
Figure 4 : Registre ST1
– Quelques instructions de l’assembleur du TMS320C50
OPL : cette instruction nécessite un ou deux opérandes. Si le premier opérande est un entier long, OPL
effectue un OU LOGIQUE entre le premier et le second opérande. Le résultat est réécrit dans le second
opérande. S’il n’y a qu’un seul opérande, la même opération a lieu entre l’unique opérande et le registre
DBMR (Dynamic Bit Manipulation Register).
SETC : l’opérande est l’un des bits des registres de contrôle ST0 ou ST1 qui est mis à 1.
15
14
ARP
13
12
11
10
9
OV
OVM
1
INTM
8
7
6
5
4
3
2
1
bit 0
PM
Figure 5 : Registre ST0
CLRC : l’opérande est l’un des bits des registres de contrôle ST0 ou ST1 qui est mis à 0.
5B ISE SIS
4/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
Exemples :
OPL #010h, PMST
4
010h = 16 = 2 = 010000b : le cinquième bit de PMST (bit RAM) est mis à 1. Cela
positionne donc la RAM simple accès dans l’espace mémoire programme.
OPL #8, PMST
3
8 = 2 = 01000b : le quatrième bit de PMST (bit
MP MC ) est mis à 1. Cela valide
la mémoire programme externe à l’adresse 0.
SETC CNF
CNF = 1 : validation de la mémoire double accès.
CLRC CNF
CNF = 0 : invalidation de la mémoire double accès.
Gestion de la mémoire globale
La mémoire globale fait partie de la mémoire externe que le TMS320C50 est capable d’adresser. L’adjectif
globale provient du fait que c’est une zone mémoire à laquelle plusieurs processeurs peuvent accéder. Un
arbitrage gère l’accès à cette mémoire. Le registre GREG permet de configurer la taille ainsi que l’adressage
de la mémoire globale comme le montre le tableau ci-dessous.
Contenu binaire
Adresses
Taille mémoire
Adresses mémoire
Taille mémoire
de GREG
mémoire locale
locale
globale
globale
000000xx
0h-0FFFFh
65 536
10000000
0h-07FFFh
32 768
08000h-0FFFFh
32 768
11000000
0h-0BFFFh
49 152
0C000h-0FFFFh
16 384
11100000
0h-0DFFFh
57 344
0E000h-0FFFFh
8 192
11110000
0h-0EFFFh
61 440
0F000h-0FFFFh
4 096
11111000
0h-0F7FFh
63 488
0F800h-0FFFFh
2 048
11111100
0h-0FBFFh
64 512
0FC00h-0FFFFh
1 024
11111110
0h-0FDFFh
65 024
0FE00h-0FFFFh
512
11111111
0h-0FEFFh
65 280
0FF00h-0FFFFh
256
0
Figure 6 : Configuration de la mémoire globale
5B ISE SIS
5/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
L’arbitrage permettant l’accès à la mémoire globale est réalisé à l’aide des signaux
BR (Bus Request) et
READY : lorsqu’un processeur veut accéder à une adresse située dans la zone mémoire globale définie par le
registre GREG, la broche
BR passe à l’état bas. L’arbitrage externe est ainsi prévenu et si l’accès à la
mémoire globale est autorisé, il génère un niveau 1 sur la broche READY du processeur. Dès réception du
signal, le processeur accède à la mémoire globale.
READY
BR
READY
BR
Arbitrage
A0-A15
Mémoire
locale
A0-A15
D0-D15
Mémoire
globale
D0-D 15
Figure 7 : Accès partagé à la mémoire globale
La mémoire globale peut avoir une autre fonction qui est d’étendre la zone mémoire locale de 32 K mots au
maximum. Pour cela, il faut initialiser le registre GREG de manière à obtenir l’extension souhaitée. L’accès à
la mémoire globale se fait en précisant l’adresse souhaitée. Cependant, il ne s’agit pas véritablement d’une
extension de mémoire puisqu’il est nécessaire de modifier le contenu du registre GREG pour passer d’une
zone de mémoire globale dont l’accès est autorisé par le contenu du registre GREG à une zone de mémoire
locale temporairement masquée par la mémoire globale.
Les interruptions dans le C50
Généralités sur les interruptions du processeur C50
Les différents types d’interruptions
Une interruption, comme son nom l’indique, interrompt l’exécution d’un programme pour lui signifier qu’un
événement s’est produit (par exemple, arrivée d’une donnée sur le port série). Il existe plusieurs types
d’interruptions, les interruptions masquables (dont on peut ne pas tenir compte) ou celles non masquables (qui
sont obligatoirement prises en compte). Il existe enfin des interruptions externes et des interruptions internes,
qui correspondent à un événement précis (arrivée/envoi de bits sur le port série, reset, interruption due au
Timer, etc.). Le tableau ci-dessous résume les caractéristiques des principales interruptions du TMS320C50.
5B ISE SIS
6/23
TP PIA
Département Signal et Télécommunication
Nom
Adresse
Priorité
Année Scolaire 2007/2008
Fonction
RS
00h
1 (plus importante)
Signal externe de remise à zéro
NMI
24h
2
Interruption externe non masquable
INT1
02h
3
interruption externe n°1 masquable
INT2
04h
4
interruption externe n°2 masquable
INT3
06h
5
interruption externe n°3 masquable
TINT
08h
6
interruption interne du Timer, masquable
RINT
0Ah
7
interruption de réception sur port série, masquable
XINT
0Ch
8
interruption d’émission sur port série, masquable
TRNT
0Eh
9
interruption de réception sur port série TDM, masquable
TXNT
10h
10
interruption d’émission sur port série TDM, masquable
INT4
12h
11
interruption externe n°4 masquable
Figure 8 : Caractéristiques des interruptions du TMS320C50
Processus d’adressage des interruptions
Le processus d’adressage que nous allons décrire est valable pour toutes les interruptions sauf pour le RESET.
L’adresse de l’interruption est obtenue par concaténation de l’adresse de l’interruption codée sur 5 bits (voir
Figure 8) avec les 5 bits constituant le champ IPTR du registre PMST.
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
bit 0
0
0
0
AVIS
0
OVLY
RAM
MP MC
NDX
TRM
BRAF
IPTR
Figure 9 : Registre PMST
Les 6 bits intermédiaires sont mis à zéro comme le montre l’exemple :
IPTR=0001b
Adresse=0Ah
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
bit 0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
1
0
Figure 10 : Registre PMST
L’adresse de l’interruption RINT (adresse 0Ah) est 080Ah. Notons que lors de l’interruption RESET, tous les
bits du champ IPTR du registre PMST sont mis à zéro. Ainsi, les interruptions se trouvent toujours, après une
remise à zéro, en page 0 de l’espace mémoire programme.
L’interruption RESET
L’interruption RESET permet la « remise à zéro » (réinitialisation) du processeur, ou, plus précisément, de le
forcer dans un état connu. Cette interruption est non masquable et son adresse n’est pas configurable.
Plusieurs cycles d’horloge sont nécessaires lors d’un RESET pour que toutes les opérations d’initialisation
s'effectuent (mise à zéro du compteur ordinal, etc.)
5B ISE SIS
7/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
Sauvegarde et restauration de contexte lors d’interruptions
Lorsqu’une interruption se produit, le compteur ordinal ainsi que les contenus des neuf registres suivants sont
sauvegardés : registres ACC, ACCB, PREG, ST0, ST1, PMST, TREG0, TREG1, TREG2, INDX et enfin
ARCR. Il y a une restauration de ces registres et du compteur ordinal en fin d’interruption.
Les interruptions masquables
Rôle du registre IFR (Interrupt Flag Register)
Lorsqu’une interruption masquable se produit, le bit correspondant à cette interruption (appelé drapeau de
l’interruption), est activé (mis à un) dans le registre IFR. L’adresse de ce registre est 06h dans l’espace
mémoire de données (MMREGS).
15
14
13
12
11
10
9
réservés
8
7
6
5
4
3
2
1
bit 0
INT4
TXNT
TRNT
XINT
RINT
TINT
INT3
INT2
INT1
Figure 11 : Registre IFR
Ce registre, qui indique les interruptions actives, peut être lu. On peut également y écrire pour annuler une
interruption. Ainsi, si les interruptions 1 et 3 sont actives (IFR= ...0101), la commande suivante permet
d’annuler ces deux interruptions :
SPLK
#5, IFR
; 0101b
Trois méthodes permettent la mise à zéro d’un drapeau :
– remise à zéro générale par un RESET,
– traitement de l’interruption par le CPU : le processeur, dès qu’il accepte une interruption, émet le signal
IACK (Interrupt Acknowledge Signal) qui confirme le traitement de l’interruption et a pour effet de remettre
le drapeau de celle-ci à zéro,
– écriture dans le registre IFR (voir l’exemple ci-dessus).
Rôle du bit INTM
C’est le neuvième bit du registre ST0 (Status Register 0). Si le bit est à zéro, toutes les interruptions non
masquées sont autorisées. Dans le cas contraire, toutes les interruptions masquables sont invalidées, c’est-àdire qu’elles ne sont pas prises en compte.
Rôle du registre IMR (Interrupt Mask Register)
Lorsque l’un des bits (0-8) du registre correspondant à une interruption est à un, cela signifie que l’interruption
n’est pas masquée. C’est-à-dire que moyennant le bit INTM à zéro, cette interruption, si elle se produit, sera
prise en compte.
Si le bit est à zéro, alors l’interruption correspondante est masquée : même si elle se produit, elle n’est pas
prise en compte.
15
14
13
12
11
réservés
10
9
8
7
6
5
4
3
2
1
bit 0
INT4
TXNT
TRNT
XINT
RINT
TINT
INT3
INT2
INT1
Figure 12 : registre IMR
5B ISE SIS
8/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
Communication entre le C50 et le contrôleur AIC
Introduction
Le contrôleur AIC (Analog Interface Circuit) est le composant qui sert d’interface entre « le monde
analogique », extérieur au processeur et « le monde numérique » du processeur. Le contrôleur AIC est relié au
processeur par une liaison série. Il possède également des entrées/sorties lui permettant de recevoir ou
d’émettre des signaux analogiques.
Le port série du processeur TMS320C50
Il permet au processeur d'échanger avec un périphérique des données en série, c’est-à-dire bit après bit. Il fait
intervenir principalement cinq registres du TMS320C50 qui sont :
Le registre SPC (Serial Port Control Register) :
C’est un registre de contrôle du port série.
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
bit 0
FREE
SCFT
RSR full
XSR
empty
XRDY
RRDY
IN1
IN0
RRST
XRST
TXM
MCM
FSM
FO
DLB
RES
Figure 13 : Registre SPC
Les registres DRR (Data Receive Register) et DXR (Data transmit Register)
Ils ont une adresse mémoire et sont accessibles par programmation. DXR est une registre qui contient la
donnée à envoyer, DRR contient la donnée reçue par le port série.
Les registres à décalage RSR (Receive Shift Register) et XSR (Transmit Shift Register).
Ces registres ne sont pas accessibles à l’utilisateur. Lors de l’envoi d’une donnée, l’utilisateur charge la
donnée dans le registre DXR. Celle-ci est transmise en parallèle au registre XSR qui l’envoie bit à bit (registre
à décalage) sur le port série. Lors de la réception d’une donnée sur le port série, le registre RSR se remplit bit
à bit. Dès qu’il est "plein", la donnée est transmise en parallèle au registre DRR.
Initialisation des composants
Une initialisation correcte des différents éléments est obligatoire pour le bon fonctionnement d’applications
utilisant le contrôleur AIC. Trois éléments doivent être en particulier correctement initialisés : le port série, le
contrôleur AIC et l’horloge du processeur TMS320C50. Nous rappelons dans un premier temps quelques
instructions de base de l’assembleur du C50 avant de procéder à l’initialisation correcte de chaque composant.
Initialisation du port série
L’initialisation du port série débute par une remise à zéro générale obtenue en affectant la valeur 0 aux bits 6 et
7 du registre SPC. Une réécriture est nécessaire pour rendre le port série opérationnel : elle consiste à affecter
la valeur 1 aux bits 6 et 7. Il faut d’autre part affecter la valeur 1 au bit FSM (Frame Sync Mode Bit) pour
spécifier le mode de transfert. Cela est obtenu par le code suivant :
5B ISE SIS
9/23
TP PIA
Département Signal et Télécommunication
SPLK
SPLK
#08h, SPC
#0C8h, SPC
Année Scolaire 2007/2008
; 8h = 01000b On a donc bien FSM=1, XRST=RRST=0
; C8h=011001000b soit FSM=1, XRST=RRST=1
Initialisation du Timer du C50
Le Timer du TMS320C50 est un mécanisme permettant d’obtenir des tops d’horloge réguliers, à une période
configurable et proportionnelle à celle de l’horloge interne du processeur. D’autre part, le Timer est directement
relié à l’horloge du contrôleur : c’est lui qui impose le rythme. Il est donc nécessaire de le configurer avant
utilisation du contrôleur. Deux registres sont utiles à l’initialisation du Timer : le registre PRD (Period Register)
et le registre TCR (Time Control Register).
15
14
13 12
réservés
11
10
SOFT
FREE
9
8
7
6
PSC
5
4
TRB
TSS
3
2
1
bit 0
TDDR
Figure 14 : Registre TCR
La formule donnant la période du Timer est la suivante : si τ représente la période de l’horloge interne du
processeur, alors :
TTIMER = τ × [(TDDR ) + 1] × [(PRD) + 1]
où TDDR représente la valeur du premier champ de 4 bits du registre TCR et PRD celle du registre PRD. Ainsi,
la période maximale du programmable est TTIMER = τ × 16 × 2 . Le bit TRB permet de lancer le Timer.
Le code correspondant à l’initialisation du Timer est donc le suivant :
16
SPLK
SPLK
#01h, PRD
#20h, TCR
; horloge de 20 MHz donc période = 100 ns si TDDR=0.
; lance le Timer et TDDR=0.
Initialisation du contrôleur AIC sur la carte DSK
RESET
BR du processeur. Il est donc nécessaire, pour
initialiser le contrôleur AIC, d’envoyer un signal bas sur la broche RESET . Cela est obtenu en forçant la
broche BR à l’état bas grâce à l’utilisation de la mémoire globale. On paramètre dans un premier temps le
La broche
du contrôleur AIC est reliée à la broche
registre GREG de manière à avoir un espace mémoire globale disponible puis on fait des accès aux adresses
correspondant à la mémoire globale. Cela nous assure qu’à chaque accès, la broche
BR est à l’état bas. Cela
est obtenu grâce au code suivant :
LACC
#80h
SACL
GREG
LAR
AR0, #0FFFFh
RPT
#10000
LACC
*,0,AR0
SACH
GREG
5B ISE SIS
10/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
Le DSK-C50 de Texas Instruments
Le kit de développement DSK-C50 de Texas Instruments est constitué :
– d'une carte bâtie autour du microprocesseur TMS320C50,
– et d'outils logiciels de développement : un assembleur DSK5a, un debugger DSK5d et un chargeur
DSK5l.
Architecture de la carte
40 MHz
BIO
XF
PC
BR
reset
Port Série
AIC
D/A & A/D
DSP
RS
TOUT
10 MHz
PROM
32 kmots
8 bits
Figure 1 : Architecture du kit
L'AIC contient les convertisseurs D/A et A/D et les filtres anti-repliement et de reconstruction.
BR
reset
DSP
FSX/DX
AIC
D/A & A/D
FSR/DR
TOUT
10 MHz
Figure 2 : Liaison entre le C50 et l'AIC
5B ISE SIS
11/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
Prise en main du DSK-C50
Un petit programme de test
1. Editer le programme suivant avec l'éditeur de votre choix, et le nommer ADD1.ASM.
; Illustration de l'adressage direct
.ps
0A00h
; adresse programme de base (par défaut)
ad1
.set
0
;
ad2
.set
1
;
ad3
.set
2
;
.entry
0A00h
; début d’exécution (par défaut dernier .ps)
ldp
#013h
; page (adresse 980h en mémoire de donnée)
lacc
ad1
; donnée --> ACCU
add
ad2
; ACCU + (ad2) --> ACCU
sacl
ad3
; 16 lsb ACCU --> ad3
loop:
b
loop
; on stoppe l’exécution
.end
; directive fin d'assemblage
2. Assembler le programme
>DSK5a add1 -l
L'option -l indique que l'on veut engendrer un listing d'assemblage.
3. Charger l e programme sous le debugger
>DSK5d c2
(ou c1 selon le port série)
Exécuter le programme en pas-à-pas.
4. Même travail avec les programmes suivants :
; Illustration de l'adressage indirect
.ps
0A00h
lar
ar0,#980h,0 ; ar0 = 980h arp = 0
lacc
*+
; ACC = ((arp)) ar0 = ar0 + 1
add
*+
; ACC = ACC + ((arp)) ar0 = ar0 + 1
sacl
*
; ((arp)) = 16 lsb ACC
loop:
b
loop
.end
5B ISE SIS
12/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
L'arithmétique
1. Tester en pas-à-pas et commenter le programme suivant :
loop:
.ps
.entry
;setc
lar
lacc
add
sach
b
.end
00a00h
ovm
ar0,#980h,0
*,16
*+,16
*
loop
2. Comment peut-on mettre en évidence les problèmes d'overflow avec ce programme ?
On s'attachera à noter le contenu des registres intervenant dans l'exécution.
3. Après avoir validé le bit de traitement de la saturation OVM, exécuter à nouveau le programme et
commenter.
Entrées-sorties
Les entrées-sorties se font par l'intermédiaire de l'AIC. Les registres RXA, TXA, RXB et TXB permettent de
choisir les fréquences de conversion et de traitement des filtres (passe-bande en entrée et passe-bas en sortie)
à capacités commutées. En principe l'AIC fonctionne avec une horloge maître de 10,368 MHz. On a alors :
Horloge maître
10,368 MHz
RXA
ou
TXA
576 KHz
288 KHz
÷2
filtre à
capacités
commutées
(19)
RXB
ou
TXB
fréquence de
conversion
En entrée on a un filtre anti-repliement (passe-bande) dont la fréquence de coupure est donnée par :
fc =
fref .
1
×
× 3,6KHz
288KHz 2 × TA
Dans le kit DSK-C50 l'horloge de référence de l'AIC est engendrée par le processeur (signal Timer OUT
TOUT). TA et TB sont tels que
5B ISE SIS
4 ≤ TA ≤ 31 et 2 ≤ TB ≤ 63 .
13/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
Initialisations du DSP et de l'AIC
Avant toute exécution le processeur et l'AIC doivent être initialisés pour définir leur mode de fonctionnement.
Nous ne donnerons ici qu'une partie des informations concernant ces initialisations. On retrouvera ces
dernières dans les programmes d'application qui suivent.
1. Initialisation du processeur :
– initialisation PMST (Processor Mode Status Register) (adresse 7 en mémoire)
opl
#0834h,pmst
– bit NDX à 1 : (enable extra index register) : mode C50 enhanced.
– bits RAM et OVLY à 1 : la SARAM (Single Access RAM) de 9K est configurée à la fois en
programme et données.
– bits IPTR = 00001 (Interrupt vector Pointer) : adresse de base pour les vecteurs d'interruption. Ici ils
sont installés en 800h.
– Configuration des Wait States :
samm
cwsr
samm
pdwsr
– Extension de signe activée
setc
sxm
2. Initialisation du registre de masque d'interruptions :
– Configuration des interruptions (INT2 utilisé par la communication entre le PC et la carte), par exemple :
splk
#12h,imr
; RINT & INT2 démasquées XINT masquée
splk
#22h,imr
; XINT & INT2 démasquées RINT masquée
ou :
3. Initialisation du port série (Timer du processeur).
– définition de l'horloge principale de l'AIC : celle-ci est fournie par le TMS320C50. On doit donc initialiser
le Timer interne du processeur : lorsque le contenu de ce dernier passe à 0, il y a émission d'un top
d'horloge sur la broche TOUT de l'AIC et génération d'une interruption.
splk
#1,prd
; on charge le compteur PRD avec 1
; --> Freq. processeur / 2
splk
#20h,tcr
; reset et reload timer
; le prescaler TDDR = 0
La fréquence du signal sur la broche TOUT est donnée par :
f TOUT =
1
tc × (TDDR + 1) × ( PRD + 1)
Ici, avec une période d'horloge de 50ns, on obtient fTOUT=10MHz.
5B ISE SIS
14/23
TP PIA
Département Signal et Télécommunication
– Reset du port série
lacc
sacl
lacc
sacl
FSM = 1 indique que
#0008h
spc
#00c8h
spc
la communication
Année Scolaire 2007/2008
; FSM=1
; reset du port série
; FSM=1 XRST=1 RRST=1
utilise un signal de synchronisation-trame pour chaque mot
transmis.
4. Ensuite le contrôleur AIC (Analog Interface Circuit : TLC32041) est initialisé.
– Reset AIC effectuée à l'aide de la broche BR du TMS320C50 connectée au RESET de l'AIC en effectuant
un accès en mémoire globale.
lacc
#080h
sach
dxr
sacl
greg
lar
ar0,#0ffffh
rpt
#10000
lacc
*,0,ar0
sach
greg
ldp
sach
; envoi de ACC hi soit 00
; GREG = 80h : 32K local + 32K global
; and taking it high after 10000 cycles
; (.5ms at 50ns)
; on dévalide BR (plus de mémoire globale)
#0
dxr
; DP = 0 (MMREGS)
; envoi de ACC hi soit 00
; d0 = d1 = 0 (ta --> TX et ra --> RX)
; démarre les horloges de conversion
– Initialisation de la fréquence d'échantillonnage et des fréquences de coupure.
La fréquence d'échantillonnage est donnée par :
fe =
f TOUT
2 × TA × TB
Exemple :
DSP
TOUT
10 MHz
RXA
ou
TXA
RXB
ou
TXB
÷2
(9)
23,148
KHz
fréquence de
conversion
(24)
Interface
série
in+
in–
fb
A/D
fc
out+
out–
D/A
fc
Les valeurs qui suivent sont données dans la documentation avec pour référence la fréquence de 288 kHz :
5B ISE SIS
15/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
– La fréquence de coupure pour le filtre anti-repliement est donnée par :
fc =
fTOUT
1
×
× 3,6kHz
288kHz 2 × TA
– Le filtre passe-bas de sortie présente la même fréquence de coupure.
– Le filtre anti-repliement coupe aussi le continu. La fréquence de coupure est :
fb =
fTOUT
1
×
× 300Hz
288kHz 2 × TA
Génération de signal en dent de scie
Programme :
aicctr
loop:
rint:
.mmregs
.set
.ps
b
.ps
.entry
call
splk
call
ldp
add
sacl
rpt
nop
b
rete
* initialisation
procinit:
setc
ldp
opl
setc
clrc
ret
9h
0080ah
rint
00a00h
procinit
#2,imr
aicinit
dxr
#01h
dxr,2
#40
loop
du C50
intm
#0
#834,pmst
sxm
intm
* initialisation AIC et port série
aicinit:
splk
#01h,prd
splk
#20h,tcr
mar
*,ar0
lacc
#0008h
sacl
spc
lacc
#00c8h
sacl
spc
lacc
#080h
sach
dxr
5B ISE SIS
16/23
TP PIA
Département Signal et Télécommunication
sacl
lar
rpt
lacc
sach
greg
ar0,#0ffffh
#10000
*,0,ar0
greg
ldp
sach
ret
.end
#0
dxr
Année Scolaire 2007/2008
Exercice : écrire le programme de génération d’un signal en dent de scie en utilisant une
interruption.
Entrée-sortie simple
Le programme suivant se contente de provoquer l'échantillonnage d'un signal et sa restitution immédiate. Le
DSP récupère une donnée envoyée par l'AIC sur le port série en réponse à l'interruption RINT et la renvoie à
l'AIC immédiatement. Les phases sont :
1. Initialisation du processeur
2. Ensuite le contrôleur AIC est initialisé (Analog Interface Circuit) TLC32040.
Programme :
.mmregs
aic_ctr
xn
wait :
5B ISE SIS
.ds
.word
.word
0f00h
039h
0
.ps
b
b
0080ah
rint
xint
.ps
.entry
call
splk
call
splk
clrc
clrc
0a00h
idle
b
proc_init
#022h,imr
init
#12h,imr
ovm
intm
wait
17/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
rint:
ldp
clrc
lamm
sacl
sfl
and
samm
rete
#xn
intm
drr
xn
#0fffch
dxr
xint:
rete
proc_init:
ldp
setc
opl
splk
splk
setc
ret
init:
splk
splk
mar
ldp
lacc
sacl
lacc
sacl
lacc
sach
sacl
lar
rpt
lacc
sach
ldp
lacc
add
call
ret
aic 2nd:
ldp
sach
clrc
idle
add
sach
idle
sacl
idle
lacl
sacl
idle
setc
5B ISE SIS
#0
intm
#0834h,pmst
#0h,cwsr
#0,pdwsr
sxm
#03h,prd
#20h,tcr
*,ar0
#0
#0008h
spc
#00c8h
spc
#080h
dxr
greg
ar0,#0ffffh
#10000
*,0,ar0
greg
#aic_ctr
aic_ctr,2
#03h
aic_2nd
#0
dxr
intm
#6h,15
dxr
dxr
#0
dxr
intm
18/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
ret
.end
Exercices :
–
Commenter le programme.
–
Quelle est la fréquence "maître" de l'AIC telle qu'elle est programmée ?
–
En déduire la fréquence d'échantillonnage et les fréquences de coupure du passe -bande antirepliement.
–
Vérifier expérimentalement ces valeurs.
Entrée-sortie paramétrée
On reprend le programme précédent mais en définissant la fréquence d'échantillonnage, la fréquence de
coupure du filtre anti-repliement et la configuration du registre de contrôle de l'AIC.
ta
ra
tb
rb
aic_ctr
...
.word
.word
.word
.word
.word
...
...
call
splk
call
call
...
setAICctrl:
ldp
setc
lacc
add
call
ldp
lacc
add
add
call
ldp
lacc
add
call
ret
5B ISE SIS
16
16
31
31
08h
procinit
#022h,imr
init
setAICctrl
#ta
sxm
ta,9
ra,2
send_aic
#tb
tb,9
rb,2
#02h
send_aic
#aic_ctr
aic_ctr,2
#03h
send_aic
19/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
send_aic:
ldp
sach
clrc
idle
add
sach
idle
sacl
idle
lacl
sacl
idle
setc
ret
#0
dxr
intm
#6h,15
dxr
dxr
#0
dxr
intm
Exercice
– Quels sont les paramètres de fonctionnement de l’AIC ?
– Vérifier et faire varier les différents paramètres.
– Mettre en évidence les problèmes de saturation en temps réel (on prendra par exemple une
sinusoïde en entrée).
Filtrage : implantation d'un filtre
Exécution du MACD en pas à pas
Le programme ci-dessous permet de mettre en évidence les caractéristiques de l’instruction MACD dans une
boucle de répétition.
.mmregs
.ds
0f00h
; Coefficients
h3
.word 1
h2
.word 2
h1
.word 3
h0
.word 4
; Echantillons
xn
.word 1
xn1
.word 2
xn2
.word 3
xnlast
.word 4
empty
.word 0 ; réservé pour le MACD (décalage)
; Echantillon de sortie
output
.word 0
.ps 0a00h
.entry
setc
intm
ldp
#0
opl
#0834h,pmst
lacc
#0
samm
cwsr
5B ISE SIS
20/23
TP PIA
Département Signal et Télécommunication
Année Scolaire 2007/2008
samm
pdwsr
setc
sxm
splk
#02h,imr
clrc
ovm
spm
0
clrc
intm
; boucle de calcul
new:
lar
ar0,#xnlast
zap
mar
*,ar0
rpt
#3
macd
#h3,*apac
ldp
#xn
sacl
output
lacl
xn
add
#1
sacl
xn
b
new
Exercice :
– pour observer le déroulement de l’instruction MACD positionner un point d’arrêt.
–
afficher le contenu de la mémoire à partir de l’adresse f00h.
– réécrire ce programme en utilisant l’adressage circulaire.
Implantation d’un filtre à réponse impulsionnelle finie
TA
RA
TB
RB
AIC_CTR
output
h0
xn
xnlast
rint:
xint:
5B ISE SIS
.mmregs
.ds
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.ps
b
b
.ps
.entry
0f00h
16
16
31
31
08h
0
0,-157,-261,-268,-170,0,180,301,310,198,0,-211
-354,-367,-236,0,255,431,451,292,0,-323,-551,-584
-383,0,438,763,827,557,0,-681,-1240,-1417,-1022,0
1533,3307,4960,6131
6554
6131,4960,3307,1533
0,-1022,-1417,-1240,-681,0,557,827,763,438,0,-383
-584,-551,-323,0,292,451,431,255,0,-236,-367,-354
-211,0,198,310,301,180,0,-170,-268,-261,-157,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0
0080ah
receive
transmit
0a00h
21/23
TP PIA
Département Signal et Télécommunication
call
setc
splk
call
splk
clrc
spm
clrc
wait:
idle
b
receive: ldp
clrc
lamm
sacl
lar
zap
mar
rpt
macd
apac
sach
lacc
sfl
and
samm
rete
transmit:
aicinit:
splk
mar
lacc
sacl
lacc
sacl
lacc
sach
sacl
lar
rpt
lacc
sach
ldp
setc
lacc
add
call
ldp
lacc
add
add
call
ldp
lacc
add
5B ISE SIS
Année Scolaire 2007/2008
procinit
sxm
#022h,imr
aicinit
#012h,imr
ovm
0
intm
wait
#xn
intm
drr
xn
ar0,#xnlast
*,ar0
#79
#h0,*output,1
output
#0fffch
dxr
rete
splk
#01h,prd
*,ar0
#0008h
spc
#00c8h
spc
#080h
dxr
greg
ar0,#0ffffh
#10000
*,0,ar0
greg
#TA
sxm
TA,9
RA,2
aic_2nd
#TB
TB,9
RB,2
#02h
aic_2nd
#AIC_CTR
AIC_CTR,2
#03h
#20h,tcr
22/23
TP PIA
Département Signal et Télécommunication
aic_2nd:
call
ret
ldp
sach
clrc
idle
add
sach
idle
sacl
idle
lacl
sacl
idle
setc
ret
procinit:
ldp
opl
setc
splk
clrc
ret
.end
Année Scolaire 2007/2008
aic_2nd
#0
dxr
intm
#6h,15
dxr
dxr
#0
dxr
intm
setc
#0
#0834h,pmst
sxm
#022h,imr
intm
intm
Exercice 1 :
–
Tracer la réponse fréquence du filtre. Quelle est la fonction fréquence réalisée ?
–
Modifier la fréquence d'échantillonnage : commentaires sur les caractéristiques du filtre.
–
Que se passe -t-il lorsque la fréquence du signal d'entrée augmente ?
–
Optimiser le traitement en implantant les coefficients dans le bloc B0.
Exercice 2 :
– Calculer avec MATLAB un filtre demi-bande à 21 coefficients (voir programme ci-dessous)
– Coder ces coefficients, implanter le filtre sur la carte et tracer la réponse en fréquence
– Optimiser le traitement en utilisant l’adressage modulo
–
Tester les effets de la troncature des coefficients sur 12, 8 et 4 bits. Commenter
Programme MATLAB pour calculer les coefficients du filtre demi bande :
% N longueur du filtre,
% f0 : fréquence de coupure.
P=fix(N/2);
d=(-P:-1)*pi;
h=sin(2*d*f0) ./ d;
h=[h 2*f0 h(P:-1:1)];
5B ISE SIS
23/23
TP PIA
Téléchargement