Cuestión : Manera correcta de ejecutar el interfaz de GPIO

Necesitamos tan hacer que dos microprocesadores hablan el uno al otro.  Uno es un amo, y uno es un esclavo, y queremos devolver el estado actual del esclavo al amo (e.g., init, listo, ocupado, error, etc).  Calculamos que la manera más simple de hacer esto está con apenas las líneas llanas de la entrada-salida (GPIO), sistemas del micr3ofono del esclavo uno o más líneas, encuestas micro del amo ellas.  el

So muy, manera muy fácil de hacerla es cada perno indica un active del state

Pin 0: Active de Init
Pin 1: Ready
Pin 2 Busy
Pin 3 Error

However podríamos conservar GPIO haciéndolo con dos el pins

Pin 0 inactivo, Pin 1 inactivo: Init
Pin 0 inactivo, active del Pin 1: Active de Ready
Pin 0, Pin 1 inactivo: Active de Busy
Pin 0, active del Pin 1: Error

Note esto utiliza dos pernos en vez de 4.  Sin embargo, pienso en la segunda técnica que corremos el riesgo de coger una transición.  Por ejemplo, los intentos del esclavo a la transición de INIT a los estados así que a él del ERROR cambian el primer perno a partir de la 0 a 1, después cambian el segundo perno a partir de la 0 a 1.  Sin embargo, si las encuestas principales entre los dos cambios él leerían 01 o 10, que está LISTO u OCUPADO, y él pudo tomar un mán action.

So que la respuesta es probablemente utilizar un tercer perno, que indica la validez de los otros dos.  Los sistemas del esclavo que fijan punto bajo, después realizan los cambios, después los fijan al colmo otra vez, significando que los otros dos pedacitos son válidos. ¿el

So el tomaría tres pernos, que sigue siendo los ahorros sobre los 4 requeridos por el primer approach.

Can que consigo a cheque de la cordura en todo el esto?  ¿El segundo acercamiento es preferible, derecho, con tal que utilicemos la técnica adicional del perno?  ¿Ése correcto necesario?

Thanks para cualquie thoughts.
class= del

Respuesta : Manera correcta de ejecutar el interfaz de GPIO

Le bonito lo consiguen mucho exactamente derecho, pero ponerlo levemente diferentemente para usted:

1) Su primer propuso que el método le deje no perder de vista cuatro “variables discretas”, cada uno capaz de tomar en uno de dos diversos valores (altos o punto bajo). Esto utiliza cuatro pernos, y hay 16 estados posibles de su línea de autobús.

2) Su segundo propuso que el método le deje no perder de vista una sola “variable” que pueda tomar en uno de cuatro diversos valores (00, 01, 10, o 11). Hay 4 estados posibles a su línea de autobús.

Qué usted describió, juegos del método #2 sus propósitos de mejor. Si usted lo hace la manera #1, usted tendrá una línea de autobús que tenga 16 valores posibles, pero solamente 4 de los 16 valores posibles tienen cualquier significado a usted (0001, 0010, 0100 y 1000). Todo es inválido. De modo que sea una pérdida de recursos. Ése es porqué usted ahorra pedacitos de un par haciéndolo la manera del método #2.

Ahora la cosa importante a observar es que ninguna materia que el método usted utilice, #1 O #2, usted tendrá siempre la edición del “estado inestable”. Hay siempre esa cantidad de tiempo infinitesimal en que el amo está cambiando el valor en la línea de autobús, y si el esclavo lee en ese momento exacto conseguirá una lectura incorrecta.

Usted propuso una “sincronización del reloj mordido” que el amo y el esclavo comparten. Usted llamó esto el pedacito de la validez. El pedacito del reloj es fijado por el amo, y leído por el esclavo. El amo se asegura de que sobre el borde de levantamiento del reloj el valor en los bits de datos sea estable. El esclavo sabe para leer los bits de datos solamente cuando pasa a ALTO el reloj. Esto se puede hacer directo en hardware en el nivel de señal (e.g. un verilog o circuito de VHDL programado sobre un FPGA), o usted puede hacerlo en un de alto nivel (e.g. un microprocesador como un tablero de Altera que tiene una interrupción de hardware lanzada cuando pasa a ALTO ese pedacito de la sinc.).

Pienso tan básicamente usted está totalmente correcto, apenas realiza que usted todavía ahorró 2 pernos del gpio, no apenas 1, porque incluso si usted lo hizo la primera manera usted todavía necesitaría el pedacito del reloj de la sincronización.
Otras soluciones  
 
programming4us programming4us