Điều gì xảy ra khi dữ liệu được ghi vào LATCH?


9

Đây là những gì tôi tìm thấy trong bảng dữ liệu PIC16F1947:

Đọc thanh ghi PORTB đọc trạng thái của các chân, trong khi ghi vào nó sẽ ghi vào chốt PORT. Tất cả các hoạt động ghi là các hoạt động đọc-sửa đổi-ghi. Do đó, ghi vào một cổng ngụ ý rằng các chân cổng được đọc, giá trị này được sửa đổi và sau đó được ghi vào chốt dữ liệu PORT (LATB).

Tôi là một nhà phát triển phần sụn và nền tảng của tôi là Khoa học Máy tính. Tôi vẫn đấu tranh để hiểu điện tử và logic ở cấp độ phần cứng. Tôi chỉ có kiến ​​thức cơ bản.

Vì vậy, tôi muốn hiểu điều gì xảy ra khi dữ liệu được ghi để chốt ở mức phần cứng.

Cảm ơn bạn.

Câu trả lời:


19

Latch là một loại bộ nhớ của một bit.

Hãy sử dụng hình ảnh trong hướng dẫn:

Hoạt động cổng I / O chung

Khi bạn viết một bit trong chân I / O, bạn đang lưu trữ bit này từ Data Bus sang Thanh ghi dữ liệu ( D-FlipFlop ). Nếu TRISx của bit này là 0, thì dữ liệu từ Q của Thanh ghi dữ liệu sẽ nằm trong chân I / O. Viết bằng LATx hoặc PORTx là như nhau. Xem bên dưới màu đỏ:

Thao tác cổng I / O chung Viết

Mặt khác, đọc từ LATx khác với đọc từ PORTx.

Khi bạn đọc từ LATx, bạn đang đọc những gì trong Đăng ký dữ liệu ( D-FlipFlop ). Xem hình dưới đây màu xanh lá cây:

Hoạt động cổng I / O chung Đọc LATx

Và khi bạn đọc từ PORTx, bạn đang đọc giá trị chân I / O thực tế. Xem bên dưới màu xanh lam:

Hoạt động cổng I / O chung Đọc PORTx

PIC sử dụng các thao tác đọc-sửa-ghi để ghi và đây có thể là một vấn đề , vì vậy họ sử dụng thanh ghi bóng này để tránh nó.


1
+1 để liên kết đến một địa điểm mô tả rõ ràng vấn đề ( đọc-sửa đổi-ghi) [ techref.massmind.org/techref/readmodwrite.htmlm] (và giải pháp).
davidcary

1
Wow, lời giải thích tuyệt vời.
abdullah kahraman

Hai liên kết đến vấn đề đọc-mod-write bị hỏng.
Randomblue

@ Randomblue, tôi đã đặt một liên kết khác. Vấn đề với liên kết khác là ký tự ']' ở cuối. Chỉ cần xóa nó trong địa chỉ trình duyệt của bạn.
Daniel Grillo

6

Để tránh các vấn đề đọc-sửa-ghi, bạn nên ghi vào toàn bộ cổng, thay vì đặt hoặc đặt lại các bit riêng lẻ trong cổng. Một vấn đề của RMW có thể dẫn đến một chút không được đặt hoặc đầu ra khác tăng cao, đặc biệt là nếu các chân đầu ra đang tìm nguồn cung ứng hoặc chìm rất nhiều dòng điện.

Một "thanh ghi bóng" thường được sử dụng. Đặt hoặc đặt lại các bit trong đó và xuất nó ra cổng để tránh các vấn đề của RMW.

Vấn đề được tránh với PIC 18F bằng cách sử dụng một chốt riêng, các bit riêng lẻ trong đó có thể được đặt và đặt lại mà không bị trừng phạt.


nhưng tôi đoán tôi không cần phải ghi vào thanh ghi chốt, vì viết vào thanh ghi cổng ban đầu sẽ ghi vào chốt, phải không?
Donotalo

@Donotalo, Bạn nói đúng. Bạn có thể viết trong thanh ghi cổng quá. Không quan trọng.
Daniel Grillo

@Donotalo: Có thể ghi vào thanh ghi cổng, nhưng tôi khuyên bạn nên ghi lại thói quen ghi vào thanh ghi LATx trên các bộ xử lý có chúng và liên quan đến các thanh ghi PORTx là chỉ đọc. Lưu trữ "mù" vào một thanh ghi PORTx (ví dụ PORTB = 0x42;) sẽ hoạt động không khác với một LATBx, và đọc-sửa đổi-ghi vào một thanh ghi PORTx (ví dụ PORTB | = 0x02;) sẽ có hiệu lực hoặc giống như LATx hoặc khác đi theo cách rất có thể không mong muốn. BTW, một số PIC tiền Microchip sau này cung cấp LATx; Tôi không biết tại sao Microchip phải mất nhiều năm (nhiều thập kỷ?) Để làm như vậy.
supercat

+1 để đề cập rằng các chip PIC18F (còn gọi là "PIC lệnh 16 bit) có thanh ghi LAT, trong khi chip PIC16F (còn gọi là" PIC lệnh 14 bit ") yêu cầu mô phỏng thanh ghi LAT trong phần mềm (" thanh ghi bóng ")
davidcary
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.