Question : Bonne manière de mettre en application l'interface de GPIO

Ainsi nous devons faire deux microprocesseurs parler entre eux.  On est un maître, et on est un esclave, et nous voulons renvoyer l'état actuel de l'esclave au maître (par exemple, init, prêt, occupé, erreur, etc.).  Nous figurons que la manière la plus simple de faire ceci est avec juste les lignes plates de l'entrée-sortie (GPIO), ensembles de micro d'esclave une ou plusieurs lignes, scrutins micro de maître elles.  le

So très, très manière simple de la faire est chaque goupille indique un active du state

Pin 0 : Active d'Init
Pin 1 : Ready
Pin 2 Busy
Pin 3 Error

However nous pourrions conserver GPIO en le faisant avec deux le pins

Pin 0 inactif, la borne 1 inactive : Init
Pin 0 inactif, active de la borne 1 : Active de Ready
Pin 0, borne 1 inactive : Active de Busy
Pin 0, active de la borne 1 : Error

Note ceci utilise deux bornes au lieu de 4.  Cependant, je pense dans la deuxième technique que nous courons le risque d'attraper une transition.  Par exemple, les essais d'esclave à la transition d'INIT aux états ainsi à lui d'ERREUR change la première goupille de 0 en 1, puis change la deuxième goupille de 0 en 1.  Cependant, si les scrutins principaux entre les deux changements il liraient 01 ou 10, qui est PRÊT ou OCCUPÉ, et lui pourrait prendre un mauvais action.

So que la réponse est probablement d'utiliser une troisième goupille, qui indique la validité des autres deux.  Les ensembles d'esclave qui goupillent le bas, puis apporte les modifications, puis les place à la haute encore, signifiant que les deux autres bits sont valides. le

So ceci prendrait trois bornes, qui est toujours l'épargne au-dessus des 4 exigés par le premier approach.

Can que j'obtiens à un contrôle de santé d'esprit sur le tout ceci ?  La deuxième approche est préférable, droit, si nous employons la technique supplémentaire de goupille ?  C'est juste nécessaire ?

Thanks pour tout thoughts.
class= de

Réponse : Bonne manière de mettre en application l'interface de GPIO

Vous joli l'êtes beaucoup obtenu exactement droit, mais pour le mettre légèrement différemment pour vous :

1) Votre premier a proposé que la méthode vous laisse maintenir quatre « variables » discrètes, chacun capable prendre une de deux valeurs différentes (hautes ou le bas). Ceci utilise quatre bornes, et il y a 16 états possibles de votre ligne d'autobus.

2) Votre deuxième a proposé que la méthode vous laisse maintenir une « variable » simple qui peut prendre une de quatre valeurs différentes (00, 01, 10, ou 11). Il y a 4 états possibles à votre ligne d'autobus.

Ce que vous avez décrit, costumes de la méthode #2 vos buts de mieux. Si vous le faites la manière #1, vous aurez une ligne d'autobus qui a 16 valeurs possibles, mais seulement 4 des 16 valeurs possibles ont n'importe quelle signification à vous (0001, 0010, 0100 et 1000). Tout autrement est inadmissible. De sorte que soit un gaspillage des ressources. C'est pourquoi vous sauvez le peu d'un couple en le faisant la manière de la méthode #2.

Maintenant la chose importante à noter est qu'aucune matière que la méthode vous emploient, #1 OU #2, vous aura toujours l'issue « d'état instable ». Il y a toujours ce nombre de heures infinitésimal quand le maître change la valeur sur la ligne d'autobus, et si l'esclave lit à ce moment exact il obtiendra une lecture incorrecte.

Vous avez proposé une « synchronisation de l'horloge mordue » que le maître et l'esclave partagent. Vous avez appelé ceci le peu de validité. Le peu d'horloge est placé par le maître, et lu par l'esclave. Le maître s'assure que sur le bord de montée de l'horloge la valeur sur les bits d'informations est stable. L'esclave sait pour lire les bits d'informations seulement quand l'horloge passe à 1. Ceci peut être fait directement dans le matériel au niveau de signal (par exemple un verilog ou circuit de VHDL programmé sur un FPGA), ou vous pouvez le faire à un de plus haut niveau (par exemple un microprocesseur comme un panneau d'Altera qui a une interruption de matériel jetée quand ce peu de synchro passe à 1).

Tellement fondamental je pense vous êtes complètement correct, réalisez juste que vous sauviez toujours 2 bornes de gpio, pas simplement 1, parce que même si vous l'avez fait la première manière vous aviez besoin toujours du peu d'horloge de synchronisation.
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us