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