Pl2 INTER 2.DOC/fr: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
Olivier.jan (talk | contribs) mNo edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | {{Languages|Pl2 INTER 2.DOC}} |
||
<pre> |
<pre> |
||
Line 16: | Line 17: | ||
($FFFA1D) |
($FFFA1D) |
||
− | Les bits 0 à 2 sont |
+ | Les bits 0 à 2 sont réservés au TIMER C |
− | Les bits 4 à 6 sont |
+ | Les bits 4 à 6 sont réservés au TIMER D |
Voir le tableau de TACR pour la signification des bits... |
Voir le tableau de TACR pour la signification des bits... |
||
Je vous rappelle que nous n'utiliserons pas ces TIMERS car |
Je vous rappelle que nous n'utiliserons pas ces TIMERS car |
||
− | ils sont |
+ | ils sont déjà utilisés par le système à l'origine. |
16) à 19) TADR,TBDR,TCDR,TDDR (à partir de $FFFA1F): |
16) à 19) TADR,TBDR,TCDR,TDDR (à partir de $FFFA1F): |
||
Line 30: | Line 31: | ||
20) à 24) SRC,CR,RSR,TSR,DR (à partir de $AFFF27): |
20) à 24) SRC,CR,RSR,TSR,DR (à partir de $AFFF27): |
||
− | Des registres qui ne sont pas |
+ | Des registres qui ne sont pas utilisés par les TIMERS, et ils |
− | se contentent de controler les |
+ | se contentent de controler les émissions de caractères... |
− | Maintenant que vous ètes |
+ | Maintenant que vous ètes familiarisé avec les différents registres |
− | du MFP 68901, vous pourrez commencer à |
+ | du MFP 68901, vous pourrez commencer à réaliser vos premiers pro- |
grammes sous interruption. |
grammes sous interruption. |
||
Pour modifier un registre du MFP, il suffit de connaitre l'adresse |
Pour modifier un registre du MFP, il suffit de connaitre l'adresse |
||
− | du registre et d'y |
+ | du registre et d'y déposer les données qu'il faut. |
- Voilà comment il faut procèder pour mettre une routine sous |
- Voilà comment il faut procèder pour mettre une routine sous |
||
Line 49: | Line 50: | ||
* On passe en MODE SUPERVISEUR pour pouvoir atteindre les registre |
* On passe en MODE SUPERVISEUR pour pouvoir atteindre les registre |
||
du MFP. |
du MFP. |
||
− | * On met à 0 le bit correspondant au TIMER |
+ | * On met à 0 le bit correspondant au TIMER utilisé dans le registre |
IMR.(Avec en AND #BBB,destination ou un BCLR #BBB,destination) |
IMR.(Avec en AND #BBB,destination ou un BCLR #BBB,destination) |
||
− | * On met à 0 le bit correspondant au TIMER |
+ | * On met à 0 le bit correspondant au TIMER utilisé dans le registre |
ISR. |
ISR. |
||
− | * On met à 0 le bit correspondant au TIMER |
+ | * On met à 0 le bit correspondant au TIMER utilisé dans le registre |
IPR. |
IPR. |
||
− | * On met à 0 le bit correspondant au TIMER |
+ | * On met à 0 le bit correspondant au TIMER utilisé dans le registre |
IER. |
IER. |
||
* On installe notre routine: |
* On installe notre routine: |
||
− | .Soit en |
+ | .Soit en déposant l'adresse de notre routine directement dans le |
− | VECTEUR D'EXCEPTION correspondant au TIMER |
+ | VECTEUR D'EXCEPTION correspondant au TIMER utilisé: |
$134 pour le TIMER A, $120 pour le TIMER B, $114 pour le TIMER C, |
$134 pour le TIMER A, $120 pour le TIMER B, $114 pour le TIMER C, |
||
$110 pour le TIMER D (avec MOVE.L #ADRESSE,$vecteur) |
$110 pour le TIMER D (avec MOVE.L #ADRESSE,$vecteur) |
||
Line 66: | Line 67: | ||
Puis en modifiant directement les REGISTRES DE CONTROLE et DE DONNEE |
Puis en modifiant directement les REGISTRES DE CONTROLE et DE DONNEE |
||
− | du TIMER en |
+ | du TIMER en déposant les nouvelles valeurs aux adresses de ceux-ci. |
(Avec MOVE.B #VALEUR,$adresse) |
(Avec MOVE.B #VALEUR,$adresse) |
||
(Voir les adresses des REGISTRES TACR,TBCR,TCDCR (CONTROLE) et les |
(Voir les adresses des REGISTRES TACR,TBCR,TCDCR (CONTROLE) et les |
||
Line 91: | Line 92: | ||
---------------------------------------------------------------------- |
---------------------------------------------------------------------- |
||
− | Et voilà, ma routine est |
+ | Et voilà, ma routine est installée !!! |
Line 97: | Line 98: | ||
La routine elle même: |
La routine elle même: |
||
--------------------- |
--------------------- |
||
− | La routine à mettre sous interruption devra pouvoir s' |
+ | La routine à mettre sous interruption devra pouvoir s'exécuter |
entièrement avant l'appel suivant du TIMER car sinon attention |
entièrement avant l'appel suivant du TIMER car sinon attention |
||
au plantage !! |
au plantage !! |
||
Celle-ci ne devra donc pas être trop longue: |
Celle-ci ne devra donc pas être trop longue: |
||
On ne pourra pas par exemple mettre une routine qui demande 0,5 |
On ne pourra pas par exemple mettre une routine qui demande 0,5 |
||
− | secondes pour s' |
+ | secondes pour s'exécuter entièrement sous interruption et règler |
− | sa |
+ | sa fréquence d'appel à 0,007 secondes ... |
Votre routine sous interruption devra toujours se terminer par: |
Votre routine sous interruption devra toujours se terminer par: |
||
− | .Une mise à 0 du bit correspondant au TIMER |
+ | .Une mise à 0 du bit correspondant au TIMER utilisé du registre ISR |
,pour indiquer au MFP que la routine se termine. |
,pour indiquer au MFP que la routine se termine. |
||
Line 120: | Line 121: | ||
− | De plus, comme votre routine s' |
+ | De plus, comme votre routine s'exécute à intervals réguliers, je vous |
− | + | déconseille fortement d'utiliser les registre DN ou AN (mème SP) car |
|
ceci peut provoquer des changments brusques au niveaux des registres |
ceci peut provoquer des changments brusques au niveaux des registres |
||
− | + | conscernés dans la programme principal.(Le programme sous interruption |
|
− | s' |
+ | s'exécutant sans interrompre le programme principal, nous en verrons |
une très bonne illustration dans un prochain exercice) |
une très bonne illustration dans un prochain exercice) |
||
Le programme sous interruption pourra toutefois faire appel à des |
Le programme sous interruption pourra toutefois faire appel à des |
||
− | adresses du segment DATA ou BSS pour lire ou |
+ | adresses du segment DATA ou BSS pour lire ou déposer des valeurs... |
− | Voilà pour la |
+ | Voilà pour la théorie, je vous conseille fortement de relire tout |
le chapitre à fond car maintenant viennent les EXERCICES ... |
le chapitre à fond car maintenant viennent les EXERCICES ... |
||
Latest revision as of 21:02, 17 December 2023
suite sur les INTERRUPTIONS ... --------------------------- 14) TBCR :Identique à TACR, sauf que ce regsitre controle le TIMER B ($FFFA1B) 15) TCDCR:Vecteur bit ayant le mème role que TACR et TBCR pour les TIMER C et TIMER D, mais ici seul le DELAY MODE est dis- ponible. ($FFFA1D) Les bits 0 à 2 sont réservés au TIMER C Les bits 4 à 6 sont réservés au TIMER D Voir le tableau de TACR pour la signification des bits... Je vous rappelle que nous n'utiliserons pas ces TIMERS car ils sont déjà utilisés par le système à l'origine. 16) à 19) TADR,TBDR,TCDR,TDDR (à partir de $FFFA1F): Voilà les registres de DONNEES des 4 TIMERS ... 20) à 24) SRC,CR,RSR,TSR,DR (à partir de $AFFF27): Des registres qui ne sont pas utilisés par les TIMERS, et ils se contentent de controler les émissions de caractères... Maintenant que vous ètes familiarisé avec les différents registres du MFP 68901, vous pourrez commencer à réaliser vos premiers pro- grammes sous interruption. Pour modifier un registre du MFP, il suffit de connaitre l'adresse du registre et d'y déposer les données qu'il faut. - Voilà comment il faut procèder pour mettre une routine sous interruption: -------------------------------------------------------------------- * On passe en MODE SUPERVISEUR pour pouvoir atteindre les registre du MFP. * On met à 0 le bit correspondant au TIMER utilisé dans le registre IMR.(Avec en AND #BBB,destination ou un BCLR #BBB,destination) * On met à 0 le bit correspondant au TIMER utilisé dans le registre ISR. * On met à 0 le bit correspondant au TIMER utilisé dans le registre IPR. * On met à 0 le bit correspondant au TIMER utilisé dans le registre IER. * On installe notre routine: .Soit en déposant l'adresse de notre routine directement dans le VECTEUR D'EXCEPTION correspondant au TIMER utilisé: $134 pour le TIMER A, $120 pour le TIMER B, $114 pour le TIMER C, $110 pour le TIMER D (avec MOVE.L #ADRESSE,$vecteur) (Voir le Tableau des vecteurs d'exception) Puis en modifiant directement les REGISTRES DE CONTROLE et DE DONNEE du TIMER en déposant les nouvelles valeurs aux adresses de ceux-ci. (Avec MOVE.B #VALEUR,$adresse) (Voir les adresses des REGISTRES TACR,TBCR,TCDCR (CONTROLE) et les adresses des REGISTRES TADR,TBDR,TCDR,TDDR (DONNEE) ) .Soit en appelant une fonction de l'XBIOS qui le fait à notre place: C'est la fonction XBTIMER de l'XBIOS. Les paramètres à passer sont: L-M:Adresse de la routine MOT:Valeur du registre de DONNEE MOT:Valeur de registre de CONTROLE MOT:Le code du TIMER (0=TIMER A,1=TIMER B,2=TIMER C,3=TIMER D) MOT:Code de la fonction = $1F Il faudra encore: .Mettre le bit du registre IER correspondant à notre TIMER à 1 (Pour valider notre routine sous interruption) .Mettre le bit du registre IMR correspondant à notre TIMER à 1 ---------------------------------------------------------------------- Et voilà, ma routine est installée !!! La routine elle même: --------------------- La routine à mettre sous interruption devra pouvoir s'exécuter entièrement avant l'appel suivant du TIMER car sinon attention au plantage !! Celle-ci ne devra donc pas être trop longue: On ne pourra pas par exemple mettre une routine qui demande 0,5 secondes pour s'exécuter entièrement sous interruption et règler sa fréquence d'appel à 0,007 secondes ... Votre routine sous interruption devra toujours se terminer par: .Une mise à 0 du bit correspondant au TIMER utilisé du registre ISR ,pour indiquer au MFP que la routine se termine. -------------------------------- Avec BCLR #5,$FFFA07 pour le TIMER A (Sur ISRA) ou BLCR #0,$FFFA11 pour le TIMER B (Sur ISRB) -------------------------------- .Un RTE (Return From Exception) --- De plus, comme votre routine s'exécute à intervals réguliers, je vous déconseille fortement d'utiliser les registre DN ou AN (mème SP) car ceci peut provoquer des changments brusques au niveaux des registres conscernés dans la programme principal.(Le programme sous interruption s'exécutant sans interrompre le programme principal, nous en verrons une très bonne illustration dans un prochain exercice) Le programme sous interruption pourra toutefois faire appel à des adresses du segment DATA ou BSS pour lire ou déposer des valeurs... Voilà pour la théorie, je vous conseille fortement de relire tout le chapitre à fond car maintenant viennent les EXERCICES ... ----------------- PIECHOCKI Laurent 8,Impasse Bellevue Suite dans le fichier:EXOS_4.DOC 57980 TENTELING ----------
Back to ASM_Tutorial