Les Secrets du Compteur Sequenceur Programmable 82541. GeneralitesLe fonctionnement est identique avec un 80286 ou 80386, sur un PC/AT, meme si le circuit 8254 n'existe pas, car aujourd'hui, il est souvent noye dans un gros circuit integre qui realise la meme fonction. Plusieurs applications necessitent des comptages ou des temporisations. Afin de liberer le microprocesseur de cette tache subalterne, un circuit specialise, le 8254, assure plusieurs de ces fonctions ; au lieu de construire des boucles de temporisation, l'utilisateur specifie ses desirs en programmant le 8254. Trois fonctions sont realisees : Le champ d'adresses E/S de ce circuit est 0040H a 005FH. 2. Horloge temps reelCette horloge (compteur No 0) genere un signal de demande d'interruption IRQ0 (INT08H) vers le controleur d'interruption 8259. Cette interruption est utilisee pour creer une horloge (heures/minutes/secondes) ou pour generer des temporisations. Pour respecter la compatibilite du standard, cette horloge est programmee a 18,2 Hz (54,9 ms). DONNEES TIMER (zone de donnees du BIOS)
00046CH = Compteur horloge systeme (poids faibles).
00046EH = Compteur horloge systeme (poids forts).
1 seconde = 12H.
1 minute = 444H (1092,39).
1 heure = 10007H (65.543,33).
1 jour = 1800B0H (1.573.040).
Cette horloge est decrementee par INT08H avec une periode de 54,9 ms. 000470H = Drapeau depassement 24 heures (initialise a 0 par le BIOS). 3. Horloge de rafraichissement des memoires dynamiquesLes memoires vives dynamiques necessitent un rafraichissement periodique qui ne peut pas depasser quelques milli-secondes (4 ms). Le rafraichissement doit donc intervenir toutes les 15 micro.s environ.
Le sequencement du rafraichissement est delivre par le compteur No 1 du 8254 : sortie OUT1. Ce signal, provoque une demande d'acces aux bus CPU (HOLDR), comme une procedure d'acces direct memoire classique ; cette demande est filtree pour assurer l'arbitrage entre les demandes de DMA et le rafraichissement ; le rafraichissement est prioritaire sur une procedure DMA. Une fois la demande DMA autorisee par le 80286, un signal CPUHOLDA est genere pour signaler la liberation des bus ; puis les signaux REFRESH* et XMEMRD* sont generes pour le raffraichissement. A chaque periode de l'horloge de rafraichissement (REFRESH), un compteur 8 bits (interne au controleur DMA) est incremente de facon a balayer les 256 adresses colonnes de rafraichissement ; seul les bits A0 a A7 sont generes pour le rafraichissement des memoires dynamiques. Toutefois ce compteur n'est pas utilise par tous les boitiers memoire car certains boitiers disposent de leur propre compteur de rafraichissement.
Le signal REFDET (de periode 30micro.s) sur le port E/S 00061H est utilise par les auto-tests pour verifier le fonctionnement du circuit de rafraichissement, et par les procedures du BIOS pour la generation de temporisation multiples de 15micro.s. La duree d'un cycle de rafraichissement est de 5 periodes de l'horloge systeme (Tc = 83ns a 12MHz) a partir de l'acquittement de la demande du bus, soit un temps d'occupation des bus de : Attention : Une modification de la programmation de ce compteur peut entrainer la perte des informations contenues dans la memoire RAM. 4. Generateur BFCette fonction particuliere permet de generer un signal sonore sur le haut-parleur interne. Elle utilise le compteur No2 du 8254. Il existe deux moyens de controler les sons emis par le haut-parleur : Dans ce cas, il faut bloquer le compteur No2 du 8254 en positionnant a 0 le bit b0 (GATESPK) du port d'entree/sortie 0061H. Le son est alors produit par les variations du signal SPKDATA : b1 du port E/S 0061H (le bit b0 restant toujours a 0). C'est le compteur No2 du 8254 qui produit le son. Il faut programmer le 8254 de la facon suivante :
5. Description du 82545.1. GeneralitesLe 8254 comprend 3 compteurs-sequenceurs 16 bits independants. Six registres internes assurent le controle du fonctionnement de ces 3 compteurs : |-------|-------------------------|---------| |Adresse| Registre | Mode | | E/S | | d'acces | |-------|-------------------------|---------| | 0040H |Registre compteur No0 | | |-------|-------------------------|Ecriture | | 0041H |Registre compteur No1 | (ou | |-------|-------------------------|Lecture) | | 0042H |Registre compteur No2 | | |-------|-------------------------|---------| | | |Ecriture | | 0043H |Registre commande No0,1,2| (ou | | | | lecture)| |-------|-------------------------|---------| Pour chaque compteur, le registre de commande doit etre ecrit avant le chargement du registre compteur. 5.2. Registres internesRegistre compteurChaque compteur est en realite un decompteur. En fonctionnement, il est decremente a chaque periode de l'horloge specifique au compteur. Dans cette application, les 3 entrees d'horloge CLK0, 1, 2 sont communes : la frequence de l'horloge de reference est de 1,193 MHz (14,318 MHz/12). Chaque registre compteur est charge sur 16 bits par la valeur de la division de l'horloge de reference ; ce registre est lu ou ecrit en une ou deux operations : le mode d'acces est donne par les bits RW1 et RW0 du registre de commande.
|------------------------------------------------|
| REGISTRE COMPTEUR DU 8254 |
|--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--|
|b7|b6|b5|b4|b3|b2|b1|b0||b7|b6|b5|b4|b3|b2|b1|b0|
|--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--|
| | | | | | | | || | | | | | | | |
|--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--|
|-----------|-----------||----------|-----------|
Poids forts Poids faibles
Lecture d'un compteurTrois methodes de lecture sont possibles : |-------------------------------------------------------| |REGISTRE DE COMMANDE memorisation pour lecture compteur| |------|------|------|------|------|------|------|------| | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | |------|------|------|------|------|------|------|------| | SC1 | SC0 | 0 | 0 | x | x | x | x | |------|------|------|------|------|------|------|------| |------|------| No du compteur
|-------------------------------------------------------|
| REGISTRE DE COMMANDE pour lecture compteur et etat |
|------|------|------|------|------|------|------|------|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|------|------|------|------|------|------|------|------|
| 1 | 1 |COUNT |STATUS| CTN2 | CTN1 | CTN0 | 0 |
|------|------|------|------|------|------|------|------|
|----------|---------|
bits actifs a 1 pour
les compteurs No2, 1, 0
respectivement
L'octet d'etat a le format suivant : |-------------------------------------------------------| | REGISTRE D'ETAT DU COMPTEUR | |------|------|------|------|------|------|------|------| | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | |------|------|------|------|------|------|------|------| |OUTPUT| NULL | RW1 | RW0 | M2 | M1 | M0 | BCD | | |COUNT | | | | | | | |------|------|------|------|------|------|------|------| Registre de commandeLe registre de commande specifie le mode de fonctionnement et le mode d'acces du compteur : il doit etre programme pour initialiser chaque compteur.
|-------------------------------|
| REGISTRE DE COMMANDE |
|---|---|---|---|---|---|---|---|
|b7 |b6 |b5 |b4 |b3 |b2 |b1 |b0 |
|---|---|---|---|---|---|---|---|
|SC1|SC0|RW1|RW0|M2 |M1 |M0 |BCD|
|---|---|---|---|---|---|---|---|
|---|--||---|---||----|----||-|-| | Mode de decomptage
| | | |----------------| -0 = binaire 16 bits
| | | | -1 = BCD 4 decades
| | |-----------------------|--------------|
| | |---------------------------|| Mode de |
||-----||----| Mode d'acces ||fonctionnement|
|| RW0 | RW1 | au registre compteur || du compteur |
||-----|-----|---------------------------||----|----|----|
|| 0 | 0 |Memorisation pour lecture || M2 | M1 | M0 |
||-----|-----|---------------------------||----|----|----|------|
|| 1 | 0 |Poids forts || 0 | 0 | 0 |Mode 0|
||-----|-----|---------------------------||----|----|----|------|
|| 0 | 1 |Poids faibles || 0 | 0 | 1 |Mode 1|
||-----|-----|---------------------------||----|----|----|------|
|| 1 | 1 |Poids faibles puis forts || x | 1 | 0 |Mode 2|
||-----|-----|---------------------------||----|----|----|------|
|---|----------------------------------------|| x | 1 | 1 |Mode 3|
| Selection numero du compteur ||----|----|----|------|
|-------|-------|----------------------------|| 1 | 0 | 0 |Mode 4|
| SC0 | SC1 | Compteur No ||----|----|----|------|
|-------|-------|----------------------------|| 1 | 0 | 1 |Mode 5|
| 0 | 0 | 0 ||----|----|----|------|
|-------|-------|----------------------------|
| 1 | 0 | 1 |
|-------|-------|----------------------------|
| 0 | 1 | 2 |
|-------|-------|----------------------------|
| 1 | 1 | Lecture compteur et etat |
|-------|-------|----------------------------|
Mode 0 :Monostable un coup declenche par le chargement du registre compteur. La sortie est a l'etat bas des que le registre de commande est charge et jusqu'a la fin du decomptage ou elle passe a l'etat haut. Elle reste a l'etat haut tant que le registre compteur n'est pas charge. L'entree GATE a l'etat 0 invalide le decomptage. Recharger le registre compteur pendant le decomptage provoque : Mode 1 :Monostable un coup, declenche par un front montant sur l'entree GATE. Il est redeclenchable pendant le decomptage. La sortie a l'etat bas pendant le decomptage passe a l'etat haut a la fin. Si le registre compteur est recharge pendant le decomptage, le fonctionnement n'est pas modifie, sauf si une impulsion est appliquee sur l'entree GATE : dans ce cas le compteur redemarre avec la nouvelle valeur. Mode 2 :Generateur d'impulsion. La sortie est a l'etat haut des le chargement du registre compteur, elle reste a l'etat haut tant que l'entree GATE est mise a zero. Le generateur demarre ou redemarre sur un front montant de l'entree GATE. Si le registre compteur est recharge pendant une periode, celle-ci n'est pas affectee : seules les periodes suivantes seront modifiees. -|--------------------------| |----------------------| |-- | | | | | -| |--| |--| <--N periodes d'horloge -->1xT<------- NxT ------->1xT<- ^ Depart Mode 3 :Generateur de signaux rectangulaire : similaire au mode 2 sauf que la sortie reste a l'etat haut tant que la moitie du comptage n'a pas ete depassee, elle revient a l'etat bas ensuite jusqu'a la periode de comptage suivante. Mode 4 :Monostable retriggerable declenche par le chargement du registre compteur. Des que ce mode est selectionne, la sortie passe a l'etat 1. Le decomptage s'arrete pendant un etat bas sur l'entree GATE. La sortie passe a l'etat bas pendant une periode d'horloge a la fin du decomptage. Mode 5 :Declenchement par front : identique au mode 4 mais le demarrage du compteur est realise a chaque front montant sur l'entree GATE. 5.3. Signaux d'entrees-sorties du 8254
|------| |------|
D7|1 |-| 24|VCC
D6|2 23|WR*
D5|3 8254 22|RD*
D4|4 21|CS*
D3|5 20|A1
D2|6 19|A0
D1|7 18|CLK2
D0|8 17|OUT2
CLK0|9 16|GATE2
OUT0|10 15|CLK1
GATE0|11 14|GATE1
GND|12 13|OUT1
|---------------|
Fig.6. - Brochage du 8254
Description de ports d'Entrees/Sorties divers (rappel)Port E/S 0061H
|---------------------------------------------------------------| | Port E/S 0061H en lecture | |-------|-------|-------|-------|-------|-------|-------|-------| | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | |-------|-------|-------|-------|-------|-------|-------|-------| | PCHK | BQ1 | OUT2 | REFDET| Q3 | Q2 |SPKDATA|GATESPK| |-------|-------|-------|-------|-------|-------|-------|-------| |---------------------------------------------------------------| | Port E/S 0061H en ecriture | |-------|-------|-------|-------|-------|-------|-------|-------| | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | |-------|-------|-------|-------|-------|-------|-------|-------| | x | x | x | x |ENIOCH*|ENPCHK*|SPKDATA|GATESPK| |-------|-------|-------|-------|-------|-------|-------|-------| Port E/S (ecriture en 0070H)
|---------------------------------------------------------------| | Port E/S 0070H en ecriture | |-------|-------|-------|-------|-------|-------|-------|-------| | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | |-------|-------|-------|-------|-------|-------|-------|-------| | ENMI* | X | Numero du registre interne memoire CMOS 146818| |-------|-------|-----------------------------------------------|
|----------|
| bit de |
PCHK >------|validation|---|
| ENPCHK* | | |----------|
|----------| |- | bit de |
OU >---->|validation|--> NMI
|----------| |- | ENMI* |
| bit de | | |----------|
IOPCHK >----|validation|---|
| ENIOCH* |
|----------|
|