Перейти к содержанию
    

pic18f45k22 и TMR1

Как написано в доке, можно сделать этот таймер 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 надо производить через буфер.

А вот где этот буфер и как он называется я не обнаружил. Где искать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Он есть.

Для 16 битного режима:

При чтении TMR0L значение TMR0L читается и синхронно TMR0H копируется в буфер, чтение затем TMR0H (можно не сразу) - читаться будет из буфера а не из реального TMR0H. Запись - аналогично. При записи в TMR0L синхронно в TMR0H копируется из буфера, которое туда ранее надо записать записью в TMR0H. Если по простому - то операции с TMR0H - это операции с буфером. А операции с TMR0L это операции с TMR0L и синхронно выполняются операции TMR0H<-> буфер.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Также там написано, что в случае 16-ти битности обращение к TMR1H+TMR1L надо производить через буфер.

А вот где этот буфер и как он называется я не обнаружил. Где искать?

 

Имеется ввиду порядок обращения - в 16-битном режиме чтение производится в порядке TMRxL-TMRxH?

Запись в обратном порядке TMRxH-TMRxL.

TMRxH - буфер, при записи в TMRxL обновляется TMRx 16бит целиком. При чтении - запрос от TMRxL считывает

16бит TMRx целиком старшей частью to TMRxH. При чтении записи в обратном порядке можно получить ерунду.

 

Упс- опоздал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Он есть.

Для 16 битного режима:

При чтении TMR0L значение TMR0L читается и синхронно TMR0H копируется в буфер, чтение затем TMR0H (можно не сразу) - читаться будет из буфера а не из реального TMR0H. Запись - аналогично.

.

Я вообще то спрашивал про Timer1.

То есть, "буфером" в 16 битном режиме является TMR1L. А я пытался использовать TMR1H, видимо поэтому и не получалось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот где этот буфер и как он называется я не обнаружил. Где искать?
Как уже выше сказали, это - не 16-битный режим таймера, а 16-битный режим записи/чтения в/из таймера.

Что бы в/у операции производились в оба регистра одновременно (называется атомарная операция, можно в Гугле просветиться).

Для этого, помимо включения режима, надо соблюдать определённую последовательность действий.

При записи, сперва записать байт в регистр H (насколько помню), при этом, он запишется в специальный буфер, недоступный физически, а затем, второй байт в регистр L, при этом одновременно, в регистр H (реальный регистр таймера) запишется байт из буфера.

При чтении, всё в обратной последовательности.

Кстати, всё это в даташите расписано. :)

 

Изменено пользователем Smen

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, всё это в даташите расписано. :)
.

 

Что буфер физически недоступен там не сказано. Я надеялся, что есть более прямая процедура записи 16 бит, чем указано в доках, но как оказалось, надеялся напрасно. Ошибся.

Изменено пользователем =L.A.=

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

там не сказано
А как же п.12.6 и в нём картинка 12-2?

 

Я надеялся, что есть более прямая процедура записи 16 бит
А как ещё, интересно, можно записать/прочитать 16 битное слово, при 8-битной шине данных? :rolleyes:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как ещё, интересно, можно записать/прочитать 16 битное слово, при 8-битной шине данных?
.

 

Я хотел обнулить/сбросить Timer1 одной командой. А упомянутая кривокостыльная процедура/фича придумана, как я понимаю, для того, чтобы оба байта считывались одномоментно, ну или считанное значение было от определенного момента времени. Чтобы при чтении в момент перехода TMR1L от 0xFF к 0x00 не появилась ошибка в 255 тиков.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно и одной, если ранее был обнулен старший байт

тогда обнуление младшего фактически приводит к обнулению всего регистра

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...