|
|
  |
pic18f45k22 и TMR1 |
|
|
|
Mar 11 2016, 06:22
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 11-05-06
Из: Lugansk
Пользователь №: 17 011

|
Он есть. Для 16 битного режима: При чтении TMR0L значение TMR0L читается и синхронно TMR0H копируется в буфер, чтение затем TMR0H (можно не сразу) - читаться будет из буфера а не из реального TMR0H. Запись - аналогично. При записи в TMR0L синхронно в TMR0H копируется из буфера, которое туда ранее надо записать записью в TMR0H. Если по простому - то операции с TMR0H - это операции с буфером. А операции с TMR0L это операции с TMR0L и синхронно выполняются операции TMR0H<-> буфер.
--------------------
------------------- picping.lg.ua
|
|
|
|
|
Mar 11 2016, 06:33
|

Частый гость
 
Группа: Свой
Сообщений: 194
Регистрация: 14-02-07
Из: УКРАИНА
Пользователь №: 25 344

|
Цитата(=L.A.= @ Mar 11 2016, 08:09)  Также там написано, что в случае 16-ти битности обращение к TMR1H+TMR1L надо производить через буфер. А вот где этот буфер и как он называется я не обнаружил. Где искать? Имеется ввиду порядок обращения - в 16-битном режиме чтение производится в порядке TMRxL-TMRxH? Запись в обратном порядке TMRxH-TMRxL. TMRxH - буфер, при записи в TMRxL обновляется TMRx 16бит целиком. При чтении - запрос от TMRxL считывает 16бит TMRx целиком старшей частью to TMRxH. При чтении записи в обратном порядке можно получить ерунду. Упс- опоздал.
--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть" "Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
|
|
|
|
|
Mar 11 2016, 12:44
|

Знающий
   
Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055

|
Цитата(Driver_GV @ Mar 11 2016, 09:22)  Он есть. Для 16 битного режима: При чтении TMR0L значение TMR0L читается и синхронно TMR0H копируется в буфер, чтение затем TMR0H (можно не сразу) - читаться будет из буфера а не из реального TMR0H. Запись - аналогично. . Я вообще то спрашивал про Timer1. То есть, "буфером" в 16 битном режиме является TMR1L. А я пытался использовать TMR1H, видимо поэтому и не получалось.
--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
|
|
|
|
|
Mar 11 2016, 17:03
|
Местный
  
Группа: Участник
Сообщений: 211
Регистрация: 18-03-13
Из: Питер
Пользователь №: 76 081

|
Цитата(=L.A.= @ Mar 11 2016, 10:09)  А вот где этот буфер и как он называется я не обнаружил. Где искать? Как уже выше сказали, это - не 16-битный режим таймера, а 16-битный режим записи/чтения в/из таймера. Что бы в/у операции производились в оба регистра одновременно (называется атомарная операция, можно в Гугле просветиться). Для этого, помимо включения режима, надо соблюдать определённую последовательность действий. При записи, сперва записать байт в регистр H (насколько помню), при этом, он запишется в специальный буфер, недоступный физически, а затем, второй байт в регистр L, при этом одновременно, в регистр H (реальный регистр таймера) запишется байт из буфера. При чтении, всё в обратной последовательности. Кстати, всё это в даташите расписано.
Сообщение отредактировал Smen - Mar 11 2016, 17:05
|
|
|
|
|
Mar 11 2016, 18:09
|

Знающий
   
Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055

|
Цитата(Smen @ Mar 11 2016, 20:03)  Кстати, всё это в даташите расписано.  . Что буфер физически недоступен там не сказано. Я надеялся, что есть более прямая процедура записи 16 бит, чем указано в доках, но как оказалось, надеялся напрасно. Ошибся.
Сообщение отредактировал =L.A.= - Mar 11 2016, 18:10
--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
|
|
|
|
|
Mar 14 2016, 04:23
|
Местный
  
Группа: Участник
Сообщений: 211
Регистрация: 18-03-13
Из: Питер
Пользователь №: 76 081

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

Знающий
   
Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055

|
Цитата(Smen @ Mar 14 2016, 07:23)  А как ещё, интересно, можно записать/прочитать 16 битное слово, при 8-битной шине данных? . Я хотел обнулить/сбросить Timer1 одной командой. А упомянутая кривокостыльная процедура/фича придумана, как я понимаю, для того, чтобы оба байта считывались одномоментно, ну или считанное значение было от определенного момента времени. Чтобы при чтении в момент перехода TMR1L от 0xFF к 0x00 не появилась ошибка в 255 тиков.
--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|