Pergunta : Maneira direita de executar a relação de GPIO

Assim nós precisamos de fazer dois microprocessadores falar.  Um é um mestre, e um é um escravo, e nós queremos emitir para trás o estado atual do escravo ao mestre (por exemplo, init, pronto, ocupado, erro, etc.).  Nós figuramos que a maneira a mais simples de fazer isto é com apenas linhas lisas do I/O (GPIO), jogos do micro do escravo umas ou várias linhas, micro votações do mestre elas.  o

So muito, muito forma facil fazê-la é cada pino indica um ative do state

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

However nós poderíamos conservar GPIO fazendo o com dois o pins

Pin 0 inativo, Pin 1 inativo: Init
Pin 0 inativo, ative do Pin 1: Ative de Ready
Pin 0, Pin 1 inativo: Ative de Busy
Pin 0, ative do Pin 1: Error

Note isto usa dois pinos em vez de 4.  Entretanto, eu penso na segunda técnica que nós corremos o risco de travar uma transição.  Por exemplo, as tentativas do escravo à transição de INIT aos estados assim que a ele do ERRO mudam o primeiro pino de 0 a 1, a seguir mudam o segundo pino de 0 a 1.  Entretanto, se as votações mestras entre as duas mudanças ele leriam 01 ou 10, que é PRONTO ou OCUPADO, e ele pôde tomar um action.

So que a resposta é provavelmente usar um terceiro pino, que indique a validez dos outros dois.  Os jogos do escravo que fixam o ponto baixo, a seguir fazem as mudanças, a seguir ajustam-nas à elevação outra vez, significando que outros dois bocados são válidos. o

So isto tomaria três pinos, que é ainda economias sobre os 4 exigidos pelo primeiro approach.

Can que eu começ a uma verificação da sanidade no todo o este?  A segunda aproximação é preferível, direito, desde que nós usamos a técnica extra do pino?  Aquela é direita necessária?

Thanks para algum thoughts.
class= do

Resposta : Maneira direita de executar a relação de GPIO

Você bonito é-o começ muito exatamente direito, mas para põr ligeiramente diferentemente o para você:

1) Seu primeiro props que o método o deixasse se manter a par de quatro “variáveis discretas”, cada um capaz de tomar em um de dois valores diferentes (elevados ou ponto baixo). Isto usa quatro pinos, e há 16 estados possíveis de sua linha de barra-ônibus.

2) Seu segundo props que o método o deixasse se manter a par de uma única “variável” que pode tomar em um de quatro valores diferentes (00, 01, 10, ou 11). Há 4 estados possíveis a sua linha de barra-ônibus.

O que você descreveu, ternos do método #2 suas finalidades de melhor. Se você o faz a maneira #1, você terá uma linha de barra-ônibus que tenha 16 valores possíveis, mas somente 4 dos 16 valores possíveis têm-lhe todo o significado (0001, 0010, 0100 e 1000). Tudo mais é inválido. De modo que seja um desperdício de recursos. Isso é porque você conserva bocados de um par fazendo o a maneira do método #2.

Agora a coisa importante a anotar é que nenhuma matéria que o método você usa, #1 OU #2, você terá sempre “a edição do estado instável”. Há sempre essa quantidade de tempo infinitesimal quando o mestre está mudando o valor na linha de barra-ônibus, e se o escravo lê nesse momento exato começ uma leitura incorreta.

Você props uma “sincronização do pulso de disparo mordido” de que o mestre e o escravo compartilham. Você chamou este o bocado da validez. O bocado do pulso de disparo é ajustado pelo mestre, e lido pelo escravo. O mestre assegura-se de que em cima da borda de aumentação do pulso de disparo o valor nos bocados de dados seja estável. O escravo sabe para ler os bocados de dados somente quando o pulso de disparo vai altamente. Isto pode ser feito diretamente na ferragem a nível do sinal (por exemplo um verilog ou circuito de VHDL programado em um FPGA), ou você pode fazê-lo em um de mais alto nível (por exemplo um microprocessador como uma placa de Altera que tenha uma interrupção de ferragem jogada quando esse bocado da sincronização vai altamente).

Tão basicamente eu penso você está completamente correto, apenas realiza que você ainda conservou 2 pinos do gpio, não apenas 1, porque mesmo se você o fêz a primeira maneira você ainda precisaria o bocado do pulso de disparo da sincronização.
Outras soluções  
 
programming4us programming4us