Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: pic18f45k22 и TMR1
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
=L.A.=
Как написано в доке, можно сделать этот таймер 16-ти битным

TxRD16: 16-Bit Read/Write Mode Enable bit
1 = Enables register read/write of Timer1/3/5 in one 16-bit operation
0 = Enables register read/write of Timer1/3/5 in two 8-bit operation

Также там написано, что в случае 16-ти битности обращение к TMR1H+TMR1L надо производить через буфер.
А вот где этот буфер и как он называется я не обнаружил. Где искать?
Driver_GV
Он есть.
Для 16 битного режима:
При чтении TMR0L значение TMR0L читается и синхронно TMR0H копируется в буфер, чтение затем TMR0H (можно не сразу) - читаться будет из буфера а не из реального TMR0H. Запись - аналогично. При записи в TMR0L синхронно в TMR0H копируется из буфера, которое туда ранее надо записать записью в TMR0H. Если по простому - то операции с TMR0H - это операции с буфером. А операции с TMR0L это операции с TMR0L и синхронно выполняются операции TMR0H<-> буфер.
volodya
Цитата(=L.A.= @ Mar 11 2016, 08:09) *
Также там написано, что в случае 16-ти битности обращение к TMR1H+TMR1L надо производить через буфер.
А вот где этот буфер и как он называется я не обнаружил. Где искать?


Имеется ввиду порядок обращения - в 16-битном режиме чтение производится в порядке TMRxL-TMRxH?
Запись в обратном порядке TMRxH-TMRxL.
TMRxH - буфер, при записи в TMRxL обновляется TMRx 16бит целиком. При чтении - запрос от TMRxL считывает
16бит TMRx целиком старшей частью to TMRxH. При чтении записи в обратном порядке можно получить ерунду.

Упс- опоздал.
=L.A.=
Цитата(Driver_GV @ Mar 11 2016, 09:22) *
Он есть.
Для 16 битного режима:
При чтении TMR0L значение TMR0L читается и синхронно TMR0H копируется в буфер, чтение затем TMR0H (можно не сразу) - читаться будет из буфера а не из реального TMR0H. Запись - аналогично.

.
Я вообще то спрашивал про Timer1.
То есть, "буфером" в 16 битном режиме является TMR1L. А я пытался использовать TMR1H, видимо поэтому и не получалось.
Smen
Цитата(=L.A.= @ Mar 11 2016, 10:09) *
А вот где этот буфер и как он называется я не обнаружил. Где искать?
Как уже выше сказали, это - не 16-битный режим таймера, а 16-битный режим записи/чтения в/из таймера.
Что бы в/у операции производились в оба регистра одновременно (называется атомарная операция, можно в Гугле просветиться).
Для этого, помимо включения режима, надо соблюдать определённую последовательность действий.
При записи, сперва записать байт в регистр H (насколько помню), при этом, он запишется в специальный буфер, недоступный физически, а затем, второй байт в регистр L, при этом одновременно, в регистр H (реальный регистр таймера) запишется байт из буфера.
При чтении, всё в обратной последовательности.
Кстати, всё это в даташите расписано. sm.gif
=L.A.=
Цитата(Smen @ Mar 11 2016, 20:03) *
Кстати, всё это в даташите расписано. sm.gif
.

Что буфер физически недоступен там не сказано. Я надеялся, что есть более прямая процедура записи 16 бит, чем указано в доках, но как оказалось, надеялся напрасно. Ошибся.
Smen
Цитата(=L.A.= @ Mar 11 2016, 22:09) *
там не сказано
А как же п.12.6 и в нём картинка 12-2?

Цитата(=L.A.= @ Mar 11 2016, 22:09) *
Я надеялся, что есть более прямая процедура записи 16 бит
А как ещё, интересно, можно записать/прочитать 16 битное слово, при 8-битной шине данных? rolleyes.gif
=L.A.=
Цитата(Smen @ Mar 14 2016, 07:23) *
А как ещё, интересно, можно записать/прочитать 16 битное слово, при 8-битной шине данных?
.

Я хотел обнулить/сбросить Timer1 одной командой. А упомянутая кривокостыльная процедура/фича придумана, как я понимаю, для того, чтобы оба байта считывались одномоментно, ну или считанное значение было от определенного момента времени. Чтобы при чтении в момент перехода TMR1L от 0xFF к 0x00 не появилась ошибка в 255 тиков.
Siargy
можно и одной, если ранее был обнулен старший байт
тогда обнуление младшего фактически приводит к обнулению всего регистра
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.