Co się stanie, gdy dane zostaną zapisane w LATCH?

9

Oto, co znalazłem w arkuszu danych PIC16F1947:

Odczyt rejestru PORTB odczytuje stan pinów, natomiast zapis do niego spowoduje zapisanie do zatrzasku PORT. Wszystkie operacje zapisu są operacjami odczytu-modyfikacji-zapisu. Dlatego zapis do portu oznacza, że ​​piny portu są odczytywane, wartość ta jest modyfikowana, a następnie zapisywana w zatrzasku danych PORT (LATB).

Jestem programistą oprogramowania układowego, a moje doświadczenie to informatyka. Nadal mam problemy ze zrozumieniem elektroniki i logiki na poziomie sprzętowym. Mam tylko podstawową wiedzę.

Chcę więc zrozumieć, co się dzieje, gdy dane są zapisywane w celu zatrzaśnięcia na poziomie sprzętowym.

Dziękuję Ci.

Donotalo
źródło

Odpowiedzi:

19

Zatrzask jest rodzajem pamięci jednego bitu.

Użyjmy obrazu w instrukcji:

Ogólne działanie portu we / wy

Kiedy piszesz trochę w pinie I / O, zapisujesz ten bit z magistrali danych do rejestru danych ( D-FlipFlop ). Jeśli TRISx tego bitu wynosi 0, dane z Q rejestru danych będą znajdować się w pinie we / wy. Pisz w LATx lub PORTx jest taki sam. Zobacz poniżej na czerwono:

Ogólny zapis operacji portu we / wy

Z drugiej strony odczyt z LATx różni się od odczytu z PORTx.

Kiedy czytasz z LATx, czytasz to, co jest w rejestrze danych ( D-FlipFlop ). Zobacz zdjęcie poniżej w kolorze zielonym:

Ogólna operacja portu I / O Odczyt LATx

A kiedy czytasz z PORTx, czytasz rzeczywistą wartość pinów we / wy. Zobacz poniżej w kolorze niebieskim:

Ogólne działanie portu we / wy Odczyt PORTx

PIC używa operacji odczytu-modyfikacji-zapisu do zapisu i może to stanowić problem , więc używają tego rejestru cienia, aby tego uniknąć.

Daniel Grillo
źródło
1
+1 za linkowanie do miejsca jasno opisuje problem (i rozwiązanie) [czytaj-modyfikuj-pisz] [ techref.massmind.org/techref/readmodwrite.htm] .
davidcary,
1
Wow, świetne wytłumaczenie.
abdullah kahraman
Dwa łącza do problemu odczytu-mod-zapisu są zepsute.
Randomblue,
@ Randomblue, umieściłem inny link. Problem z drugim linkiem to znak „]” na końcu. Po prostu usuń go z adresu przeglądarki.
Daniel Grillo
6

Aby uniknąć problemów z odczytem, ​​modyfikacją i zapisem, należy pisać na porcie jako całości, zamiast ustawiać lub resetować poszczególne bity w porcie. Problem z RMW może spowodować, że trochę nie zostanie ustawiony lub inny poziom wyjściowy będzie wysoki, szczególnie jeśli piny wyjściowe pobierają lub pochłaniają dużo prądu.

Zazwyczaj stosuje się „rejestr cieni”. Ustaw lub zresetuj w tym bity i wyślij je do portu, aby uniknąć problemów z RMW.

Problemu można uniknąć w przypadku PIC 18F dzięki zastosowaniu osobnego zatrzasku, w którym poszczególne bity można bezkarnie ustawiać i resetować.

Leon Heller
źródło
ale myślę, że nie muszę zapisywać do rejestru zatrzasku, ponieważ zapis do oryginalnego rejestru portu spowoduje zapis do zatrzasku, prawda?
Donotalo,
@Donotalo, masz rację. Możesz także pisać w rejestrze portów. Nie ważne.
Daniel Grillo
@Donotalo: Możliwe jest zapisywanie do rejestru portów, ale polecam jako nawyk zapisywanie do rejestrów LATx na tych procesorach, które je mają, i uznanie rejestrów PORTx za tylko do odczytu. „Ślepy” zapis do rejestru PORTx (np. PORTB = 0x42;) nie będzie się zachowywał inaczej niż jeden do LATBx, a odczyt-modyfikacja-zapis do rejestru PORTx (np. PORTB | = 0x02;) spowoduje efekt, który spowoduje albo być taki sam jak LATx, albo różnią się w najbardziej prawdopodobny i niepożądany sposób. BTW, niektóre z późniejszych PIC sprzed Microchip oferowały LATx; Nie wiem, dlaczego Microchip potrzebował lat (dekad?).
supercat
+1 za wzmiankę, że układy PIC18F (inaczej „PIC instrukcji 16-bitowych”) mają rejestr LAT, podczas gdy układy PIC16F (znane również jako „PIC instrukcji 14-bitowych”) wymagają symulacji rejestru LAT w oprogramowaniu („rejestrze cienia”).
Davidcary