Vous êtes sur la page 1sur 8

Université de Tebessa Département de Génie Electrique

Module : DSP et FPGA Niveau : Master 1 Télécommunication & Réseaux


Suite chapitre 3 Gestion des entrées-sorties
Implémentation d'algorithmes sur DSP

I. Introduction et Rappel sur les interruptions


L’ordinateur échange des données à travers des périphérique E/S externes: –Électroniques:
Mémoires –Magnétiques: Disque –Mécaniques: clavier , imprimante. Pour dialoguer avec ces
périphériques le microprocesseur a trois façons de communiquer avec ces derniers :
 En questionnant de façon continue le périphérique pour vérifier que des données peuvent
être lues ou écrites (Polling). Scrutation ( Polling): L’initiative est au programme
 En l'interrompant lorsqu'un périphérique est prêt à lire ou écrire des données (interruption).
Interruption: l’initiative est au périphérique
 En établissant une communication directe entre deux périphériques (DMA : Direct memory
acces

Lors d’une utilisation normale d’un ordinateur, il y a en permanence l’exécution d’instructions.


Toutes ces instructions ne dépendent pas d’un même programme. En effet, il y a plusieurs
programmes qui se partagent le CPU, les entrées/sorties et donc pour exécuter les instructions, il y a
un procédé cyclique d’interruption / sauvegarde / exécution / restauration. Il existe un ensemble
d’interruptions :
Figure 1. Hiérarchie des interruptions

Le principe de fonctionnement des interruptions est :


 de stopper le programme principal.
 de lire la table des vecteurs d’interruption pour connaître l’adresse de la procédure chargée
de traiter l’interruption.
 de sauvegarder le contexte d’exécution.
 d’exécuter la procédure.
 de recharger le contexte d’exécution afin de reprendre l’exécution du programme principal.

II. Le principe des interruptions matérielles

Le fonctionnement des périphériques se fait en général d'une manière asynchrone, donc


plusieurs interruptions peuvent être déclenchées en même temps, il existe souvent un contrôleur
d'interruptions destiné à gérer les conflits entre interruptions. Une interruption est signalée au
processeur par un signal électrique sur une borne spéciale. Lors de la réception de ce signal, le

1
Université de Tebessa Département de Génie Electrique
Module : DSP et FPGA Niveau : Master 1 Télécommunication & Réseaux
processeur (traite) l'interruption dès la fin de l'instruction qu'il était en train d'exécuter. Le
traitement de l'interruption consiste soit :
Le principe d’interruption matérielle est :
Figure 2. Principe d'interruption matérielle

Les interruptions matérielles permettent au processeur de réagir aux actions des


périphériques externes comme le clavier, la souris …, Chaque fil, appelé IRQ (Interrupt ReQuest) est
raccordé à un périphérique (ou un ensemble de périphériques).

II.1. La prise en compte d’une interruption


Si nous prenons l’exemple du clavier, celui-ci est raccordé à l’IRQ 1. Lorsque le clavier sollicite
l’attention du processeur, celui-ci envoie un signal sur cette patte. Le numéro de l’interruption est
alors mis sur le bus de données pour être transmis vers le processeur. Lorsque le bus de données est
stable, le contrôleur d’interruption envoie un signal IRQ Request (INTR) vers le processeur pour lui
demander de tenir compte du clavier. Le processeur indique par un INT ACKNOWLEDGE (INTA) qu’il
a pris en compte le signal d’interruption : le contrôleur d’interruption désactive alors ce signal pour
pouvoir en reprendre un en compte ultérieurement.

Figure 4. IRQ clavier

Les sous-programmes d'interruption

2
Université de Tebessa Département de Génie Electrique
Module : DSP et FPGA Niveau : Master 1 Télécommunication & Réseaux
On peut imaginer que, lorsqu'un périphérique demande une interruption au microprocesseur, il
lui envoie simultanément l'adresse à laquelle son programme spécifique est logé. La table s'appelle
la table des vecteurs d'interruptions. Dans les PC, elle est systématiquement et obligatoirement
logée à partir de l'adresse 00000 de la mémoire centrale. En pratique, 1 Ko (soit 1024 octets) sont
réservés pour cette table, laquelle s'étend ainsi de 00000 à 003FF en hexadécimal. Sachant que 4
octets sont réservés pour une adresse d'interruption, cette table peut en contenir 256 adresses.

Un périphérique demande une interruption.


1. Le circuit d'interface la transmet à un circuit spécialisé appelé gestionnaire des interruptions.
2. Ce circuit «programmable» d'interruptions transmet cette demande au microprocesseur en
l'accompagnant du numéro de l'interruption.
3. Le processeur termine l'instruction en cours de traitement et incrémente le compteur
ordinal, de façon à pointer l'instruction suivante (qui ne sera pas exécutée dans l'immédiat).
4. Il sauvegarde tous ses registres dans la pile.
5. Il envoie un accusé de réception vers le périphérique.
6. Il multiplie par 4 le numéro de l'interruption pour calculer une adresse en mémoire (ceci ne
s'applique qu'aux PC « processeur INTEL ».
7. Il lit en mémoire, à partir de cette adresse, les 4 octets qui vont le brancher sur le bon
programme de traitement de l'interruption.
8. Il introduit cette nouvelle adresse dans son compteur ordinal.
9. Il commence l'exécution du programme de traitement de l'interruption à partir de cette
adresse.
10. L'interruption traitée, il rencontre une instruction de Retour dans le sous-programme
d'interruption qui se termine là dessus.
11. Le microprocesseur récupère dans la pile de sauvegarde le contenu de ses registres
sauvegardés et les recharge.
12. Il reprend et poursuit l'exécution du programme principal qui avait été interrompu.

III. Le principe des interruptions logicielles

Les interruptions logicielles sont semblables aux interruptions matérielles. L'unique


différence réside dans le fait que les interruptions logicielles sont émises par des programmes.
Le principe d’interruption logicielle est :

Figure 6. Principe d'interruption logicielle

3
Université de Tebessa Département de Génie Electrique
Module : DSP et FPGA Niveau : Master 1 Télécommunication & Réseaux

Il existe trois types d'interruptions sur les CPU des DSP TMS320Cx :
- RESET (Réinitialiser)
- Masquable ((INT4−INT15))
- Non masquable (NMI)
IV. Les priorités et sources d'interruption du processeur DSP.
 Le DSP TMS320C67x possède un contrôleur d'interruption à priorité vectorielle qui gère 16
interruptions CPU différentes. L'interruption la plus prioritaire est qui ne peut pas
être masquée. L'interruption prioritaire suivante est l'interruption non masquable (NMI) qui
est utilisée pour alerter le DSP d’un grave problème matériel.
 Il y a deux interruptions réservées et 12 interruptions CPU masquables supplémentaires. Les
périphériques, tels que les timers, les ports série McBSP et McASP, le contrôleur EDMA et les
broches d'interruption externes provenant du module GPIO présentent un ensemble de
nombreuses sources d'interruption.
 Les 16 interruptions CPU et leurs sources par défaut sont présentées dans le tableau suivant.
INT 00 a la priorité la plus élevée et INT 15 la plus faible.

Une interruption peut être émise en interne ou en externe. Une interruption arrête le
processus CPU en cours afin qu'il puisse effectuer une tâche requise lancée par l'interruption. Le flux
du programme est redirigé vers un ISR. En cas d'interruption, les conditions du processus en cours
doivent être enregistrées afin de pouvoir être restaurées après l'exécution de la tâche d'interruption.
En cas d'interruption, les registres sont enregistrés et le traitement se poursuit vers un ISR. Ensuite,
les registres sont restaurés. Il y a 16 sources d'interruption. Ils comprennent :

 deux interruptions de temporisation,


 quatre interruptions externes,
 quatre interruptions McBSP et quatre interruptions DMA.
 Douze interruptions CPU (INT4 - INT15) sont disponibles. Un sélecteur d'interruption
permet de choisir parmi les 12 interruptions.

IV.1. Accusé de réception de l’interruption (Interrupt Acknowledgment : IACK) et Numéro


d’interruption (Interrupt Number : INUMn)

4
Université de Tebessa Département de Génie Electrique
Module : DSP et FPGA Niveau : Master 1 Télécommunication & Réseaux
Les signaux IACK et INUMn alertent le matériel externe au C6000 qu'une interruption s'est produite et est en
cours de traitement. Le signal IACK indique que la CPU a commencé à traiter une interruption. Le signal
INUMn (INUM3-INUM0) indique le numéro de l'interruption (position de bit dans l'IFR) en cours de
traitement. Par exemple :
INUM3 = 0 (MSB)
INUM2 = 1
INUM1 = 1
INUM0 = 1 (LSB)
Ensemble, ces signaux fournissent la valeur à 4 bits 0111, indiquant que INT7 est en cours de traitement.

IV.2. Registres de contrôle d'interruption

Les registres de contrôle d'interruption sont les suivants:

1. CSR (control status register : registre d'état de contrôle): contient le bit d'activation
d'interruption globale (GIE) et d'autres bits de contrôle / état
2. IER (interrupt enable register : registre d'activation d'interruption): active / désactive les
interruptions individuelles
3. IFR (interrupt flag register : registre drapeau des interruptions): affiche l'état des interruptions
4. ISR (interruption set register): définit les interruptions en attente
5. ICR (interruption clear register): efface les interruptions en attente
6. ISTP (pointeur de table de service d'interruption): localise un ISR
7. IRP (interrupt return pointer : pointeur de retour d'interruption)
8. NRP (pointeur de retour d'interruption non masquable)
 Les interruptions sont à niveau de priorité, la réinitialisation (RESET) a la priorité la plus
élevée. L'interruption RESET et l'interruption non masquable (NMI) sont des broches externes
qui ont respectivement la 1ère et 2ème priorité.
 Le registre d'activation d'interruption (IER) est utilisé pour définir une interruption spécifique
et peut vérifier si elle s'est produite à partir du registre de drapeau d'interruption (IFR). NMI
est non masquable, avec Reset. NMI peut être masqué (désactivé) en effaçant le bit
d'activation d'interruption non masquable (NMIE) dans CSR. Il est mis à zéro uniquement lors
d'une réinitialisation ou lors d'une interruption non masquable.
 Si NMIE est défini sur zéro, toutes les interruptions INT4 à INT15 sont désactivées. Le signal
de RESET est un signal actif-bas utilisé pour arrêter le CPU, et le signal NMI alerte le CPU d'un
problème matériel potentiel.
 Douze interruptions CPU avec des priorités inférieures sont disponibles, correspondant aux
signaux masquables INT4 à INT15. Les priorités de ces interruptions sont: INT4, INT5,. . . ,
INT15. INT4 ayant la priorité la plus élevée et INT15 la priorité la plus faible. Pour qu'un NMI
se produise, le bit NMIE doit être 1 (actif haut). Lors de la réinitialisation (ou après une NMI
précédemment définie), le bit NMIE est remis à zéro afin qu'une interruption de
réinitialisation puisse se produire.
 Pour traiter une interruption masquable, le bit GIE dans le registre d'état de contrôle (CSR) et
le bit NMIE dans l'IER sont définis sur 1. GIE est défini sur 1 avec le bit 0 de CSR défini sur 1, et
NMIE est défini sur 1 avec bit 1 de IER mis à 1. Le bit d'activation d'interruption (IE)
5
Université de Tebessa Département de Génie Electrique
Module : DSP et FPGA Niveau : Master 1 Télécommunication & Réseaux
correspondant à l'interruption masquable souhaitée est également défini sur 1. Lorsque
l'interruption se produit, le bit IFR correspondant est défini sur 1 pour afficher l'état
d'interruption.
 Le tableau suivant contient 16 FP, chacun avec huit instructions. Les adresses du côté droit
correspondent à un décalage associé à chaque interruption spécifique. Par exemple, le FP
pour l'interruption INT11 est à une adresse de base plus un décalage de 160 H. Étant donné
que chaque FP contient huit instructions 32 bits (256 bits) ou 32 octets, chaque adresse de
décalage dans le tableau est incrémentée de 20 H = 32.

Table des services d'interruption

Registre d'état de contrôle (CSR).

Interrupt enable register (IER).

Interrupt flag register (IFR).

Interrupt set register (ISR).


6
Université de Tebessa Département de Génie Electrique
Module : DSP et FPGA Niveau : Master 1 Télécommunication & Réseaux

Interrupt clear register (ICR).

Interrupt service table pointer (ISTP).

V. ENSEMBLE D'INSTRUCTIONS TMS320C6x


Format de code d'assemblage
Un format de code assembleur est représenté par le champ
Étiquette || [ ] Opérandes de l'unité d'instruction; commentaires
Label || [ ] Instruction Unit Operands ; comments
Une étiquette (Label), si elle existe, représente une adresse ou un emplacement de mémoire
spécifique qui contient une instruction ou des données. L'étiquette doit figurer dans la première
colonne. Par exemple,
.word value

Types d'instructions
Ce qui suit illustre une partie de la syntaxe du code assembleur.
 Add/Subtract/Multiply
a) L'instruction ADD .L1 A3, A7, A7;
Ajouter A3 + A7 → A7 (accumuler dans A7) ajoute les valeurs dans les registres A3 et A7 et place le
résultat dans le registre A7. L'unité .L1 est facultative. Si la destination ou le résultat est en B7, l'unité
serait .L2.
b) L'instruction SUB .S1 A1,1, A1; soustraire 1 de A1
Soustrait 1 de A1 pour le décrémenter en utilisant l'unité .S.
c) Les instructions parallèles MPY .M2 A7, B7, B6
|| MPYH .M1 A7, B7, A6
; multiplier 16 LSB de A7, B7 → B6
; multiplier 16 MSB de A7, B7 → A6

 Load / Store
a) L'instruction
LDH .D2 * B2 ++, B7; charge (B2) → B7, incrément B2
|| LDH .D1 * A2 ++, A7; charge (A2) → A7, incrément A2

Charge dans B7 le demi-mot (16 bits) dont l'adresse en mémoire est spécifiée / pointée par
B2. Ensuite, le registre B2 est incrémenté (post-incrémenté) pour pointer vers l'adresse de mémoire
immédiatement supérieure. En parallèle se trouve une autre instruction du mode d'adressage
indirect pour charger dans A7 le contenu en mémoire dont l'adresse est spécifiée par A2. Ensuite, A2
est incrémenté pour pointer vers l'adresse de mémoire immédiatement supérieure.
L'instruction LDW charge un mot de 32 bits. Deux chemins utilisant .D1 et .D2 permettent le

7
Université de Tebessa Département de Génie Electrique
Module : DSP et FPGA Niveau : Master 1 Télécommunication & Réseaux
chargement des données de la mémoire vers les registres A et B en utilisant l'instruction LDW.
L'instruction LDDW à virgule flottante de chargement de deux mots du C6713 peut charger
simultanément deux registres 32 bits dans le côté A et deux registres 32 bits dans le côté B.

b) L'instruction
STW .D2 A1, * + A4 [20]; store A1 → (A4) offset by 20 stocke le mot de 32 bits A1 en mémoire
dont l'adresse est spécifiée par A4 offset de 20 mots (32 bits) ou 80 octets. Le registre d'adresse A4
est pré-incrémenté avec décalage, mais il n'est pas modifié (deux signes plus sont utilisés si A4 doit
être modifié).

 Branch/Move . Branche / Déplacer. Le segment de code suivant illustre la ramification et le


transfert de données:
Loop MVKL .S1 x, A4; déplacer 16 LSB d'adresse x → A4
MVKH .S1 x, A4; déplacer 16 MSB d'adresse x → A4

; décrémente A1
; Branche à Loop si A1! = 0
; Cinq instructions de non-fonctionnement
; stocker A3 dans (A7)

La première instruction déplace les 16 bit inférieurs (LSB) de l'adresse x dans le registre A4. La
deuxième instruction déplace les 16 bit supérieurs (MSB) de l'adresse x vers A4, qui contient
désormais l'adresse complète de 32 bits de x. Il faut utiliser les instructions MVKL / MVKH pour
obtenir une constante 32 bits dans un registre. Le registre A1 est utilisé comme compteur de boucle.
Après avoir été décrémenté avec l'instruction SUB, il est testé pour une branche conditionnelle.
L'exécution se branche sur l'étiquette ou l'adresse Loop si A1 n'est pas nul. Si A1 = 0, l'exécution
continue et les données du registre A3 sont stockées dans la mémoire dont l'adresse est spécifiée
(pointée vers) par A7.

 DIRECTIVES de L’assembleur pour DSP TMX


Une directive assembleur est un message pour l'assembleur (pas le compilateur) et n'est pas une
instruction.
1. .short: pour initialiser un entier de 16 bits.
2. .int: pour initialiser un entier 32 bits (également .word ou .long). Le compilateur traite une
valeur de données longue comme 40 bits, tandis que l'assembleur C6x la traite comme 32 bits.
3. .float: pour initialiser une constante simple précision IEEE 32 bits.
4. .double: pour initialiser une constante double précision IEEE 64 bits.

Remarque : Les unités exécutent des instructions logiques, de décalage (Shifting), des multiplications et des
opérations sur les adresses de données. Tous les transferts de données entre la file de registre et la mémoire
se font exclusivement par les unités. Les deux files de registre (A et B), les huit unités (.L1, .L2, .M1, .M2, .S1,
.S2, .D1 et .D2), les deux voies de chargement depuis la mémoire LD1 et LD2 (LD=Load), les deux voies de
stockage vers la mémoire ST1 et ST2 (ST=Store), deux croisements (registre file cross path) entre les files de
registre 1X et 2X et deux chemins d’adresse de données (data address paths) DA1 et DA2.

Vous aimerez peut-être aussi