реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> pic18f45k22 и TMR1
=L.A.=
сообщение Mar 11 2016, 06:09
Сообщение #1


Знающий
****

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



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


--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
Go to the top of the page
 
+Quote Post
Driver_GV
сообщение Mar 11 2016, 06:22
Сообщение #2


Участник
*

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



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


--------------------
-------------------
picping.lg.ua
Go to the top of the page
 
+Quote Post
volodya
сообщение Mar 11 2016, 06:33
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 189
Регистрация: 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. При чтении записи в обратном порядке можно получить ерунду.

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


--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть"
"Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
Go to the top of the page
 
+Quote Post
=L.A.=
сообщение Mar 11 2016, 12:44
Сообщение #4


Знающий
****

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



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

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


--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
Go to the top of the page
 
+Quote Post
Smen
сообщение Mar 11 2016, 17:03
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 150
Регистрация: 18-03-13
Из: Питер
Пользователь №: 76 081



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


Сообщение отредактировал Smen - Mar 11 2016, 17:05
Go to the top of the page
 
+Quote Post
=L.A.=
сообщение Mar 11 2016, 18:09
Сообщение #6


Знающий
****

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



Цитата(Smen @ Mar 11 2016, 20:03) *
Кстати, всё это в даташите расписано. sm.gif
.

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

Сообщение отредактировал =L.A.= - Mar 11 2016, 18:10


--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
Go to the top of the page
 
+Quote Post
Smen
сообщение Mar 14 2016, 04:23
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 150
Регистрация: 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-битной шине данных? rolleyes.gif
Go to the top of the page
 
+Quote Post
=L.A.=
сообщение Mar 14 2016, 05:41
Сообщение #8


Знающий
****

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



Цитата(Smen @ Mar 14 2016, 07:23) *
А как ещё, интересно, можно записать/прочитать 16 битное слово, при 8-битной шине данных?
.

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


--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
Go to the top of the page
 
+Quote Post
Siargy
сообщение Mar 15 2016, 05:50
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 28-01-10
Из: Минск
Пользователь №: 55 126



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


--------------------
Святло ў цемры заўседы свеціць
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2017 - 02:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01442 секунд с 7
ELECTRONIX ©2004-2016