Що відбувається, коли дані записуються в LATCH?


9

Це те, що я знайшов у листі даних PIC16F1947:

Читаючи регістр PORTB, зчитується стан штифтів, тоді як запис до нього запишеться на засувку PORT. Усі операції запису - це операції читання-зміни-запису. Отже, запис на порт означає, що штирі порту зчитуються, це значення змінюється і потім записується у фіксатор даних PORT (LATB).

Я розробник мікропрограмного забезпечення, і моїм досвідом є Computer Science. Я все ще намагаюся зрозуміти електроніку та логіку на апаратному рівні. У мене є лише основні знання.

Отже, я хочу зрозуміти, що відбувається, коли дані записуються на фіксацію на апаратному рівні.

Дякую.

Відповіді:


19

Засувка - це свого роду пам’ять одного біта.

Давайте використаємо малюнок у посібнику:

Загальна операція порту вводу / виводу

Коли ви записуєте трохи в штифт вводу / виводу, ви зберігаєте цей біт з шини даних до реєстру даних ( D-FlipFlop ). Якщо TRISx цього біта дорівнює 0, то дані з Q реєстру даних будуть знаходитись у штирі вводу / виводу. Пишіть у LATx або PORTx те саме. Дивіться нижче червоного кольору:

Загальна операція запису портів вводу / виводу

З іншого боку, читання з LATx відрізняється від прочитаного від PORTx.

Коли ви читаєте з LATx, ви читаєте, що є в Реєстрі даних ( D-FlipFlop ). Дивіться картинку нижче зеленим кольором:

Загальна операція вводу / виводу порту Зчитування LATx

І коли ви читаєте з PORTx, ви читаєте фактичне значення вводу-виводу. Дивіться нижче синього кольору:

Загальна операція порту вводу / виводу зчитування PORTx

PIC використовує читання-зміна-запис для операцій запису, і це може бути проблемою , тому вони використовують цей тіньовий реєстр, щоб уникнути цього.


1
+1 для посилання на місце чітко описує (read-modify-write) [ techref.massmind.org/techref/readmodwrite.htm] проблему (і рішення).
davidcary

1
Вау, чудове пояснення.
абдулла кахраман

Два посилання на проблему читання-мод-запис порушено.
Randomblue

@ Randomblue, я поставив ще одне посилання. Проблема з іншим посиланням - символ ']' в кінці. Просто видаліть його на адресу свого браузера.
Даніель Грілло

6

Щоб уникнути проблем з читанням-зміною-записом, слід писати на порт у цілому, а не встановлювати або скидати окремі біти в порт. Проблема з RMW може призвести до того, що біт не буде встановлений, або інший вихід буде підвищеним, особливо якщо вихідні штифти джерела або просідають багато струму.

Зазвичай використовується "реєстр тіней". Встановіть або скиньте біти в цьому і виведіть його на порт, щоб уникнути проблем з RMW.

Проблему можна уникнути PIC з 18F шляхом використання окремої засувки, окремі біти якої можна встановити та безкарно скинути.


але я думаю, мені не потрібно писати в регістр засувок, оскільки запис у оригінальний порт порту буде писати в засувку, правда?
Донотало

@Donotalo, ти маєш рацію. Ви також можете записати в реєстр портів. Не важливо.
Даніель Грілло

@Donotalo: Можна записати в регістр портів, але я б рекомендував, як правило, писати до регістрів LATx на тих процесорах, які їх мають, і щодо регістрів PORTx як лише для читання. "Сліпе" сховище до регістра PORTx (наприклад, PORTB = 0x42;) буде поводитися не по-різному від одного до LATBx, а читання-зміна-запис у регістр PORTx (наприклад, PORTB | = 0x02;) матиме ефект, який буде або бути таким самим, як LATx, або відрізнятися найбільш вірогідним-небажаним способом. BTW, деякі з пізніших PIC-мікро-мікросхем пропонували LATx; Я не знаю, чому Microchip потребував років (десятиліть?), Щоб зробити це.
supercat

+1 для згадки про те, що мікросхеми PIC18F (він же "16-бітні інструкції PIC) мають регістр LAT, тоді як мікросхеми PIC16F (він же" 14-бітні інструкції PIC ") вимагають моделювання реєстру LAT у програмному забезпеченні (" тіньовий регістр ").
davidcary
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.