Circuit PCD8584

De MicElectroLinGenMet.

Sommaire

Circuit interface bus 8 bits parallèle/l2C

(Tiré du livre 'Le bus I2C' de Dominique Paret - Dunod)
(Voir aussi Radio-Plan n°536 + photocopies classeur I2C)

Datasheet du remplaçant du PCD8584: Pcf8584.pdf

Voir aussi la note d'application: AN425 Interfacing the PCD8584 controller to 80C51 family.pdf


Le circuit intégré PCD 8584 a pour fonction principale de réaliser la passerelle entre un bus parallèle conventionnel 8 bits provenant des ports de données des microcontrôleurs conventionnels et le bus I2C.


Fonctionnement du PCD 8584

Une fois de plus nous avons décidé de vous présenter ce circuit de manière non conventionnelle.

L'interface I2C du PCD 8584, bien que légèrement moins performant que ceux des 80C552 ou 652 fonctionne tout aussi parfaitement en ce qui concerne les modes maître, esclave, multimaître, etc.

En fait ce circuit a été réalisé à partir de l'interface I2C des microcontrôleurs 84(C) décrit précédemment auquel on a adjoint tout ce qu'il fallait pour l'interfacer aux bus 8 bits de la plupart des microcontrôleurs du commerce (8048, 80(C)51, 6800, 68000, Z80,...) et en laissant toutes les facilités conventionnelles d'usage - fonctionnement par interruption ou par polling - puis d'ajouter quelques particularités telles que des strobe, mode moniteur, mode longue distance...

Ceci permet bien sûr de se raccrocher à des bus internes de systèmes quelconques (bus interne de PC par exemple... )

Les figures #12.27a et #12.27b indiquent le brochage et la configuration interne de ce circuit. Bien qu'il ne soit pas dans nos habitudes de commenter le brochage des circuit, s'il est aujourd'hui important de l'analyser plus finement ce qui va nous permettre d'évacuer certaines des questions qui sont fréquemment posées.


Image:PCD8584_27a.JPG


Image:PCD8584_27b.JPG

Les broches DBO à DB7

Ce sont simplement les broches d'entrées/sorties parallèles des donnees.

CLK

C'est la broche d'entrée du signal d'horloge dont le circuit a besoin pour créer le signal d'horloge SCL de l'I2C (ainsi que les signaux internes d'échantillonnage nécessaire au filtrage numérique des SDA et SCL de l'I2C). Le circuit n'ayant aucun sens divinatoire il lui est impossible de deviner quelle est la valeur de la fréquence du signal d'horloge que vous lui avait appliqué sur sa broche et prend par défaut f(CLK) = 12 MHz. Si, pour des raisons qui vous seraient personnelles, vous désirez utiliser d'autres fréquences vous devez donc le lui faire savoir en chargeant dans l'un des ses registres internes (S2) certaines valeurs à des bits précis (S22, S23, S24) (voir le tableau de la figure #12.28.) de façon qu'il configure ces prédiviseurs internes afin qu'il puisse vous comprendre. Cela étant fait, par la même occasion, on choisit la valeur désirée de l'horloge du SCL du bus I2C et on positionne les bits S20 et S21 en accord avec le tableau de la figure #12.29., enfin on se sent à peu près tranquille avec toutes ces horloges.</font>

Image:PCD8584_28.JPG

Venons-en maintenant aux complications

l'exception du CS, qui sert à mettre en action le circuit, toutes les autres broches semblent pouvoir poser des problèmes ! Pour éviter cela un retour aux sources est nécessaire.

Deux grandes parties sont visibles sur la figure #12.27a., celle du bas qui a pour but d'effectuer l'interface entre les différents types de bus parallèles et le jeu de registres internes S0, S0', ..., S3.

Il est à noter que l'interface du bas a des relations intimes avec le contenu des registres.

Comment tout cela fonctionne-t-il ? Essayons de commencer par le début. Lors de la première mise sous tension (ou bien lors d'un reset externe volontaire par la broche RESET), sans autre forme de procès, le circuit se croit jeter dans un système équipé d'un microcontrôleur de la famille 8051 (option par défaut).

Comme de toute façon il faut bien un début à tout, la toute première chose qu'il est obligatoire d'effectuer est de lui déclarer comment il doit s'appeler du point de vue I2C et donc d'écrire le nom de cette adresse dans le registre S0'.

Or, en désirant faire cela, le microcontrôleur implanté sur le système (dont le type est jusque-là inconnu du PCD 8584) produira des signaux qui lui sont spécifiques afin d'écrire le fameux registre S0' et le PCD 8584 qui doit reconnaître tout ces signaux se mettra à cette occasion automatiquement sur ta bonne configuration du type de microcontrôleur.

Le tableau 12.30. rappelle les différents types de signaux nécessaires et utilisés par le PCD 8584 lors de ces échanges selon les différents types de microcontrôleurs montrant ainsi que leur reconnaissance est facilement réalisable automatiquement.

Image:PCD8584_30.JPG


Les registres internes et comment y accéder

Les registres

Le PCD 8584 comporte cinq registres.
Trois d'entre eux sont utilisés pour l'initialisation du circuit. Normalement, ils sont écrits juste après le RESET du circuit. Ce sont
- S0': propre adresse I2C du PDC 8584 (le premier à écrire !)
- S2 : le registre définissant les horloges (déjà évoqué),
- S3: le vecteur d'interruption (voir plus loin)
Les deux autres ont des fonctions double
- S0 : un registre tampon de données et de décalage,
- S1 un registre de commande et de status.
De plus ces derniers, utilisés pendant les échanges (transmission ou réception), peuvent être séparément écrits ou lus
Reprenons en détail le contenu de ces registres.
  • S0'
    Bien évidemment ce n'est que dans le cas ou le PCD 8584 est esclave que l'adresse I2C servira mais, comme nous l'avons indiqué, quoi qu'il en soit il est nécessaire de commencer par charger une valeur d'adresse (une valeur sur 7 le bit de poids fort étant inutilisé).A noter, au reset la valeur interne de ce registre est 00 en hexadécimal.
     
    Remarque très importante : Si l'on charge la valeur x001-0000 (10 hexadécimal) dans S0' en pensant  10  hexadécimal sera l'adresse esclave I2C du composant c'est faux.
    En effet, lorsqu'un message incident se présente, il entre en S0 et sa valeur (sur huit vrais bits ; exemple : adresse + R/W), afin d'être intelligemment comparée remplie intégralement le registre associé de comparaison entre S0 et S0'. A cet instant, le bit de poids fort est significatif et représente le bit le plus élevé de l'adresse I2C.
    Autrement dit, la valeur inscrite en S0' a été décalée à gauche d'un cran au niveau du registre de comparaison et qu'ayant écrit x001-0000 (10 hexadécimal) en S0' le PCD 8584 se reconnaît sur x0010-0000 soit 20 hexadécimal, sa veritable adresse.
    Lorsque le circuit est appelé et qu'il s'est reconnu le bit AAS (Address As Slave) du registre de Status S1 est positionné à 1 pour des emplois ultérieur:
  • S2
    Précédemment nous vous avons déjà défini les cinq bits de poids faibles. Les autres sont inopérants.
  • S3
    Ce registre est conçu pour contenir la valeur du vecteur d'interruption afin de pouvoir utiliser des interruptions vectorisées. La valeur de ce vecteur est présentée sur le port parallèle quand le signal d'acquittement d'interruption est présent et que le signal ENI (ENable Interrupt) est positionné. Au reset (donc dans le mode 80Cxx) sa valeur est 00 hexadécimal et à l'initialisation du mode 68000 la valeur est de 0F.
  • S0
    S0 est une combinaison d'un registre à décalage et d'un registre tampon. Les données parallèles sont toujours soit écrites vers le registre à décalage soit lues du registre tampon.
    Par contre, les données série sont decalées (ou en entrée ou en sortie) à l'aide du registre à décalage. Une petite remarque complémentaire est à faire concernant le mode de réception, car à cet instant les données contenues dans le registre à décalage sont recopiées dans le tampon pendant la phase d'acquittement.
  • S1
    C'est le plus compliqué et nous vous l'avons réservé pour la fin!
    En fait il est dédoublé en deux registres l'un pour la lecture seule l'autre pour l'écriture seule pour tous les bits de l'un et de l'autre.

  1. En écriture :

le nîbble (quarté) des poids forts a pour fonction de valider les entrées/sorties d'informations, soit sur les broches directement, soit dans les registres internes. Il est composé du bit ESO (= Enable Serial Output) ayant pour but d'autoriser ou non la disponibilité du bus série I2C et des bits ES1 et ES2 dont les fonctions jumelées à la broche A0 permettent ou non l'accès au contenu des registres Sx.
Afin d'abréger votre supplice de la litanie du qui est qui de chacun d'entre eux et qui dépasse le cadre de cet ouvrage, nous renvoyons les plus fanatiques aux caractéristiques du constructeur. Pour les curieux, les tableaux de la figure #12.31 résument leur fonctions.
Le deuxième nibble (les bits de poids faibles) s'occupe de la gestion de l'information de sortie de l'interruption, des conditions de départ, d'arrêt et d'acquittement du bus I2C (voir tableaux de la figure #12.32.).


Image:PCD8584_31.JPG


Image:PCD8584_32.JPG


  1. En lecture :

Le registre S1 en mode de lecture contient bit à bit toutes les information d'état (STATUS) de ce circuit intégré. Ici aussi la spécification du constructeur est très complète et nous nous contenterons de vous donner
quelques exemples:
· STS : ce bit indique la détection d'un condition de STOP lorsque le com posant est en mode d'esclave récepteur,
· BER : ce bit est positionné pour indiquer qu'une erreur de protocole a été détectée sur le bus (STOP ou START pas à leurs places...),
· AAS : quand le composant fonctionne en mode d'esclave récepteur, ce bit indique que le circuit a reconnu son adresse sur le bus I2C,
· LAB : en mode multimaster, ce bit indique que le circuit a perdu l'arbitrage,
· BB : indique que le bus est occupé et donc inaccessible momentanément
· PIN : ce bit est la clef de voûte du fonctionnement de ce circuit. En effet sa gestion régit l'échange I2C / microcontrôleur. Comme son vrai nom I'indique Pending Interrupt Not ce bit a pour mission de signaler s'il est temps ou non de traiter, par interruption du microcontrôleur, le contenu du circuit.

Nous donnerons plus de détails à son sujet sur la façon de le commander Iors de la partie logicielle.


Cemment accéder aux registres?
Tout ce que nous venons de raconter est parfaitement exact, mais l'un des problèmes, que nous avons passé totalement sous silence, réside dans le fait de voir comment aller lire ou écrire tous ces registres.
Nous avons déjà glisser subrepticement quelques mots à ce sujet, mais maintenant entrons dans le détail.
Comme vous venez de le comprendre ce circuit est composé de quelques grands blocs orientés autour du seul élément actif: le registre tampon/décalage S0.
Si vous avez de bons yeux vous verrez sur la figure #12.27a . qu'un bus interne 8 bits parcourt l'intégralité du circuit. Il représente la colonne vertébrale de l'ensemble et c'est par son intermédiaire que tout le monde communique à l'intérie du circuit. Quant aux ordres de commandes (à quel moment ?, comment ?, ou ?) ils sont obtenus par décodage de signaux extemes appliqués à des circuits logiques situés dans le bas de la figure #12.27a. Il faut aussi garder en mémoire que tout est piloté par le microcontrôleur extérieur d'une part, par son bus parallèle (8 bits) qui est appliqué aux entrées DB0 à DB7 et d'autre part, par des signaux (ou bus) de commande ....... et c'est donc à ses ordres que le tout doit et va réagir. Ceci étant, il suffit donc que le microcontrôleur présente 8 bits (en parallèle) sur le port DBx et simultanément (ou parfois légèrement avant) les bons signaux commandes pour que le PCD 8584 comprenne après décodage qu'il doit écrire ou lire tel ou tel registre.
En résumé il se présente comme un peripherique particulier du microcontrôleur. La figure #12.33. résume la façon d'accéder à ces registres.


Image:PCD8584_33.JPG

Un dessin étant souvent beaucoup plus clair qu'un long discours nous donnerons un peu plus loin l'ossature complète d'un exemple de logiciel qu'il est nécessaire d'implanter pour que le circuit soit piloté correctement. Nous demandons un peu de patience aux amateurs de programmation.


De nombreuses applications

Avec la famille 80C51

Nous vous renvoyons à la figure #12.34. dans laquelle un schéma d'application est donné. Pas de commentaires techniques particuliers à ces sujets, mais il faut noter qu'il est souvent préférable pour des raisons économiques d'utiliser les 80C652 ou C654 ... qui comprennent l'interface hard 12C sur le cristal et que ce type de solution ne se justifie uniquement que lors de l'emploi complet (Timer 2 inclus) du 80 C52 ou dans des solutions où des 80C52i sont déjà existants et immuables.



Avec la famille 8088

Restons encore un peu dans l'architecture INTEL, dans ce cas les signaux de service sont sensiblement différents et il est donc nécessaire de modifier les liaisons. Ceci est indiqué sur la figure #12.35.


Image:PCD8584_35.JPG

Avec le Z80

Toujours dans la famille 8 bits et bien que son heure de gloire soit un peu dé passée, bon nombre d'entre vous l'utilise encore et n'ont pas le droit d'être privé d'I2C (voir figure #12.36.)


Des applications hors des sentiers battus

Elles sont nombreuses aussi.
Lors de la conception du PCD 8584 de nouvelles fonctionnalités y ont été introduites dites de Special / Modes:
· un mode moniteur,
· un mode longue distance,
· un générateur de strobe (de fonction sonde).


Le mode moniteur

Quand le registre S0' est chargé avec la valeur 00 (nous avons bien dit chargé - acte volontaire de votre part, car il doit être mené en surimpression de la valeur de reset, elle aussi égale à 00) le PCD 8584 possède alors les particularités suivantes:
- il est toujours sélectionné car se met à l'écoute de tous (pour les spécialistes c est le General Call de l'I2C),
- il passe automatiquement en position d'esclave - récepteur,
- il fait le mort en ne renvoyant aucun acquittement à qui ce soit,
-il fait la grève en ne générant aucune demande d'interruption, les données qu'il reçoit sont directement aptes à être lues.
Résumons simplement : c'est un espion, c'est très laid ..., mais bien pratique surtout pour savoir ce qui se passe parfois sur le bus et développer des outils pour observer tous ses frasques et fantasmes (certains disent en bon français le Monitorer). Notez au passage que depuis longtemps différentes sociétés ont dé veloppé des produits commerciaux (analyseurs et aide au développement du bus I2C sur PC voir chapitre Outils de developpement) selon ces principes.


Le mode Strobe

Et oui le PCD 8584 a éte initié a des séances de spiritisme ! En effet, lorsque le circuit reçoit un message comportant sa propre adresse suivi immédiatement d'une condition de STOP il comprend qu'il doit signaler sa présence en envoyant sine die un signal dit de strobe (sur sa broche de reset/strobe, (actif à l'état bas) durant huit périodes d'horloge CLK. Ça ouvre des horizons ... Un exemple d'architecture d'horizon est donné figure 12.39.

Mise en oeuvre matêrielle et logicielle

Ce sujet étant particulièrement difficile à comprendre il est nécessaire de retourner aux bases du fonctionnement du circuit pour bien en comprendre le mécanisme. Avant de rentrer à nouveau dans le détail de son fonctionnement, rappelons succinctement que ce circuit, qui a pour mission de commander l'échange I2C et de gérer son protocole, les procédures d'arbitrage et les timings fonctionne sur une base de gestion des données orientée byte (octet), utilisant pour converser avec le processeur central (selon les cas) soit un mode d'interruption classique soit un mode de polled handshake (traduction littérale : scrutation par poignée de main!).

Le grand moment est enfin arrivé. Vous venez de finir de cabIer votre circuit. Avant toute chose laissez lui le temps de reprendre ses esprits afin qu'il découvre dans quel guêpier vous l'avez mis. Pour cela il est suffisamment grand pour comprendre automatiquement avec qui il doit et va discuter par la suite.

En complément du tableau 12.30. déjà présenté les figures #12.41. et #12.42. donnent les principes de fonctionnement de cette reconnaissance automatique de type de bus qui a lieu lors de la première séquence de WR-CS.


Image:PCD8584_41.JPG


Image:PCD8584_42.JPG

A ce sujet deux petites remarques qui ont leurs importances s'imposent

1. Après la première mise sous tension du composant, le premier signal WRite a pour mission d'initialiser le PCD 8584 (en mode 808x par défaut).
2. Si l'on utilise un signal WR commun à plus d'un composant il est nécessaire de prendre soin à ce que juste après la mise sous tension le premier WRite soit pour le PCD 8584 et ceci avant d'écrire dans tout autre périphérique partageant la même entrée WR. En effet, Si tel était le cas, pendant que le signal CS appliqué au PCD8584 serait à l'état haut, cela entraînerait une reconnaissance erronée du type de mode d'interface sélectionné ... et donc de ne jamais établir la procédure de communication avec le microcontrôleur restreignant ainsi un peu le champ des applications de ce composant !
Bref, maintenant tout doit bien aller et revenons à nos sages petits moutons soft en vous remémorant rapidement ici aussi quelques vérités premières du PCD8584.

Généralités

Le circuit comprend cinq registres (revoir figure #12.27a):
- les trois premiers:
S0' : registre de propre adresse,
S2 : registre d'horloge,
S3 : registre d'interruption,
qui sont utilisés (principalement) pour l'initialisation et sont normalement écrits une seule fois après la phase de reset du circuit intégré
- les deux autres, qui sont des doubles registres accessibles tant en lecture qu'en écriture
S0 : registre combinant des fonctions de décalage et de tampon de données circulant sur le bus I2C,
S1 : registre de commande et de status nécessaire à l'accès et/ou monitoring du bus
sont utilisés pour les émissions et réceptions des données.

Les logiciels de commande du PCD 8584

Les structures des exemples logiciels que nous allons décrire dans ce paragraphe sont ceux recommandés par le fabricant du composant.
Afin de ne rien altérer, nous avons préférer les laisser en version originale en espérant que les commentaires en anglais ne vous rebuterons pas trop. Par contre, afin de nous convaincre totalement nous avons testé ces flow charts en réalisant des logiciels adéquats

Initialisation

Le flow' chart d'un exemple de séquence d'initialisation est donné figure #12.43. Les valeurs choisies pour imager cet exemple sont les suivantes

            adresse I2C propre au circuit PCD 8584 : AAh (donc valeur à charger : 55h)
            fréquence horloge du système                 : 12 MHz
            débit du bus I2C, d'où SCL                       : 90 kHz

Le flow chart indique précisément les différentes étapes à suivre afin de construire de façon logicielle pour initialiser le circuit intégré.
Il faut remarquer la gymnastique imposée à la broche A0 dont la fonction est d'assurer la sélection des différents registres:
- lorsque A0 est haut le registre S1 devient accessible,
lorsque A0 est bas les autres registres peuvent être accédé selon les valeurs précédemment chargées dans les bits ES0, ES1 et ES2 du registre S1.


Image:PCD8584_43.JPG

Le circuit PCD8584 en mode maitre

    Trois flow charts résument les différentes situations:
    - Maitre émetteur (fig. #12.44)
    - Maitre récepteur (fig. #12.45)
    - Maitre émetteur puis récepteur aprés un restart (fig. #12.46)


Image:PCD8584_44.JPG


Image:PCD8584_45.JPG


Image:PCD8584_46.JPG

Il faut prendre le temps de les lire en détail, car ils sont complets en ce qui concerne le déroulement des opérations et de plus, pour tous les irréductibles du hard auquel nous sommes fiers d'appartenir, nous donnons les chronograrnmes des signaux présents sur les différentes broches concernées (figure #12.47.).
Malgré tout cela il est nécessaire d'ajouter quelques commentaires de plus à propos du très particulier registre S0.


Image:PCD8584_47a.JPG

Registre S0

(voir figure #12.48.)

La partie du bas de S0 fonctionne en registre à décalage pour tous les messages d'écritures et/ou de lectures (sérialisés) en provenance du bus I2C, qui sont effectués par cette zone particulière de S0 et qui ne peut être accédée par le micro-contrôleur extérieur qu'en écriture, la partie du haut de S0 est un registre du plus beau parallèle jamais rencontré qui sert de tampon au message I2C incident et qui ne peut être que lu (en parallèle) par microcontrôleur extérieur.


Image:PCD8584_48.JPG

Les (bonnes) questions à se poser pour concevoir un logiciel sont :

1. A quel moment les données arrivant par le bus I2C dans la partie basse (shfft register) vont-elles être transférées dans la partie du haut (le buffer) afin d'être disponibles pour être lues par le microcontrôleur ?
Réponse : c'est pendant la phase d'acquittement (neuvième coup d'horloge).

2. Si on ne lit pas le contenu du buffer tout de suite, que se passe-t-il ?
Réponse tant que la partie S0 du haut (le buffer) n'a pas été relue par le micro extérieur l'accès à la partie basse (shift register) de réception de données est interdite et la broche PIN vous informe de cet état

Pour conclure ce paragraphe faisons encore deux remarques.

1. En mode émetteur (en fait que le circuit soit maître ou esclave) les données chargées dans le registre à décalage sont aussitôt transmises sur le bus, Si le bit de validation de la communication série ES0 est à l'état haut

2. En supposant (quelqu'en soit la raison) que l'on souhaite lire le contenu du registre S0 (le buffer du haut of course !) immédiatement après avoir écrit des données (à transmettre) dans la partie du bas de S0, il est alors nécessaire d'effectuer une lecture du buffer de S0 un coup pour rien (dummy read) de façon à invoquer la réception d'un premier octet.

En effet, le circuit est totalement incapable de deviner qui a chargé le shift register et donc, afin de transférer le contenu du shift dans le buffer (opération n ayant lieu que lors d'une phase d'acquittement) il est nécessaire, d'une part, de lui faire croire qu'il vient de recevoir un message (donc qu'il pense qu'il était en esclave récepteur) et, d'autre part, de lui faire exécuter gracieusement un auto-acquittement pour que le transfert des données du shift vers le buffer se produise et enfin, on peut lire le contenu de S0 tant désiré.

Pour terminer ajoutons quelques mots au sujet de la figure #12.46, qui présente le flow chart de la procédure à suivre, en mode maître, lors d'émission de données suivies immédiatement de réception d'autres données. Contrairement à ce que de nombreuses personnes croient généralement ce cas se rencontre fréquemment, principalement lors de l'emploi de mémoires RAM, E2PROM, circuits complexes à précharger, ..., car dans ces cas-là on est souvent obligé d'écrire l'adresse du pointeur (ou mot de contrôle) où l'on désire commencer la lecture, puis ensuite lire le contenu des données de celles-ci.

Les procédure du mode esclave

    Les deux aspects, esclave récepteur et esclave émetteur sont donnés sur la seule fig. # 12.49


Image:PCD8584_49.JPG

Après le tronc commun du début de la routine le programme se divise en effet en deux branches dépendant de la valeur du dernier bit R/W contenu dans l'octet d'adresse I2C du composant.

Pas de complication majeure dans cette procédure et, pour en terminer avec le mode esclave et avoir une meilleure compréhension du fonctionnement du circuit, nous donnons ici aussi les chronogrammes des signaux présents sur les broches (figure #12.50.).


Image:PCD8584_50a.JPG

Image:PCD8584_50b.JPG

Normalement voici achevé la présentation du PDC 8584 et des flow charts de ses logiciels associés. Ca ne peut donc que fonctionner... et c'est souvent à cet instant que les soucis arrivent !
En effet, vous avez certainement des PIN par ci, des PIN par là, dans toutes les routines et nous avions indiqué que ce bit particulier du registre de commande et de status S1 avait une très grande place dans le bon fonctionnement de l'en semble. Alors, voici les détails tant désires.

Le bit PIN (Pending Interrupt Not) du registre S1

Sa mission principale et d'informer l'utilisateur (que vous êtes) du status de la transmission I2C et de servir à synchroniser celle-ci avec votre propre système
Première particularité c'est le seul bit de ce registre à pouvoir être lu ou écrit (figure #12.51.)


Image:PCD8584_51.JPG

En écriture


Il y à les écritures volontaires provenant de l'extérieur (en fait de votre bon vouloir) et celles qui seront réalisées automatiquement, en interne, par le circuit sans vous demander votre avis et que vous découvrirez dans le prochain paragraphe. En attendant, lorsque l'on écrit volontairement un 1 dans PIN ceci a pour effet de positionner tous les bits de S1 à 0 sauf le bit BB et de pouvoir ainsi servir de condition de reset à ce registre.

En lecture


Vous allez dire qu'il y aura toujours soit un 1 soit un 0.

- En mode de lecture le contenu de ce bit informera de ce qui a pu arriver. Dans les conditions spécifiques du cas de figure où vous êtes momentanément. A vous donc de savoir où vous en étiez de votre logiciel.
- Le PCD 8584 ne sort pas cycliquement le contenu de ce bit pour vous faire plaisir et ce sera donc à vous, pour en connaître son contenu d'aller le lire cycliquement, à votre rythme (de logiciel) selon le procédé bien connu dit de polled handshake

Ceci étant posé et, sachant qu'au reset le bit PIN était bien sage à 0 il n'attend plus que d'être positionné par quelques actions internes au circuit intégré à 1.

Or, il se trouve que le bit PIN est positionné automatiquement en interne à 1 (sans mettre tout le contenu de S1 à 0 comme au paragraphe précèdent lorsque cet acte était dû à une volonté externe !) selon les conditions suivantes:

- à chaque fois que la transmission I2C est initialisée (par le bit STA (start)mis à 1),
- chaque fois que l'on charge S0 lorsqu'on est en position d'émetteur,
- chaque fois qu'on lit le contenu de S0 lorsque que l'on est en position de récepteur.

Voici donc déjà quelques informations utiles à traiter.
De plus, et de façon à être agréable et un peu plus coopératif au niveau des routines logicielles le PCD 8584 remet automatiquement le bit PIN à 0 lorsqu'une transmission (émission ou réception) est réussie (8 bits + acquittement).

Tout cela est parfait... mais hélas devient très vite lassant de devoir être obliger d'aller très souvent savoir ce qui ce passe à l'intérieur par cette méthode de polling logicielle sur ce fameux bit PIN. Ce qui représente fréquemment du temps perdu (pour la CPU), de la fatigue (Surtout pour les électrons), etc. Bref comment faire mieux?

Du polling à l'interruption


Dans les lignes précédentes, afin de gérer l'échange I2C, nous nous sommes évertués à aller lire par polling le contenu du bit PIN du registre S1.

Il existe une autre méthode souvent plus souple de disposer de ce type d'information. Elle consiste à actionner le bit ENI (Enable Interrupt) de S1, ce qui va avoir pour effet de lier un signal externe INT au contenu du bit PIN.

En effet, le bit PIN déclenchera un signal d'interruption sur la broche de sortie INT (active à l'état bas à chaque fois que le bit PIN sera remis à 0). Comme dans toute interrup tion qui se respecte le microcontrôleur la gérera en se détournant de son proginmme principal pour savoir ce qui vient de se passer; et minimisera ainsi son temps d'occupation CPU et fonctionnera non plus en mode de polling mais en mode d'interruption.

Remarque : Vous avez dêjà observé que la broche 5 (INT) possède une double fonction (SCL out en mode longue distance, ce dernier sélectionné en positionnant les bits ES0 et ES1 à 1)
et vous vous demandez comment on peut alors réaliser une méthode d'interruption en mode longue distance, la réponse est simple : on ne peut pos; mais le polling marche très bien!

Conclusion


Quelques mots qui ne manquerons pas de vous intéresser concernant les systèmes multimaîtres (car tôt ou tard on y arrive, surtout grâce à des PCD 8584!). Toutes les routines présentées permettent de fonctionner de système à système en architecture multimaître sans problème particulier, mais, étant donné que la fonction multimaitre supportée par le PCD 8584 comporte certaines restrictions mineures, de façon à éviter des conflits entre des données, des START, STOP et RESTART lors de la mise sous tension des différents systèmes, il est préférable d'introduire une temporisation dans la séquence d'initialisation de chacun des PCD 8584 au moins égale à la longueur du plus long message I2C à transmettre comme cela est indiqué dans la flow chart d'initialisation.
Voici terminé ce long chapitre concernant les passerelles, qui vous permettrons de communiquer plus facilement avec d'autres systèmes.

Administration wiki