Escolar Documentos
Profissional Documentos
Cultura Documentos
Les interruptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Problmes rencontrs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 10
MATRIEL UTILIS
Introduction
Le but premier du TP est de nous apprendre utiliser un priphrique sur un bus du 68k et plus prcisment le PTM (Programmable Timer Module). Pour mettre en application la thorie vue en cours, nous avions pour objectif dafcher dans la console (shell) le rsultat dun compteur en boucle allant de 0 99 et ce toutes les secondes. Etant donn quil est impossible davoir une priode dune seconde avec la mthode que nous avions vue pour le moment, nous ferons lafchage toutes les 0.33 secondes dans un premier temps. Le dernier exercice propos nous demandait de trouver une mthode permettant un afchage prcis toutes les secondes.
Matriel utilis
Plaquette 68000 PC sous Linux Ide "kit" et commande assemblage pour 68k
Page 3
LE PROGRAMME
3
3.1
Le programme
Le PTM
Le PTM 6840 (Programmable Timer Module) est un timer programmable. Il permet de gnrer des signaux priodiques ou monostables partir de lhorloge qui lui est fournie. Le PTM est donc un diviseur dhorloge (un compteur). Ce composant comporte trois compteurs binaires de 16 bits, trois registres de contrles (un pour chaque compteur, bien quils aient des spcicits pour chacun dentre eux) ainsi quun registre dtat. Chaque compteur dispose de son propre registre dterminant sa priode. Ce registre est divis en deux sous registre : MSB (Most Signicant Byte) qui est loctet de poids fort, ainsi quun LSB (Least Signicant Byte) qui est loctet de poids faible. La raison de ceci est que le bus de donnes du PTM est un bus de donnes de 8 bits (D0-D7).
Page 4
LE PROGRAMME
F IG . 1 Initialisation du PTM An de gnrer les interruptions, nous avons choisi le compteur 3 du PTM qui a lavantage davoir un prdiviseur dhorloge par 8. Cette fonctionnalit est activable en mettant au niveau logique "1" le premier bit du registre CR3 (registre de contrle du compteur 3), soit CR30 = 1. 3.1.1 Paramtrage du PTM
Premirement, nous devons arreter tous les compteurs. Soit positionner le premier bit de CR1 0. Cependant, il nest pas possible daccder directement aux registre CR1 et CR3. Il faut dabord mettre le bit CR20 1 pour crire dans CR1 et 0 pour CR3. Nous plaons le mot 43h (01000011b) dans ce registre.
Page 5
LE PROGRAMME
F IG . 2 Registre de contrle CR3 Nous avons choisi pour notre montage le mode cyclique puisque nous souhaitons gnrer des signaux priodiques. Il nous reste maintenant dnir ce temps de 0.33 secondes qui dnit la dure de la priode. 3.1.2 Calcul de priode
Tint = Tclock N Le paramtre Tint est celui qui nous intresse puisquil correspond la dure de la priode dinterruption, celle qui dit toutes les Tint secondes, le sous programme dinterruption sera appel . Le Tclock lui dpend uniquement de la frquence du processeur et ventuellement de la division de la frquence dhorloge par huit. Nous sommes dans ce cas, le Tclock sera donc gal (sachant que notre processeur 8 68000 est cadenc 1 MHz) 6 soit 8 106 . 10 Il nous reste ensuite pour trouver N effectuer le calcul de Tint / Tclock . Dans notre cas, nous trouvons en hexadcimal la valeur A2C1. 1 8x 106 = x = = (41666, 666)10 = (A2C 1)16 3 106 24 Loctet de poids fort de cette valeur (A2) sera plac dans le registre correspondant loctet de poids fort du compteur 3, tandis que loctet de poids faible (C1) sera plac dans le registre de poids faible du compteur 3. Page 6
LE PROGRAMME
3.2
Les interruptions
Il existe deux manires de recevoir les signaux du PTM : la scrutation ou lutilisation des interruptions. Nous avons choisi la seconde mthode pour des raisons pdagogiques (apprendre utiliser les interruptions vectorises). Et que bien que notre programme soit mono-processus, cela le rend plus claire. A chaque interruption, le 68000 sauvegarde le contenu du registre PC (Program Counter) ainsi que le registre SR (Status Register) an de pouvoir revenir au programme principal une fois la routine dinterruption traite. Cette phase est appele sauvegarde du contexte et le contenu de ces registres est mmoris a ladresse pointe par A7 (Stack Pointer, ou pointeur de pile) du 68000, plus exactement dans USP (User Stack Pointer) si linterruption avait eu lieu pendant que le microprocesseur fonctionnait en mode utilisateur ou SSP (Supervisor Stack Pointer) dans le cas du mode superviseur. Dans tous les cas, juste aprs la sauvegarde du contexte, le 68000 passe en mode superviseur, sans pour autant revenir automatiquement au mode utilis avant linterruption. Dans notre cas, toutes les 0.33 secondes, une interruption est gnre par le PTM. Nous devions donc traiter linterruption via une routine appele "sous programme dinterruption". Ce sous programme sera appel chaque interruption. Nous avons utilis des interruptions auto-vectorises, cest dire que nous avons fait appel un registre du 68000 appel VBR (Vector Base Register), ce registre contenant son adresse de base plus un offset de 70H en hexadecimal, ladresse mmoire du sous programme dinterruption correspondant au PTM. La taille des vecteurs est 4 octets, soit 70h/4 = 1C, soit lintrruption 28. Linterruption que nous avions grer tait de niveau 4 (niveau indiqu par les intervenants de TP). La documentation technique du 68000 stipulant que tout sous-programme dinterruption de niveau 4 doit se trouver ladresse de base du registre VBR + un offset de 70H, nous avons plac ladresse de notre sous-programme dinterruption dans la table des vecteurs dinterruptions en consquence. Le schma visible ci-aprs aidera la comprhension du principe de traitement dune interruption auto-vectorise :
Page 7
LE COMPTEUR
Le compteur
Nous commenons par un pr-diviseur par trois pour obtenir une priode dune 1 seconde ( 3 = 1) Puis par un compteur en boucle de 0 99. 3
Page 8
LE COMPTEUR
F IG . 4 Schma du comtpeur
Page 9
5
5.1
Divers
Problmes rencontrs
Plaquette boggue : reboot brutale Prsence dun TRAP #15 dans le chier inclure : faire deux fois got dans le kit
6
1
i n c l u d e ptmlcdadc . s ;; ; INITIALISATION DES ADRESSES MEMOIRES DES ; ; REGISTRES ; ;; ; a d r e s s e de base : 140000H ; t o u s l e s r e g i s t r e s s o n t s i t u e s a des a d r e s s e s ; i m p a i r e s ( A0 = 1 )
11
16
CR3 EQU 140001H CR2 EQU 140003H CR1 EQU CR3 SRPTM EQU CR2 N EQU A2C1H ; A2 o c t e t de poids f o r t , C1 o c t e t de poids f a i b l e , proc cadence a 1 MHz OUTSTR EQU $0021 ; code de l appel noyau OUTSTR ;; ; g e s t i o n du compteur 1 ; ;;
21
;WMSB1
; RCPT1 EQU WMSB1 ; l e c t u r e dans l e compteur 1 ; WLCPT1 EQU 140007H ; e c r i t u r e dans l e s l a t c h e s du compteur 1 ( LSB )
26
; RLSB1
EQU WLCPT1
; l e c t u r e du b u f f e r LSB1
;; ; g e s t i o n du compteur 2 ; Page 10
6 ;; ;WMSB2
31
36
; RCPT2 EQU WMSB2 ; l e c t u r e dans l e compteur 2 ; WLCPT2 EQU 14000BH ; e c r i t u r e dans l e s l a t c h e s du compteur 2 ( LSB ) ; RLSB2 EQU WLCPT2 ; l e c t u r e du b u f f e r LSB2
41
46
RCPT3 EQU WMSB3 ; l e c t u r e dans l e compteur 3 WLCPT3 EQU 14000FH ; e c r i t u r e dans l e s l a t c h e s du compteur 3 ( LSB ) RLSB3 EQU WLCPT3 ; l e c t u r e du b u f f e r LSB3
51
56
61
;; ; On met CR10 a 1 ; ; On a r r e t e l e t i m e r ; ;; MOVE. B #01H, CR1 ;; ; On e c r i t dans CR3 donc ; ; i l f a u t que CR20 = 0 ; ;; MOVE. B #00H, CR2
66
71
Page 11
;; ; I n i t i a l i s a t i o n de CR3 ; ;;
76
MOVE. B
81
86
91
MOVE. B
#1H, CR2
101
106
111
6 LOOP
116
BRA LOOP
121
;; ; Gestion du sous programme ; ;d interruption ; ; ( appele t o u t e s l e s 0 . 3 3 s ) ; ;; SPINT MOVE. B SRPTM, D0 MOVE. B RLSB3 , D0 MOVE. B WMSB3, D0 ADD. B # 1 , compteur+1 CMP. B # 9 , compteur+1 BLE SUITE MOVE. B # 0 , compteur+1 ADD. B # 1 , compteur CMP. B # 9 , compteur BLE SUITE MOVE. B # 0 , compteur SUITE PEA f i n ; empile l a d r e s s e du d e r n i e r c a r a c t r e + 1 PEA compteur ; empile l a d r e s s e du premier c a r a c t r e TRAP #15 ; appel noyau DC.W OUTSTR RTE compteur DC. B 0 0 , 1 3 , 1 0 ; message , r e t o u r c h a r i o t , s a u t de ligne f i n DC. B 0 END
126
131
136
141
Page 13