Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
BulgaraCeha slovacaCroataEnglezaEstonaFinlandezaFranceza
GermanaItalianaLetonaLituanianaMaghiaraOlandezaPoloneza
SarbaSlovenaSpaniolaSuedezaTurcaUcraineana

AdministrationAnimauxArtComptabilitéDiversesDroitéducationélectronique
FilmsL'économieL'histoireL'informatiqueLa biologieLa géographieLa grammaireLa littérature
La médecineLa musiqueLa politiqueLa psychologieLa sociologieLe tourismeLes mathématiquesManagement
PersonnalitésPhysiqueRecettesSportTechnique

Les interruptions

technique



+ Font mai mare | - Font mai mic



DOCUMENTE SIMILARE

Les interruptions

Le C50 possède 4 broches externes d’interruption INT1 à INT4. A ces interruptions d’usage général s’ajoute une broche reset RS et une broche NMI (Non Maskable Interrupt).



Des interruptions internes peuvent être générées par des périphériques intégrés :

le timer génère l’interruption TINT,

les 2 ports séries génèrent les interruptions RINT, XINT et TRNT, TXNT ( pour le port série multiprocesseur).

Les interruptions externes sont aussi générées par les instructions TRAP, INTR n et NMI (Interruption logicielle).

Deux mots mémoire sont réservés pour chaque vecteur d’interruption. Cela permet, par exemple de mémoriser une instruction de branchement.

Il existe (Cf figure 34) 32 vecteurs d’interruption placés au reset à l’adresse 0000h jusqu'à l’adresse 003Fh. On peut accéder à n’importe quel vecteur d’interruption par l’instruction INTR n ( avec n compris entre 0 et 31). Chaque vecteur est classé par priorité. Ce qui veut dire que si 2 interruptions apparaissent en même temps, ce sera la plus prioritaire qui sera servie en premier.

Fig. 34 :Adresses et priorité des vecteurs d’interruption.

Relocation de la table des vecteurs d’interruption : IPTR

Bien que localisés normalement à l’adresse 0 en mémoire programme, les vecteurs d’interruption peuvent être repositionnés au commencement de chaque bloc de 2 Kmots, en modifiant le contenu du pointeur de vecteur d’interruption IPTR (5 bits situés dans le registre de contrôle PMST). L’adresse du vecteur d’interruption est en effet formée des 5 bits de IPTR (poids fort de l’adresse) et du numéro d’interruption fois 2.

Mémoire programme

 
Exemple : relocation des vecteurs d’interruption à l’adresse F800h

F800h interupt

location

F83Fh

  SOLUTION1 LACL #1111100000000000b ; mise à 1 des 5 bits

SAMM  PMST ; de IPTR

SOLUTION 2  LDP #0 ; sélection de la page 0

OPL  #F800h, PMST ; mise à 1 des 5 bits de IPTR

SOLUTION3 LDP #0 ; sélection de la page 0

SPLK #31, IFR ; IFR est mappé en mémoire page 0 (MMR)

La solution 1 utilise l’adressage mappé (MMR) alors que la deuxième solution force seulement les bits de IPTR dans le registre PMST à l’aide d’un adressage direct. Ce qui explique la sélection auparavant de la page 0. La solution 3 utilise l’instruction SPLK qui vient placer la valeur 31 (soit 11111b) dans IFR (adressage direct). IFR est mappé en mémoire 0 (Cf figure 18).

Fabrication de l’adresse des vecteurs d’interruption dans l’exemple:

0 0 0 0

numéro d’it * 2

IPTR

 

Registres IMR et IFR :

Interruptions masquables : registre IMR et bit INTM

Toutes les interruptions, à part le reset (broche RS) et NMI (broche Non Maskable Interrupt), peuvent être masquées individuellement au moyen d’un bit dédié dans le registre de masque d’interruption IMR (Interrupt Mask Register)

9

Réservé

INT4

TXNT

TRNT

XINT

RINT

TINT

INT3

INT2

INT1

Registre IMR : si TINT = 1 interruption TIMER autorisée

si TINT = 0 interruption TIMER masquée

Exemple :

CLRC INTM ; autorisation des interruptions

LDP #0

OPL #0008h, OMR ; autorisation d’activation de l’interruption TINT

Attention : il existe un bit du registre ST0 (registre de contrôle) noté INTM qui doit être mis à 0 pour autoriser les interruptions non masquées. Si une interruption est activée et que INTM = 0 et le bit de IMR correspondant à l’it = 1, le processeur se branche vers le vecteur d’interruption et place le bit INTM à 1 pour masquer toutes les interruptions masquables (sauf RS et NMI) jusqu’au retour d’interruption RETE (qui remet INTM à 0).

Registre des drapeaux d’interruption : IFR

Lorsqu’une interruption arrive, un bit appelé drapeau est activé dans le registre de drapeaux d’interruption IFR (Interrupt Flag Register), que l’interruption soit autorisée ou non.

9

Réservé

INT4

TXNT

TRNT

XINT

RINT

TINT

INT3

INT2

INT1

Registre IFR : si TINT = 1 demande d’interruption du TIMER

si TINT = 0 pas de demande d’interruption du TIMER

Un 1 logique dans IFR indique que l’interruption est active, ou en attente de service. On peut effacer une interruption en écrivant un 1 dans le bit concerné de IFR et, ainsi effacer toutes les interruptions en attente, en réécrivant le contenu courant de IFR dans IFR.

Un drapeau dans IFR peut être effacé par l’un des événements suivants :

Un reset du circuit,

le programme sert l’interruption ,

le programme écrit un 1 dans le bit correspondant de IFR,

exécution de l’instruction INTR avec le numéro d’interruption correspondant.

Remarque : l’interruption logicielle INTR n permet d’accéder à n’importe qu’elle interruption matérielle ou logicielle. Ainsi l’instruction INTR 1 va nous envoyer vers le vecteur d’interruption de l’interruption matérielle INT1. Ce qui nous permet de simuler une interruption matérielle dans le programme.

Exemple :

LACL IFR ;lecture de IFR

SACL IFR ; effacement de toutes les interruptions non encore traitées

Principe de fonctionnement :

Quand le CPU accepte une interruption, le compteur de programme est poussé au sommet de la pile matérielle 8 niveaux (Cf fig. 10). Cette pile matérielle est aussi utilisée pour les appels à procédure.

De plus, le processeur sauve le contexte dans une pile matérielle un niveau : soient ACC, ACCB, PREG, ST0, ST1, PMST, TREG, INDX et ARCR. INTM est mis à 1 et donc toutes les interruptions masquables sont masquées. Puis le compteur de programme est chargé avec l’adresse du vecteur d’interruption. Il y a alors branchement vers la routine d’interruption.

En fin de routine, l’instruction RETE dépile le contexte et le pointeur de programme et démasque les interruptions. Une nouvelle interruption (la plus prioritaire) peut alors être activé.


La figure 34 donne un exemple de fonctionnement de l’interruption INT1. Pour éviter des déclenchements intempestifs une interruption matérielle est validée si elle dure plus de 3 cycles à l’état bas et 2 cycles à l’état haut (rappel : un cycle = 50 ns pour un fclk = 40 MHz). Ce principe est illustré par la figure 35. A partir de ce moment là, le bit 0 de IFR est mis à 1 et si l’interruption est non masquée, il y a branchement à l’adresse 02h. S’il y a apparition d’un nouvelle interruption au cours de la routine d’interruption, cette interruption ne sera servie qu’après le retour d’interruption RETE.

La broche IACK est utilisée lorsque la table des vecteurs d’interruption est placée en mémoire externe, et c’est le cas à l’adresse 0. Dans ce cas le processeur met le numéro d’it sur le bus externe et vient lire l’instruction lorsque IACK passe de 0 à 1.

Conditions initiales :

INTM = 0

IMR =0001h : INT1 non masqué

IPTR = 0 : vecteur d’it à l’adresse 0h

 


3 cycles min


INT1

Détection de INT1

 

9 cycles

 
IACK

IFR(bit0)

INTM

rout_iint1

Branchement à l’adresse 02h

(service d’it INT1)

sauvegarde du contexte

 

RETE : retour d’it

INTM = 0

restauration du contexte

 


Branchement à l’adresse 02h

(service d’it INT1)

 
Fig. 34 : Chronogramme.

Exemple :

On désire compter le nombre de fois que l’interruption INT1 passe à 0. Pour cela on place sur la broche INT1 un bouton poussoir. On désire placer la table des vecteurs d’interruption à l’adresse 0800h en mémoire programme (mémoire SARAM on chip).

.ps 0802h ; directive assembleur : permet de spécifier

; l’adresse d’écriture en mémoire programme

int1 :  B rout_it1 ; Branchement vers la routine d’interruption INT1

.ps 0840h

.entry ; point d’entrer du programme

SETC INTM ; désactivation des interruptions

LDP #0 ; sélection page 0

OPL #0810h, PMST ; IPTR = 1 donc table d’it à l’adresse 0800h et SARAM en mémoire programme

OPL #01h, IMR ; démasque INT1

LACL #0 ; mise à 0 du compteur

CLRC INTM ; activation des interruption

; a partir de là, l’interruption int1 peut être prise en compte

WAIT  B WAIT . boucle infinie

rout_it1 ADD #1 ; ACC ACC + 1



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 747
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved