TP de formation au C50 par le DSK

publicité
19 février 2001
PREMIÈ RE PARTIE
I. Quelques notions sur les D S P
L'évolution technologique a permis aux systèmes à base de microprocesseurs de dominer le domaine
du traitement du signal et de commencer à s'imposer dans le domaine de la commande, au détriment
des traitements analogiques. Les manipulations de signaux se réduisent donc à celles de tableaux de
données constitués des valeurs extraites de signaux analogiques par échantillonnage. Mots-clefs :
théorème d'échantillonnage, suites numériques et TFTD, traitement et interprétation des observations,
filtrage et éléments de synthèse de filtres, traitements multi-cadences, processus aléatoires SSL,
estimations de spectres…
Processeurs spécialisés
Mots-clés : DSP prennent le pas ou s'intègrent aux autres solutions, …
— DSP,
— micro-contrôleurs,
— processeurs dédiés.
Eléments architecturaux
Mots-clés : …
— architecture Harvard interne,
— bus séparés (architecture Harvard externe),
— mémoire interne,
— pile cablée,
— registres à barillet,
— unités multiples,
— mémoire globale,
— flash interne,
— mécanismes évitant les deadlocks ou permettant l'exclusion mutuelle sur des données
partagées dans la mémoire globale.
Traitements
Mots-clés : …
— traitement des signes dans les opérartions, extensions de signes,
Quelques notions sur les DSP
2
— mécanismes de traitement des interruptions,
— traitement des saturations.
Jeu d'instructions et adressage
Mots-clés : …
— multiplication-accumulation,
— instructions de normalisation,
— manipulation rapide de bits,
— instructions min et max,
— carrés et racines carrées,
— adressage modulo,
— adressage bit reverse.
Entrées-sorties
Mots-clés : …
— communications série,
— timers, compteurs,
— convertisseurs et codec.
Algorithmique
Mots-clés : codage, compression, …
— données en ROM pour codage loi A ou loi µ,
— tables de cosinus.
Langages et outils
Mots-clés : optimisation de code, problème des entrées-sorties, …
— compilateurs,
— assembleurs,
— dévermineurs,
— simulateurs.
Techniques d'optimisation standards
Mots-clés : …
— caches,
— pipe-line,
— parallélisation, communication des différents modules internes,
— VLIW
— réarrangement du flot d'instructions,
— prédiction de branchement,
— EPIC.
G.Blanchet & P.Devriendt
19 février 2001
DEUXIèME PARTIE
II. Le micro-processeur TMS320C50
II.1. 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 :
— la mémoire "programme",
— la mémoire de données locales,
— la mémoire de données globales (uniquement en mémoire externe),
— les ports d’entrée/sortie.
La mémoire externe que le C50 est capable d’adresser est composée de :
— 64 Kmots de longueur 16 bits de mémoire "programme",
— 96 Kmots de longueur 16 bits de mémoire "données" dont :
— 64 Kmots de données locales,
— 32 Kmots de données globales : zone mémoire permettant de partager des données entre
plusieurs processeurs, elle peut aussi être utilisée comme simple mémoire locale supplémentaire.
— 64 Kports d’entrée/sortie (Input/Output).
II.1.1. LA MÉMOIRE INTERNE
L’utilisation de la mémoire interne, intéressante en terme de vitesse, permet de travailler même en
l'absence d'extension de mémoire externe. Le 320C50 dispose de 10 Kmots de RAM et de 2 Kmots
de ROM organisés de la façon suivante :
— 2 Kmots × 16 bits de boot ROM, éventuellement activée au démarrage pour accéder à une
REPROM externe. Si cette possibilité n'est pas utilisée, une ROM externe de 32 Kmots est
accessible directement entre 0 et 7FFH.
— 9 Kmots × 16 bits de mémoire RAM programme ou données en simple accès,
— et 1056 mots × 16 bits de RAM de données double accès (une lecture/écriture par cycle).
Dans la configuration utilisée dans le kit EVM, le microprocesseur travaille en mode micro-processeur
(la broche MP MC est à 1), c'est-à-dire utilisant la ROM externe comme ROM programme.
Le DSK-C50 de Texas Instruments
4
G.Blanchet & P.Devriendt
La ROM interne
La ROM interne contient un programme d’initialisation (boot loader) qui permet, lors de la mise sous
tension du processeur, de tester les composants, d’initialiser le processeur et de transférer un
programme utilisateur vers la mémoire RAM du DSP. Les mots de la ROM interne sont situés aux
adresses 0000H à 07FFH.
La RAM simple accès
Elle est formée de quatre blocs de 2 Kmots et d’un bloc de 1 Kmot. Comme son nom l’indique, elle
nécessite un cycle complet du processeur pour une opération de lecture ou d'écriture. Deux bits
permettent la configuration de la RAM simple accès : les bits OVLY et RAM du registre PMST.
OVLY
0
RAM
0
Configuration RAM simple
accès invalidée
0
1
mémoire
programme
1
0
mémoire
données
1
1
mémoire programme
et données
Fig.1 : Configuration de la RAM simple accès
Les 9 Kmots de RAM simple accès sont positionnés à l’adresse 800h dans la configuration mémoire
"programme" ou mémoire "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 pendant un même temps de cycle : une fois en écriture et une fois
en lecture. Cette mémoire admet trois modes de configuration différents.
II.1.2. LES CONFIGURATIONS
Les configurations passent 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"
CNF
OVLY
0
0
1
1
0
1
0
1
DARAM
B0
100H-2FFH
100H-2FFH
-
DARAM
B1
300H-4FFH
300H-4FFH
300H-4FFH
300H-4FFH
DARAM
B2
60H-7FH
60H-7FH
60H-7FH
60H-7FH
SARAM
800H-2BFFH
800H-2BFFH
Mémoire
Externe
800H-FFFFH
2C00H-FFFFH
800H-FFFFH
2C00H-FFFFH
Fig.2 : Configuration mémoire "données" locale
— Bloc B0 de 512 mots entre 100H à 2FFH en mémoire de données locale (FE00H à FFFFH en
espace programme si le bit CNF est à 1 ; lors du Reset CNF est à 0 indiquant que B0 est en
mémoire de données).
G.Blanchet & P.Devriendt
5
Le DSK-C50 de Texas Instruments
— Bloc B1 de 512 mots entre 300H à 4FFH en mémoire de données locale.
— Bloc B2 de 32 mots entre 60H à 7FH en mémoire de données locale.
Configuration mémoire programme-mode microprocesseur (bit MP MC=1)
Si le bit MP MC=0, le proceesseur est en mode micro-contrôleur. La ROM interne permet de charger
le code de boot à partir :
— de mémoire morte installée en mémoire globale entre 8000h à FFFFh,
— ou par l'intermédiaire de la ligne série.
Le code est chargé dans le bloc B0 et la SARAM configurée en mémoire programme. L'adresse
0FFFH en mémoire globale doit contenir une information sur le mode de transfert (transferts 8 ou 16
bits, mode parallèle ou série).
bit
CNF
0
0
0
0
bit
RAM
0
0
1
1
1
1
1
1
0
0
1
1
bit
SARAM
MP MC
0
1
0
0800h-2BFFh
1
0800h-2BFFh
0
1
0
1
DARAM
ROM
Mémoire
Externe
0800h-FFFFh
0h-FFFFh
2C00h-FFFFh
0h-07FFh
2C00h-FFFFh
0800h-FDFFh
0h-FDFFh
2C00h-FDFFh
0h-07FFh
2C00h-FDFFh
0h-07FFh
0h-07FFh
FE00h-FFFFh
FE00h-FFFFh
0800h-2BFFh FE00h-FFFFh
0800h-2BFFh FE00h-FFFFh
0h-07FFh
0h-07FFh
Fig.3 : Configurations et adresses de la mémoire interne en mode programme
Configuration de la mémoire
— Emplacement des bits-clé CNF, OVLY, RAM, MP MC, etc.
Les bits OVLY, RAM, MP MC se trouvent dans le registre PMST (Processor Mode Status Register)
(cf. fig.4).
15-14-13-12-11 10 9
IPTR
0
0
8
7
6
5
4
3
2
1
0
0
A
V
I
S
0
O
V
L
Y
R
A
M
MP MC
N
D
X
T
R
M
B
R
A
F
Fig.4 : Registre PMST
Le bit CNF se trouve, quant à lui, dans le registre ST1 (Status Register 1) (cf fig.5).
Le DSK-C50 de Texas Instruments
6
G.Blanchet & P.Devriendt
15-14-13
12
11
10
9
8
7
6
5
4
3
2
1-0
ARB
C
N
F
T
C
S
X
M
C
1
1
H
M
1
X
F
1
1
P
M
Fig.5 : Registre ST1
— Quelques instructions de l’assembleur du C50 pour configurer le processeur
L’instruction OPL : cette instruction prend 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) (cf exemples dans la section suivante).
L’instruction SETC : elle prend comme opérande l’un des bits des registres de contrôle ST0 et ST1.
Elle met le bit ainsi choisi à 1 (exemples dans la section suivante).
15-14-13
12
11
10
9
8-7-6-5-4-3-2-1-0
ARP
OV
OVM
1
INTM
DP
Fig.6 : Registre ST0
L’instruction CLRC : elle prend comme opérande l’un des bits des registres de contrôle ST0 et ST1.
Elle met le bit ainsi choisi à 0 (exemples dans la section suivante).
Exemples :
OPL #010h, PMST
OPL #8, PMST
Comme 010h = 010000b, le cinquième bit de PMST (bit RAM) est mis à 1.
Cela positionne donc la RAM simple accès dans l’espace mémoireprogramme (cf. fig.1).
Comme 8 = 23 =01000b, le quatrième bit de PMST (bit MP MC) est mis à
1. Cela valide la mémoire programme externe à l’adresse 0 (cf. fig.10).
SETC CNF
Met le bit CNF à 1. Cela valide la mémoire double accès (cf. fig.5).
CLRC CNF
Met le bit CNF à 0. Cela invalide la mémoire double accès (cf. fig.5).
II.1.3. GESTION DE LA MÉMOIRE GLOBALE
La mémoire globale fait partie de la mémoire externe que le C50 est capable d’adresser. L’adjectif
"globale" provient du fait que c’est une zone-mémoire à laquelle plusieurs processeurs C50 peuvent
G.Blanchet & P.Devriendt
7
Le DSK-C50 de Texas Instruments
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-après.
Contenu binaire
Adresses
de GREG
mémoire locale
000000xx
0h-0FFFFh
10000000
0h-07FFFh
11000000
0h-0BFFFh
11100000
0h-0DFFFh
11110000
0h-0EFFFh
11111000
0h-0F7FFh
11111100
0h-0FBFFh
11111110
0h-0FDFFh
11111111
0h-0FEFFh
Taille mémoire
locale
65 536
32 768
49 152
57 344
61 440
63 488
64 512
65 024
65 280
Adresses mémoire
globale
08000h-0FFFFh
0C000h-0FFFFh
0E000h-0FFFFh
0F000h-0FFFFh
0F800h-0FFFFh
0FC00h-0FFFFh
0FE00h-0FFFFh
0FF00h-0FFFFh
Taille mémoire
globale
0
32 768
16 384
8 192
4 096
2 048
1 024
512
256
Fig.7 : Configuration de la mémoire globale
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 C50 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 dès que l’accès à la mémoire globale est autorisé, il "envoie" le signal 1 sur la broche
READY du processeur. Dès réception du signal, le processeur accède à la mémoire globale.
READY
BR
Arbitrage
READY
BR
Mémoire
globale
Mémoire
locale
A0-A15
D0-D15
Fig.8 : 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
Kmots au maximum. Pour cela, il faut initialiser le registre GREG pour 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.
Le DSK-C50 de Texas Instruments
8
G.Blanchet & P.Devriendt
II.2. Les interruptions dans le C50
II.2.1. 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’éxecution 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 dûe au Timer, etc.). Le tableau ci-dessous résume les
caractéristiques des principales interruptions du C50.
Nom Adresse
RS
0h
NMI
24h
INT1
2h
INT2
4h
INT3
6h
TINT
8h
RINT
Ah
XINT
Ch
TRNT
Eh
TXNT
10h
INT4
12h
Priorité
1 (plus importante)
2
3
4
5
6
7
8
9
10
11
Fonction
Signal externe de remise à zéro
Interruption externe non masquable
Interruption externe n°1 masquable
Interruption externe n°2 masquable
Interruption externe n°3 masquable
Interruption interne dûe au Timer, masquable
Interruption de réception sur port série, masquable
Interruption d’émission sur port série, masquable
Interruption de réception sur port série TDM, masquable
Interruption d’émission sur port série TDM, masquable
Interruption externe n°4 masquable
Fig.9 : Caractéristiques des interruptions du C50
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 la location de l’interruption (cf.
fig.1) codée sur 5 bits avec les 5 bits constituant le champ IPTR du registre PMST (cf fig.10).
15
14
13
IPTR
12 11 10 9
0
0
8
7
6
0 AVIS 0
5
4
OVLY RAM
3
2
1
bit 0
MP MC NDX TRM BRAF
Fig.10 : Registre PMST
Les 6 bits intermédiaires sont mis à zéro comme le montre l’exemple :
G.Blanchet & P.Devriendt
9
Le DSK-C50 de Texas Instruments
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
0
0
1
0
1
0
0
0
0
1
0
0
Fig.11 : Registre PMST
L’adresse de l’interruption RINT (location Ah) 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" du processeur, ou, plus précisement, 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
dl’initialisation s'effectuent (mise à zéro du compteur ordinal, etc.).
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.
II.2.2. 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 6h
dans l’espace mémoire "données".
7
6
5
4
TXNT TRNT XINT RINT
15
14
13
12
réservé
3
TINT
11
2
INT3
10
1
INT2
9
bit 0
INT1
8
INT4
Fig.12 : 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,
Le DSK-C50 de Texas Instruments
10
G.Blanchet & P.Devriendt
— 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 (cf. 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 (cf. ci dessous) sont autorisées. Dans le cas contraire, toutes les interruptions
masquables sont masqué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
10
9
réservé
7
6
TXNT TRNT
8
INT4
5
4
3
2
1
bit 0
XINT
RINT
TINT
INT3
INT2
INT1
Fig.13 : registre IMR
II.3. Communication entre le C50 et le contrôleur AIC
II.3.1. 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.
II.3.2. LE PORT SÉRIE DU PROCESSEUR C50
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 C50 qui sont :
− Le registre SPC (Serial Port Control Register) :
C’est un registre de contrôle du port série.
G.Blanchet & P.Devriendt
11
15
14
13
FREE
SCFT
RSR
full
7
6
5
4
3
TXM
MCM
FSM
RRST XRST
12
Le DSK-C50 de Texas Instruments
11
10
9
8
IN1
IN0
2
1
bit 0
FO
DLB
RES
XSR XRDY RRDY
empty
Fig.14 : Registre SPC
− Les registres DRR (Data Receive Register) et DXR (Data transmit Register)
Ils ont une adresse mémoire et sont accessibles à l’utilisateur. 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.
II.3.3. 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 C50. 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.
Quelques instructions élémentaires de l’assembleur du C50
Instruction SPLK : prend en général deux opérandes, une constante de 16 bits et une adresse. La
fonction de l’instruction SPLK est d’affecter la constante à l’adresse indiquée sans utiliser
l’ACCU (registre accumulateur).
Instruction LACC : prend une constante ou une adresse en argument. Elle charge la valeur de la
constante ou celle contenue dans l’adresse dans l’ACCU en la décalant d’un bit vers la gauche.
Le bit de poids faible est mis à zéro, les bits de poids fort non déterminés (l’ACCU fait 32 bits,
un mot courant 16 bits) dépendent de la valeur de SXM. (SXM est un bit du registre de contrôle
ST1, il représente l’extension de signe). Les MSB sont mis à zéro si SXM=0, ils dépendent du
signe du mot considéré si SXM=1.
Instruction SACL : prend une adresse et un chiffre de 0 à 7 comme arguments. l’accumulateur est
copié dans un registre à décalage de 32 bits. Le mot du registre est décalé de 0 à 7 bits vers la
Le DSK-C50 de Texas Instruments
12
G.Blanchet & P.Devriendt
gauche. Les MSB sont perdus, les LSB introduits sont mis à 0. Enfin, les 16 bits de poids faible
sont stockés dans l’adresse mémoire indiquée.
Instruction SACH : effectue l’opération similaire à l’instruction précédente mais pour les bits de poids
fort avec décalage à droite.
Instruction LAR : cette instruction sert à initialiser les registres auxiliaires AR0 à AR7
Instruction RPT : prend un nombre comme argument. En l’absence d’argument, c’est la dernière
valeur utilisée par RPT qui est prise par défaut. L’instruction RPT charge le compteur RPTC avec
l’argument X et répète X+1 fois l’instruction qui la suit.
Initialisation du port série
L’initialisation du port série débute par un reset général obtenu en affectant la valeur 0 aux bits 6 et 7
(cf. fig.1). Une reé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 :
SPLK
SPLK
#08h, SPC
#0C8h, SPC
;8h = 01000bin. On a donc bien FSM=1, XRST=RRST=0
;C8h=011001000bin, soit FSM=1, XRST=RRST=1
Initialisation du Timer du C50
Le Timer du C50 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) et le registre TCR (Time Control Register) (cf. fig.15).
15
14
13 12 11
10
9
réserv
SOFT FREE
é
8
7
PSC
6
5
4
3
TRB TSS
2
1
bit 0
TDDR
Fig.15 : 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 Timer que l’on puisse obtenir est TTIMER = τ × 16 × 216 . Le bit
TRB permet de lancer le Timer. Le code correspondant à l’initialisation du Timer est donc le suivant :
SPLK
#01h, PRD
SPLK
#20h, TCR
;
;
;
;
;
le cycle du C50 étant de 20 MHz,
cette initialisation nous assure un période de
100 ns si TDDR=0.
lance le Timer et n’intervient pas dans
la période car TDDR=0.
G.Blanchet & P.Devriendt
13
Le DSK-C50 de Texas Instruments
Initialisation du contrôleur AIC sur la carte EVM
La broche RESET du contrôleur AIC est reliée à la broche BR du processeur. Il est donc nécessaire,
pour initialiser le contrôleur AIC, d’envoyer un signal bas à 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 registre GREG de manière à avoir un espace mémoire globale disponible puis on fait
des appels aux adresses correspondant à la mémoire globale. Cela nous assure qu’à chaque appel, la
broche BR est à l’état bas. Cela est obtenu grâce au code suivant :
LACC
SACL
LAR
RPT
LACC
SACH
#80h
GREG
AR0, #0FFFFh
#10000
*, 0, AR0
GREG
;
;
;
;
;
;
Le DSK-C50 de Texas Instruments
14
G.Blanchet & P.Devriendt
TROISIèME PARTIE
III. Le DSK-C50 de Texas Instruments
Le travail demandé utilise le kit de développement DSK-C50 de Texas Instruments. Les questions
posées sont numérotées E.1, E.2... Les questions dont le numéro est souligné sont facultatives.
Le kit DSK-C50 est constitué
— d'une carte bâtie autour du micro-processeur TMS320C50,
— et d'outils logiciels de développement : un assembleur DSK5a et un debugger DSK5d.
III.1. Architecture de la carte
40 MHz
PC
BIO
XF
BR
Port Série
DSP
RS
TOUT
10 MHz
reset
AIC
D/A & A/D
PROM
32 kmots
8 bits
Fig.1 : Architecture du kit
L'AIC contient les convertisseurs D/A et A/D et les filtres anti-repliement et de reconstruction.
BR
DSP
FSX/DX
FSR/DR
reset
AIC
D/A & A/D
TOUT
10 MHz
Fig.2 : Liaison entre le C50 et l'AIC
G.Blanchet & P.Devriendt
15
Le DSK-C50 de Texas Instruments
III.2. Prise en main du DSK-C50
III.2.1. EXAMEN DE LA CONFIGURATION MÉMOIRE UTILISÉE
1. Charger le debugger
>DSK5d c2
(ou c1 selon le port série)
2. Examiner la configuration mémoire.
III.2.2. UN PETIT PROGRAMME DE TEST
1. Editer le programme suivant avec l'éditeur de votre choix, et le nommer ADD1.ASM.
;
Illustration
.ps
ad1
.set
ad2
.set
ad3
.set
.entry
ldp
loop:
lacc
add
sacl
b
.end
de l'adressage
0A00h
;
0
;
1
;
2
;
0A00h
;
;
#013h
;
;
ad1
;
ad2
;
ad3
;
loop
;
;
direct
program memory base (valeur par defaut)
adresse debut d'execution
(par defaut prend le dernier .ps)
registre de page (980h en memoire
de donnee)
donnee --> ACCU
ACCU + (ad2) --> ACCU
16 lsb ACCU --> ad3
on stoppe l'execution
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. Examiner le contenu du fichier add1.lst . Vérifier les codes instructions à l'aide de la
documentation et l'implantation en mémoire du programme.
4. Charger le programme sous le debugger
>DSK5d c2
(ou c1 selon le port série)
Exécuter le programme en pas-à-pas.
5. Effectuer le même travail avec le programme qui suit :
;
Illustration
.ps
lar
lacc
add
sacl
de l'adressage
0A00h
ar0,#980h,0 ;
*+
;
*+
;
*
;
indirect
980h --> ar0 et 0 --> arp
((arp)) --> ACCU, ar0 := ar0 + 1
ACCU + ((arp)) --> ACCU, ar0 := ar0 + 1
16 lsb ACCU --> ((arp))
Le DSK-C50 de Texas Instruments
loop:
b
.end
16
G.Blanchet & P.Devriendt
loop
III.3. L'arithmétique
E.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
; <===
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.
E.2. Après avoir validé le bit de traitement de la saturation OVM, exécuter à nouveau le programme
et commenter.
III.4. 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,368MHz
RXA
ou
TXA
(19)
576 KHz
288 KHz
2
RXB
ou
TXB
filtre à
capacités
commutées
fréquence de
conversion
En entrée on a un filtre anti-repliement (en fait il est passe-bande) dont la fréquence de coupure est
donnée par :
fref .
1
×
× 3,6KHz
fc =
288KHz 2 × TA
En réalité dans le kit DSK-C50 l'horloge de référence de l'AIC est engendrée par le DSP (signal
Timer OUT TOUT). TA et TB sont tels que 4 ≤ TA ≤ 31 et 2 ≤ TB ≤ 63.
G.Blanchet & P.Devriendt
17
Le DSK-C50 de Texas Instruments
III.4.1. INITIALISATIONS DU DSP ET DE L'AIC
Avant toute exécution le DSP et l'AIC doivent être initialisés pour définir leur mode de
fonctionnement. Nous ne donnerons ici qu'une partie suffisante des informations concernant ces
initialisations. On retrouvera ces dernières dans les programmes d'application qui suivent.
1. Initialisation du processeur :
— inialisation 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 (2 K × IPTR).
— Configuration des wait states :
samm
samm
cwsr
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 le C50), par
exemple :
splk
#12h,imr
; RINT & INT2 demasques XINT masque
splk
#22h,imr
; XINT & INT2 demasques RINT masque
ou :
3. Initialisation du port série (Timer du DSP).
— définition de l'horloge principale de l'AIC : celle-ci est fournie par le C50. On doit donc
initialiser le timer interne du C50 : 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
splk
#20h,tcr
;
;
;
;
on charge le compteur PRD avec 1
--> Freq. processeur / 2
reset et reload timer
le prescaler TDDR = 0
La fréquence du signal sur "TOUT" est donnée par :
f TOUT =
1
tc × (TDDR + 1) × ( PRD + 1)
Ici, le quartz est à 40MHz et l'horloge processeur à 20MHz, d'où une période d'horloge de 50ns.
Cela donne fTOUT=10MHz.
— Reset du port série
lacc
sacl
lacc
sacl
#0008h
spc
#00c8h
spc
; FSM=1
; reset du port serie
; FSM=1 XRST=1 RRST=1
Le DSK-C50 de Texas Instruments
18
G.Blanchet & P.Devriendt
FSM=1 indique que la communication utilise un signal de synchronisation-trame pour chaque mot
transmis.
4. Ensuite le contrôleur AIC est initialisé (Analog Interface Circuit) TLC32041.
— Reset AIC effectuée à l'aide de la broche BR du C50 connectée au RESET de l'AIC en
effectuant un accès en mémoire globale.
lacc
sach
sacl
lar
rpt
lacc
sach
#080h
dxr
greg
ar0,#0ffffh
#10000
*,0,ar0
greg
; Pour registre GREG
; send ACChi 00
; 32K local + 32K global
ldp
sach
#0
dxr
;
;
;
;
; and taking it high after 10000 cycles
; (.5ms at 50ns)
; on devalide BR (plus de memoire globale)
Data page point is 0 (MM regs)
send ACChi 00 (?)
d0=d1=0 (ta-->TX et ra-->RX) demarre
les horloges de conversion
Les registres internes sont initialisés avec les valeurs suivantes : TA=RA=9, TA'=RA'=1 et
TB=RB=36.
— Initialisation de la fréquence d'échantillonnage et des fréquences de coupure.
La fréquence d'échantillonnage est donnée par :
fe =
fTOUT
2 × TA × TB
Exemple :
DSP
TOUT
10 MHz
RXA
ou
TXA
(9)
RXB
ou
TXB
(24)
2
23,148 fréquence de
KHz conversion
Interface
série
in+
fb
in≈
A/D
fc
out+
D/A
out≈
fc
Les valeurs qui suivent sont données dans la documentation avec pour référence la fréquence de
288 kHz :
— 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.
G.Blanchet & P.Devriendt
19
Le DSK-C50 de Texas Instruments
— Le filtre anti-repliement coupe aussi le continu. La fréquence de coupure est :
fb =
fTOUT
1
×
× 300Hz
288kHz 2 × TA
III.4.2. GÉNÉRATION DE SIGNAL EN DENT DE SCIE
Ce programme engendre un signal en dent de scie.
Programme :
LOOP:
RINT:
.mmregs
.ps
0080ah
B
RINT
.ps
00a00h
.entry
call
procinit
SPLK
#2,IMR
CALL
AICINIT
LDP
DXR
ADD
#1h
SACL
DXR,2
RPT
#40
NOP
B
LOOP
RETE
* initialisation
procinit:
setc
ldp
opl
setc
clrc
ret
; INIT PROCESSEUR
; Reg. masque d'interr. -->INT2
; INIT CONTROLEUR AIC
; DP=page de DXR
; (1 cycle)
; (1) "Memory Mapped (21H) register"
; (1+40) pour ralentir un peu
; (4)
; return and enable interrupts INTM=0
du C50
intm
#0
#834h,pmst
sxm
intm
*
AIC and Serial Port initialization data
AICINIT:
SPLK
#01h,PRD
; Timer Control Reg (PRD=1) pour TOUT=10Mhz
SPLK
#20h,TCR
; "reload timer period" (TRB bit =1)
MAR
*,AR0
; ARP pointe sur AR0
LACC
#0008h
; Set Serial Port Control Reg for noncontinuous
SACL
SPC
; mode (frame sync) and 16 bit data. RRST,XRST=0
LACC
#00c8h
; and load SPC to take serial port out of reset.
SACL
SPC
; on remet RRST,XRST=1
LACC
#080h
; charge ACC pour initialiser le registre GREG
SACH
DXR
; DXR=0 init port série
;-------------------SACL
GREG
; GREG= 80h : 32K globale et 32k locale
LAR
AR0,#0FFFFh ; accès mémoire globale et RPT (BR=0 sur .5ms)
RPT
#10000
; (broche BR connectée au RESET de l'AIC)
LACC
*,0,AR0
; chargement de ACC avec donnée en FFFF (0000h)
Le DSK-C50 de Texas Instruments
20
G.Blanchet & P.Devriendt
SACH
GREG
; GREG = 0 : 65K locale
;-------------------LDP
#0
SACH
DXR
;
RET
;
.end
III.4.3. 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
;-----------------------.ds
0f00h
aic_ctr .word
039h
.word
0
.ps
0080ah
b
rint
b
xint
;-----------------------.ps
0a00h
.entry
call
proc_init
splk
#022h,imr
call
init
splk
#12h,imr
clrc
ovm
; synchronous transmit/receive section
; antirepliement, +/-3V
xn
clrc
wait:
intm
; int1=int3=tint=rint=0 int2=xint=1
; idem sauf rint=1 et xint=0
; autorisation des interrupt non masquees
idle
b
wait
;-----------------------------------------------rint:
ldp
#xn
; ATTENTION (Ne pas mettre sur la
; ligne de l'etiquette!)
clrc
intm
lamm
drr
sacl
xn
; TRAITEMENT A METTRE EVENTUELLEMENT ICI
sfl
and
#0fffch
samm
dxr
rete
;------------------------------------------------
G.Blanchet & P.Devriendt
21
Le DSK-C50 de Texas Instruments
xint:
rete
;-----------------------------------------------proc_init:
;--------------------- Initialisation Processeur
ldp
#0
;
setc
intm
;
opl
#0834h,pmst
;
splk
#0h,cwsr
;
splk
#0,pdwsr
;
setc
sxm
; extension du bit de signe
ret
;
;-----------------------------------------------init:
;--------------------- Initialisation "TOUT"
splk
#03h,prd
; PRD:=3 (period)
splk
#20h,tcr
; reload TIMER
mar
*,ar0
;
ldp
#0
;
;--------------------- Port Serie
lacc
#0008h
; FrameSyncMode=1
sacl
spc
;
lacc
#00c8h
; ResetRec/ResetTrans/FrameSyncMode=1
sacl
spc
;
;----------------------- AIC
lacc
#080h
; Reset AIC par utilisation de
sach
dxr
; la ligne BR
sacl
greg
;
lar
ar0,#0FFFFh
;
rpt
#10000
; on maintient 10000 cycles
lacc
*,0,ar0
; (--> .5ms at 50ns)
sach
greg
;
;
------------ldp
#aic_ctr
;
lacc
aic_ctr,2
; AIC control register
add
#03h
; Pour passer en mode "controle"
call
aic_2nd
;
ret
;
;-----------------------------------------------aic_2nd:
ldp
#0
; Data page point is 0 (MM regs)
sach
dxr
; send ACChi 00
clrc
intm
; enable interrupts
idle
; wait for interrupt
add
#6h,15
; 0000 0000 0000 0011 XXXX XXXX XXXX XXXX b
sach
dxr
; send ACChi to initiate secondary protocol
idle
; wait for interrupt
sacl
dxr
; send the parameter register
idle
; wait for interrupt
lacl
#0
; clear ACClo
sacl
dxr
; another to make sure 1st word got sent
idle
; wait for interrupt
setc
intm
ret
Le DSK-C50 de Texas Instruments
22
G.Blanchet & P.Devriendt
.END
Exercices
E.3 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.
E.4 En utilisant le programme précédent, réaliser un redresseur.
E.5 Idem pour un quadrateur.
III.5. Filtrage : exemple d'implantation d'un filtre
Les opérations de filtrage peuvent utiliser l'instruction de multiplication-accumulation.
III.5.1. EXÉCUTION DU MACD EN PAS à PAS
Ce programme permet de mettre en évidence les caractéristiques de l’instruction MACD dans une boucle
de répétition. Pour observer le déroulement de l’instruction MACD positionner un point d’arrêt juste
après SACL OUTPUT qui stocke le résultat final. Ensuite afficher le contenu de la mémoire à partir de
l’adresse f00h. Toutes les interruptions sont masquées sauf INT2 pour le debugger.
.MMREGS
.ds
; Coefficients
h3
.word
h2
.word
h1
.word
h0
.word
; Echantillons
XN
.word
XN1
.word
XN2
.word
XNLAST
.word
EMPTY
.word
; Echantillon de sortie
OUTPUT
.word
.ps
.entry
SETC
LDP
OPL
LACC
SAMM
SAMM
SETC
SPLK
0f00h
1
2
3
4
1
2
3
4
0
; réservé pour le MACD (décalage)
0
0a00h
INTM
#0
#0834h,PMST
#0
CWSR
PDWSR
SXM
#02h,IMR
; Démasquage de INT2 pour le Debugger
G.Blanchet & P.Devriendt
23
CLRC
OVM
SPM
0
CLRC
INTM
; boucle de calcul
AG:
LAR
AR0,#XNLAST
ZAP
MAR
*,AR0
RPT
#3
MACD
#h3,*APAC
LDP
#XN
SACL
OUTPUT
LACL
XN
ADD
#1
SACL
XN
B
AG
;
;
;
;
;
;
;
;
;
;
;
Le DSK-C50 de Texas Instruments
AR0 = adresse du dernier échantillon
ACC = P = 0
AR0 = registre courant
4 calculs
convolution
addition finale
sauvegarde du résultat
incrémentation de l’échantillon
écriture dans xn
III.5.2. FILTRAGE : EXEMPLE D'IMPLANTATION D'UN FILTRE
Le programme qui suit met en œuvre un filtrage RIF à 81 coefficients.
TA
RA
TB
RB
AIC_CTR
OUTPUT
.MMREGS
.ds
.word
.word
.word
.word
.word
.word
0f00h
16
16
31
31
08h
0
; Filtre passe-bas
h0
.word
h1
.word
h2
.word
h3
.word
h4
.word
h5
.word
h6
.word
h7
.word
h8
.word
h9
.word
h10
.word
h11
.word
h12
.word
h13
.word
h14
.word
h15
.word
h16
.word
h17
.word
h18
.word
h19
.word
h20
.word
h21
.word
;
;
;
;
Reglage Freq. ech.
a 80 coefficients (coupure a 1kHz)
0
; 40
0.0000
-157
; 39
-0.0048
-261
; 38
-0.0080
-268
; 37
-0.0082
-170
; 36
-0.0052
0
; 35
-0.0000
180
; 34
0.0055
301
; 33
0.0092
310
; 32
0.0095
198
; 31
0.0060
0
; 30
0.0000
-211
; 29
-0.0065
-354
; 28
-0.0108
-367
; 27
-0.0112
-236
; 26
-0.0072
0
; 25
-0.0000
255
; 24
0.0078
431
; 23
0.0132
451
; 22
0.0138
292
; 21
0.0089
0
; 20
0.0000
-323
; 19
-0.0098
Le DSK-C50 de Texas Instruments
h22
h23
h24
h25
h26
h27
h28
h29
h30
h31
h32
h33
h34
h35
h36
h37
h38
h39
zero
h40
h41
h42
h43
h44
h45
h46
h47
h48
h49
h50
h51
h52
h53
h54
h55
h56
h57
h58
h59
h60
h61
h62
h63
h64
h65
h66
h67
h68
h69
h70
h71
h72
h73
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
.word
-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
24
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
G.Blanchet & P.Devriendt
-0.0168
-0.0178
-0.0117
-0.0000
0.0134
0.0233
0.0252
0.0170
0.0000
-0.0208
-0.0378
-0.0432
-0.0312
-0.0000
0.0468
0.1009
0.1514
0.1871
0.2000
0.1871
0.1514
0.1009
0.0468
-0.0000
-0.0312
-0.0432
-0.0378
-0.0208
0.0000
0.0170
0.0252
0.0233
0.0134
-0.0000
-0.0117
-0.0178
-0.0168
-0.0098
0.0000
0.0089
0.0138
0.0132
0.0078
-0.0000
-0.0072
-0.0112
-0.0108
-0.0065
0.0000
0.0060
0.0095
0.0092
0.0055
G.Blanchet & P.Devriendt
h74
h75
h76
h77
h78
h79
.word
.word
.word
.word
.word
.word
XN
XN1
XN2
XN3
XN4
XN5
XN6
XN7
XNLAST
.word
.word
.word
.word
.word
.word
.word
.word
.word
rint:
xint:
.ps
B
B
25
0
-170
-268
-261
-157
0
;
;
;
;
;
;
Le DSK-C50 de Texas Instruments
35
36
37
38
39
40
-0.0000
-0.0052
-0.0082
-0.0080
-0.0048
0.0000
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
.ps
.entry
0a00h
;
call
SETC
SPLK
procinit
SXM
#022h,IMR
CALL
SPLK
CLRC
SPM
CLRC
AICINIT
#12h,IMR
OVM
0
INTM
;
;
B
WAIT
; a main program would go here
;
LDP
CLRC
#XN
INTM
LAMM
DRR
SACL
XN
LAR
AR0,#XNLAST
ZAP
MAR
*,AR0
WAIT:
; SXM MUST BE SET
; This turns on receive interrupt only
;
RECEIVE:
; ENABLE INTERRUPTS FOR
; DEBUGGING DSK PURPOSES
;
;
;
;
load accumulator with
word received from AIC
store the value of
received word to a variable
;
;
;
;
load AR0 with address of
last delay element
ZERO ACC AND PRODUCT REGISTERS
AR0 is the current AR register.
Le DSK-C50 de Texas Instruments
RPT
#80
MACD
APAC
#h0,*-
SACH
OUTPUT,1
LACC
SFL
AND
SAMM
OUTPUT
26
G.Blanchet & P.Devriendt
; Repeat the next instruction
; 80 times through
; the complete coeff table.
; Accumulate last product
; ACC -> OUTPUT.
; xtra sign bit.
#0fffch
DXR
RETE
Get rid of
; Two LSB's must be zero for AIC
; write output word
; to transmit register
;
TRANSMIT:
RETE
AICINIT: SPLK
#20h,TCR
SPLK
#01h,PRD
MAR
*,AR0
LACC
#0008h
SACL
SPC
LACC
#00c8h
SACL
SPC
LACC
#080h
SACH
DXR
SACL
GREG
LAR
AR0,#0FFFFh
RPT
#10000
LACC
*,0,AR0
SACH
GREG
;-----------------------LDP
#TA
SETC
SXM
LACC
TA,9
ADD
RA,2
CALL
AIC_2ND
;-----------------------LDP
#TB
LACC
TB,9
ADD
RB,2
ADD
#02h
CALL
AIC_2ND
;-----------------------LDP
#AIC_CTR
LACC
AIC_CTR,2
ADD
#03h
CALL
AIC_2ND
RET
; Horloge 10 MHz sur la broche Tout
; for AIC master clock
; Non continuous mode
; FSX as input
; 16 bit words
; Pulse AIC reset by setting it low
; on maintient 10000 cycles
; (.5ms --> 50ns)
;
;
; Initialize TA and RA register
;
;
; Initialize TB and RB register
;
;
;
; Initialize control register
;
;
;
AIC_2ND:
LDP
SACH
#0
DXR
; Data page point is 0
; send ACChi 00
(MM regs)
G.Blanchet & P.Devriendt
27
CLRC
IDLE
ADD
INTM
SACH
IDLE
SACL
IDLE
LACL
SACL
IDLE
SETC
RET
DXR
#6h,15
DXR
#0
DXR
;
;
;
;
;
;
;
;
;
;
;
Le DSK-C50 de Texas Instruments
interruptions validées
attente d'interruption
ACCU =
0000 0000 0000 0011 XXXX XXXX XXXX XXXX b
send ACChi to initiate secondary protocol
attente d'interruption
send le registre de controle
attente d'interruption
clear ACClo
send another to make sure 1st word got sent
attente d'interruption
INTM
;
procinit:
SETC
LDP
OPL
SETC
SPLK
CLRC
ret
INTM
#0
#0834h,PMST
SXM
#022h,IMR
INTM
; dévalidation des IT non masquées
; SXM MUST BE SET
; This turns on receive interrupt only
; validation des IT non masquées
.end
Exercices
E.6 Calculer les 19 coefficients d'un filtre demi-bande ;
E.7 Coder ces coefficients en 16 bits virgule fixe ;
E.8 Implanter ce filtre sur le C50 ;
E.9 Programmer l'accès aux données à l'aide de l'adressage modulo.
E.10 Tester les effets de la troncature des coefficients sur 12, 8 et 4 bits ;
III.6. Générateur de signal sinusoïdal
Exercice
E.11 On se donne TA=RA=17, TB=RB=37 et un registre de contrôle de l'AIC égal à 8,
Commenter ces informations.
E.12 On désire réaliser un signal sinusoïdal s(n) de fréquence f0 à partir d'un résonateur. 0n
utilise pour ce faire un filtre de fonction de transfert :
z −1
H(z) = α
1 − 2 ρ cos ϕz −1 + ρ 2 z −2
On donne f0 = 800Hz . Quelle est l'expression de la réponse impulsionnelle h(n) du filtre ?
Quelle valeur doit-on donner à α pour que la sinusoïde ait une amplitude maxima de 1 ?
E.13 Implanter ce filtre sur le C50.
E.14 Etudier les variations que peut subir l'amplitude de la sinusoïde.
Le DSK-C50 de Texas Instruments
28
G.Blanchet & P.Devriendt
III.7. Exercices supplémentaires
III.7.1. ACCÈS AUX REGISTRES DE CONTRÔLE DU TLC32040
E.15 On reprend le programme d'entrée-sortie simple 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
...
16
16
31
31
08h
; valeur registres de AIC pour fréquence
; échantillonnage de 10,081 Hz
procinit
#022h,imr
; XINT & INT2 demasques RINT masque
init
setAICctrl:
; initialisation du port série et de l'AIC
; controle AIC
setAICctrl:
;----------------------ldp
#ta
;
setc
sxm
; extension signe
lacc
ta,9
; Initialize TA and RA register
add
ra,2
;
call
send_aic
;
;----------------------ldp
#tb
;
lacc
tb,9
;
add
rb,2
; Initialize TB and RB register
add
#02h
;
call
send_aic
;
;----------------------ldp
#aic_ctr
;lacc
aic_ctr,2
; Initialize control register
add
#03h
;
call
send_aic
;
;----------------------ret
send_aic:
ldp
#0
; Data page point is 0 (MM regs)
sach
dxr
; send ACChi 00
clrc
intm
; enable interrupts
idle
; wait for interrupt
add
#6h,15
; 0000 0000 0000 0011 XXXX XXXX XXXX XXXX b
sach
dxr
; send ACChi to initiate secondary protocol
idle
; wait for interrupt
sacl
dxr
; send the parameter register
idle
; wait for interrupt
G.Blanchet & P.Devriendt
lacl
sacl
idle
setc
ret
29
#0
dxr
Le DSK-C50 de Texas Instruments
; clear ACClo
; send another to make sure 1st word got sent
; wait for interrupt
intm
Vérifier le fonctionnement du système en jouant sur les divers paramètres.
III.7.2. FILTRAGE UTILISANT LA STRUCTURE HARVARD DU PROCESSEUR
E.16 Optimiser le traitement précédent en implantant les coefficients dans le bloc B0 configuré en
mémoire programme. Les différentes insructions de transfert dont les suivantes :
Instruction
BLDD
BLDP
BLPD
TBLR
TBLW
SMMR
LMMR
Type de transfert
Donnée externe vers donnée interne
Donnée externe vers programme interne
Programme externe vers donnée interne
Programme vers donnée
Donnée vers programme
Espace d'E/S vers mémoire de données
Mémoire de données vers espace E/S
III.7.3. FILTRAGE RII AVEC DéCOMPOSITION EN FILTRES DU SECOND ORDRE
III.7.4. PROGRAMMATION D'UN RéJECTEUR
1 − 2 cos ϕz −1 + z −2
H(z) = α
1 − 2ρ cos ϕz −1 + ρ 2 z −2
Téléchargement