LA PROGRAMMATION DU PIT (8254)

              ***********************************************
              * ecrit par PC-CODER pour PROGRAZINE le 09/97 *
              * E-mail :  pccoder@club-internet.fr          *
              ***********************************************
               Si vous avez des informations suplementaire
               ou si vous constater une erreur ecriver moi 
               ---------------------------------------------

Le PIT (Programmable Interval Timer) permet de generer une
interruption à intervale regulier.
Le PIT possede 3 compteurs (de 16 bit)independant les uns des autres ,
chacun est utilise pour une tache specifique :

Le compteur 0 est utilise pour faire fonctionner le timer systeme

Le compteur 1 est utilise pour envoye un signal periodique au DMA,
pour rafraichir la memoire (pour les vieux PC).

Le compteur 2 est utilise pour creer des sons pour le speaker
du PC (speaker=haut-parleur).

Le principe de fonctionnement est simple :
Chaque compteur est décrémenté de 1 à une frequence 
de 1.193.181 Hz ($1234DD).C'est à dire qu'il est décrémenté
de 1 toute les 838,1 nS (nano second )= 1/1193181 .
(1 ns = 10^-9 seconde)
Et des qu'un compteur arrive à 0 , il genere une interruption.
Le vecteur d'interruption se trouve à l'adresse : 20H
(c'est valable uniquement pour le compteur 0 ,le compteur 2 est 
relié au speaker)

LES PORTS DU PIT :

40H R/W : PIT COMPTEUR 0 (compteur system) ,valeur par defaut =0
41H R/W : PIT COMPTEUR 1 (ram refresh)
42H R/W : PIT COMPTEUR 2 (speaker)

43H R/W : PIT CONTROL REGISTER
Une ecriture dans ce registre doit être suivit d'une ecriture
dans le compteur (selectionner).

Bit 7-6 = Selectionne le compteur
          00 : COMPTEUR 0
          01 : COMPTEUR 1
          10 : COMPTEUR 2
          11 : MODE DE LECTURE INVERSE (READ BACK COMMAND)
               (les autre bit ont alors une autre signification)

Bit 5-4 = 00 : COMPTEUR LATCH (alors bit 3-0 = sans signification)
          01 : LECTURE/ECRITURE DE L'OCTET DE POID FAIBLE
          10 : LECTURE/ECRITURE DE L'OCTET DE POID FORT
          11 : LECTURE/ECRITURE :
               D'ABORD DANS L'OCTET DE POID FAIBLE
               PUIS DANS L'OCTET DE POID FORT
               (du compteur selectionner)

Bit 3-1 = 000 : MODE 0 : Interrupt on terminal count
          001 : MODE 1 : Hardware retriggable one shot
          x10 : MODE 2 : Rate generator
          x11 : MODE 3 : Square wave generator
          100 : MODE 4 : Software triggered strobe
          101 : MODE 5 : Hardware triggered strobe

Bit 0 = 0 : COMPTEUR BINAIRE (16 bit)    (0000 à FFFF)
      = 1 : COMPTEUR BCD (4 chiffre BCD) (0000 à 9999)

MODE 0 : Interrupt on terminal count :

Une fois que le compteur est chargé avec une valeur , Il est
decompter et arriver à 0 ,il genere une unique interruption .
Quand on charge le compteur avec une valeur pendant le decompte
ou apres,le compteur repart avec la nouvelle valeur.

MODE 2 : Rate generator :

C'est presque pareil que le mode 0 ,sauf qu'ici le compteur
quand il a atteint 0 ,il genere une interruption et repart
avec la valeur charger au depart et continue le cycle
indefiniment.

MODE 3 : Square wave generator :

C'est pareil que le mode 2 (en realité ,il y a des petites
différences que je ne saurais expliqué ).
Sachez que c'est ce mode qui est le plus utilisé .

Je pense que les modes 1,4,5 ne servent pas dans la
programmation PC (?)

Pour lire un compteur,il exite 3 façon :

- Soit lire directement le compteur , 
  sur le port correspondant (2 octet ,LO puis HI).
  Il faut obligatoirement stopper l'horloge pendant la lecture
  sinon le compteur risque de continuer avec une fausse valeur.
  (je ne sais pas comment arreter l'horloge ,c'est peut être
   impossible sur PC ??)

- Soit utiliser le compteur latch :
  Apres avoir ecrit la commande latch dans le registre de
  control,la valeur du compteur est maintenu jusqu'a sa
  lecture (2 octet,LO puis HI) au port correspondant au
  compteur selectionner.
  Il n'est pas possible d'envoyer une autre commande latch
  si le compteur n'a pas était lu auparavent .

- Soit utiliser la commande read back :

Bit 7-6 = 11 : Indique que c'est la commande read back

Bit 5 = 0 : lire le compteur selectionner
      = 1 : pas selectionner

Bit 4 = 0 : lire l'octet d'etat du compteur selectioner
      = 1 : pas selectionner

Bit 3 = 1 : Selectionne compteur 2
      = 0 : pas selectionner
Bit 2 = 1 : Selectionne compteur 1
      = 0 : pas selectionner
Bit 1 = 1 : Selectionne compteur 0
      = 0 : pas selectionner

Bit 0 = 0 : Reserve

Il est possible de selectionner plusieurs compteurs en même temps.
(Il faudra lire les compteurs sur chaque port correspondant)
Si la lecture de l'octet d'etat et du compteur (bit 5 et 4) sont
selectionner en même temps ,le premier octet qui sera lu (sur le port)
sera celui de l' octet d'etat suivit des 2 octets du compteur
(LO puis HI).
Il n'est pas possible d'envoyer d'autre command read back ,tant
que l'octet d'etat ou (et) le compteur n'ont pas etait lu.

STRUCTURE DE L'OCTET D'ETAT :

Bit 7 : Etat du signal de sortir 
      = 0 : Etat bas
      = 1 : Etat haut

Bit 6 = 0 : Le compteur peut être lu
        1 : Le compteur ne être lu.

Bit 5-4 = 00 : COMPTEUR LATCH (alors bit 3-0 = sans signification)
          01 : LECTURE/ECRITURE DE L'OCTET DE POID FAIBLE
          10 : LECTURE/ECRITURE DE L'OCTET DE POID FORT
          11 : LECTURE/ECRITURE :
               D'ABORD DANS L'OCTET DE POID FAIBLE
               PUIS DANS L'OCTET DE POID FORT
               (du compteur selectionner)

Bit 3-1 = 000 : MODE 0 : Interrupt on terminal count
          001 : MODE 1 : Hardware retriggable one shot
          x10 : MODE 2 : Rate generator
          x11 : MODE 3 : Square wave generator
          100 : MODE 4 : Software triggered strobe
          101 : MODE 5 : Hardware triggered strobe

Bit 0 = 0 : COMPTEUR BINAIRE (16 bit)    (0000 à FFFF)
      = 1 : COMPTEUR BCD (4 chiffre BCD) (0000 à 9999)

*********************************************************************

LE SPEAKER :

Le speaker ne connait que 2 etats :

1 : la membrane du haut parleur avance
0 : la membrane du haut parleur recule

C'est en faisant vibrer cette membrane qu'on peut créer des son.
L'oreille humaine peut entendre des sons avec frequence situées
entre 20 Hz et 20 KHz ,le Hertz (Hz) etant le nombre de vibration
pas second .

Le speaker est relié au compteur 2 du PIT ,il y a 2 bit qui
permettent de connecter ou deconnecter le speaker .
Ces 2 bits se trouvent au port 61h (bit 0 et 1).
Il faut les mettre à 1 pour connecter le speaker et les mettre
à 0 pour deconecter le speaker .