O que acontece quando os dados são gravados no LATCH?

9

Foi o que encontrei na folha de dados PIC16F1947:

A leitura do registro PORTB lê o status dos pinos, enquanto a gravação nele é gravada na trava PORT. Todas as operações de gravação são operações de leitura, modificação e gravação. Portanto, uma gravação em uma porta implica que os pinos da porta sejam lidos, esse valor seja modificado e gravado na trava de dados PORT (LATB).

Sou desenvolvedor de firmware e tenho experiência em Ciência da Computação. Ainda luto para entender a eletrônica e a lógica no nível do hardware. Eu só tenho o conhecimento básico.

Então, eu quero entender o que acontece quando os dados são gravados para travar no nível do hardware.

Obrigado.

Donotalo
fonte

Respostas:

19

Trava é um tipo de memória de um bit.

Vamos usar a imagem no manual:

Operação de porta de E / S genérica

Quando você escreve um pouco em um pino de E / S, está armazenando esse bit do Data Bus para o Data Register ( D-FlipFlop ). Se o TRISx desse bit for 0, os dados de Q do Data Register estarão no pino de E / S. Escrever em LATx ou PORTx é o mesmo. Veja abaixo em vermelho:

Gravação de operação de porta de E / S genérica

Por outro lado, a leitura do LATx é diferente da leitura do PORTx.

Ao ler a partir do LATx, você está lendo o que está no Data Register ( D-FlipFlop ). Veja a figura abaixo em verde:

Operação de porta de E / S genérica Leia LATx

E quando você lê no PORTx, está lendo o valor real do pino de E / S. Veja abaixo em azul:

Operação de porta de E / S genérica Leia PORTx

O PIC usa operações de leitura, modificação e gravação para gravar e isso pode ser um problema ; portanto, eles usam esse registro de sombra para evitá-lo.

Daniel Grillo
fonte
11
+1 para vincular a um local descreve claramente o problema (e solução -modificação-gravação) [ techref.massmind.org/techref/readmodwrite.htm] (e solução).
Davidcary
11
Uau, ótima explicação.
abdullah kahraman
Os dois links para o problema de leitura-modificação-gravação estão quebrados.
Randomblue
@ Randomblue, eu coloquei outro link. O problema com o outro link é o caractere ']' no final. Basta excluí-lo no endereço do seu navegador.
Daniel Grillo # 2
6

Para evitar problemas de leitura, modificação e gravação, você deve gravar na porta como um todo, em vez de definir ou redefinir bits individuais na porta. Um problema de RMW pode resultar em um pouco de não ser definido ou em outra saída alta, especialmente se os pinos de saída estiverem adquirindo ou afundando muita corrente.

Um "registro de sombra" é normalmente usado. Defina ou redefina os bits e envie-o para a porta, para evitar problemas de RMW.

O problema é evitado com os PICs 18F pelo uso de uma trava separada, com bits individuais que podem ser configurados e redefinidos com impunidade.

Leon Heller
fonte
mas acho que não preciso escrever no registro de trava, pois a gravação no registro de porta original será gravada na trava, certo?
Donotalo
@ Donotalo, você está certo. Você também pode escrever no registro da porta. Isso não importa.
Daniel Grillo
@ Donotalo: É possível escrever no registro da porta, mas eu recomendaria escrever os registros LATx nos processadores que os possuem, e considerar os registros PORTx como somente leitura. Um armazenamento "cego" para um registro PORTx (por exemplo, PORTB = 0x42;) não se comportará de maneira diferente de um para LATBx, e uma leitura-modificação-gravação para um registro PORTx (por exemplo, PORTB | = 0x02;) terá um efeito que seja o mesmo que LATx ou difira da maneira mais provável e indesejável. BTW, alguns dos PICs anteriores ao Microchip ofereceram LATx; Não sei por que o Microchip levou anos (décadas?) Para fazer isso.
supercat
+1 por mencionar que os chips PIC18F (também conhecidos como "PICs de instruções de 16 bits) possuem o registro LAT, enquanto os chips PIC16F (também conhecidos como" PICs de instruções de 14 bits ") requerem a simulação do registro LAT no software (" registrador de sombra ").
davidcary