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