Apa yang terjadi ketika data ditulis ke LATCH?

9

Inilah yang saya temukan di lembar data PIC16F1947:

Membaca register PORTB membaca status pin, sedangkan menulis padanya akan menulis ke kait PORT. Semua operasi tulis adalah operasi baca-modifikasi-tulis. Oleh karena itu, penulisan ke port menyiratkan bahwa pin port dibaca, nilai ini dimodifikasi dan kemudian ditulis ke kait data PORT (LATB).

Saya seorang pengembang firmware dan latar belakang saya adalah Ilmu Komputer. Saya masih berjuang untuk memahami elektronik dan logika di tingkat perangkat keras. Saya hanya memiliki pengetahuan dasar.

Jadi, saya ingin memahami apa yang terjadi ketika data ditulis untuk mengunci tingkat perangkat keras.

Terima kasih.

Donotalo
sumber

Jawaban:

19

Latch adalah semacam memori satu bit.

Mari kita gunakan gambar dalam manual:

Operasi Port I / O Umum

Ketika Anda menulis sedikit dalam pin I / O, Anda menyimpan bit ini dari Data Bus ke Data Register ( D-FlipFlop ). Jika TRISx dari bit ini adalah 0, maka data dari Q dari Daftar Data akan berada di pin I / O. Tulis dalam LATx atau PORTx adalah sama. Lihat di bawah dengan warna merah:

Penulisan Operasi Port I / O Umum

Di sisi lain, membaca dari LATx berbeda dengan membaca dari PORTx.

Saat Anda membaca dari LATx, Anda membaca apa yang ada di Data Register ( D-FlipFlop ). Lihat gambar di bawah ini dalam warna hijau:

Operasi Port I / O Umum Baca LATx

Dan ketika Anda membaca dari PORTx, Anda membaca nilai pin I / O yang sebenarnya. Lihat di bawah dengan warna biru:

Operasi Port I / O Umum Baca PORTx

PIC menggunakan operasi baca-modifikasi-tulis untuk menulis dan ini bisa menjadi masalah , sehingga mereka menggunakan register bayangan ini untuk menghindarinya.

Daniel Grillo
sumber
1
+1 untuk menautkan ke suatu tempat yang dengan jelas menggambarkan masalah (baca-modifikasi-tulis) [ techref.massmind.org/techref/readmodwrite.htm] masalah (dan solusinya).
davidcary
1
Wow, penjelasan yang bagus.
abdullah kahraman
Dua tautan ke masalah baca-mod-tulis terputus.
Randomblue
@ Randomblue, saya sudah menaruh tautan lain. Masalah dengan tautan lain adalah karakter ']' di bagian akhir. Hapus saja di alamat browser Anda.
Daniel Grillo
6

Untuk menghindari masalah baca-modifikasi-tulis, Anda harus menulis ke port secara keseluruhan, daripada mengatur atau mengatur ulang bit individual di port. Masalah RMW mungkin mengakibatkan sedikit tidak diatur, atau output lain menjadi tinggi, terutama jika pin output sumber atau menenggelamkan banyak arus.

"Daftar bayangan" biasanya digunakan. Atur atau setel ulang bit-bit itu, dan outputkan ke port, untuk menghindari masalah RMW.

Masalahnya dihindari dengan PIC 18F dengan menggunakan kait terpisah, bit individual yang dapat diatur dan diatur ulang dengan impunitas.

Leon Heller
sumber
tetapi saya kira saya tidak perlu menulis ke latch register, karena menulis ke register port asli akan menulis ke latch, kan?
Donotalo
@ Donotalo, Anda benar. Anda dapat menulis di register port juga. Tidak masalah.
Daniel Grillo
@ Donotalo: Dimungkinkan untuk menulis ke register port, tetapi saya akan merekomendasikan kebiasaan menulis ke register LATx pada prosesor yang memilikinya, dan menganggap register PORTx sebagai hanya-baca. Toko "blind" ke register PORTx (mis. PORTB = 0x42;) akan berperilaku tidak berbeda dari satu ke LATBx, dan baca-modifikasi-tulis ke register PORTx (mis. PORTB | = 0x02;) akan memiliki efek yang akan bisa sama dengan LATx atau berbeda dengan cara yang kemungkinan besar tidak diinginkan. BTW, beberapa PIC pra-Microchip kemudian menawarkan LATx; Saya tidak tahu mengapa Microchip membutuhkan waktu bertahun-tahun (puluhan tahun?) Untuk melakukannya.
supercat
+1 untuk menyebutkan bahwa chip PIC18F (alias "PIC instruksi 16-bit) memiliki register LAT, sedangkan chip PIC16F (alias" PIC instruksi 14-bit ") memerlukan simulasi register LAT dalam perangkat lunak (" shadow register ")
davidcary