Cosa succede quando i dati vengono scritti su LATCH?


9

Questo è quello che ho trovato nella scheda tecnica PIC16F1947:

La lettura del registro PORTB legge lo stato dei pin, mentre scrivere su di esso scriverà sul latch PORT. Tutte le operazioni di scrittura sono operazioni di lettura-modifica-scrittura. Pertanto, una scrittura su una porta implica che i pin della porta vengono letti, questo valore viene modificato e quindi scritto nel blocco dati PORT (LATB).

Sono uno sviluppatore di firmware e il mio background è Informatica. Faccio ancora fatica a comprendere l'elettronica e la logica a livello hardware. Ho solo le conoscenze di base.

Quindi, voglio capire cosa succede quando i dati vengono scritti per agganciarsi a livello hardware.

Grazie.

Risposte:


19

Latch è una specie di memoria di un bit.

Usiamo l'immagine nel manuale:

Operazione porta I / O generica

Quando si scrive un po 'in un pin I / O, si memorizza questo bit dal bus dati al registro dati ( D-FlipFlop ). Se TRISx di questo bit è 0, i dati provenienti da Q del registro dati saranno nel pin I / O. Scrivere in LATx o PORTx è lo stesso. Vedi sotto in rosso:

Scrittura operazione porta I / O generica

D'altra parte, leggere da LATx è diverso da leggere da PORTx.

Quando stai leggendo da LATx, stai leggendo ciò che è nel registro dei dati ( D-FlipFlop ). Vedi l'immagine sotto in verde:

Operazione porta I / O generica Leggi LATx

E quando leggi da PORTx, stai leggendo il valore effettivo del pin I / O. Vedi sotto in blu:

Operazione porta I / O generica Leggi PORTx

PIC usa read-edit-write per scrivere operazioni e questo può essere un problema , quindi usano questo registro ombra per evitarlo.


1
+1 per il collegamento a un luogo descrive chiaramente il problema ( leggi-modifica-scrivi) [ techref.massmind.org/techref/readmodwrite.htm] (e soluzione).
davidcary,

1
Caspita, ottima spiegazione.
Abdullah Kahraman,

I due collegamenti al problema read-mod-write sono interrotti.
Randomblue,

@ Randomblue, ho inserito un altro link. Il problema con l'altro collegamento è il carattere ']' alla fine. Basta cancellarlo nel tuo indirizzo del browser.
Daniel Grillo,

6

Per evitare problemi di lettura-modifica-scrittura, è necessario scrivere sulla porta nel suo insieme, anziché impostare o ripristinare singoli bit nella porta. Un problema RMW potrebbe comportare l'impossibilità di impostare un bit o un altro output alto, soprattutto se i pin di output provengono o affondano molta corrente.

In genere viene utilizzato un "registro ombra". Impostare o reimpostare i bit in questo e inviarlo alla porta per evitare problemi RMW.

Il problema è evitato con PIC 18F mediante l'uso di un fermo separato, i singoli bit che possono essere impostati e ripristinati impunemente.


ma immagino di non aver bisogno di scrivere nel registro dei latch, dato che scrivere nel registro delle porte originale scriverà nel latch, giusto?
Donotalo,

@Donotalo, hai ragione. Puoi anche scrivere nel registro delle porte. Non importa.
Daniel Grillo,

@Donotalo: è possibile scrivere nel registro delle porte, ma mi raccomando, per abitudine, scrivere nei registri LATx su quei processori che li hanno e considerare i registri PORTx come di sola lettura. Un archivio "cieco" in un registro PORTx (es. PORTB = 0x42;) non si comporterà in modo diverso da uno a LATBx, e una lettura-modifica-scrittura in un registro PORTx (es. PORTB | = 0x02;) avrà un effetto che avrà o essere uguale a LATx oppure differire in un modo molto probabilmente indesiderabile. A proposito, alcuni dei PIC pre-Microchip successivi offrirono LATx; Non so perché Microchip abbia impiegato anni (decenni?) Per farlo.
supercat

+1 per menzionare che i chip PIC18F (noti anche come "PIC di istruzioni a 16 bit) dispongono del registro LAT, mentre i chip PIC16F (noti anche come" PIC di istruzioni a 14 bit ") richiedono la simulazione del registro LAT nel software (" registro ombra ").
davidcary
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.