LLLLLLLLLL 11 11 марта, 2016 Опубликовано 11 марта, 2016 · Жалоба Как написано в доке, можно сделать этот таймер 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 1 11 марта, 2016 Опубликовано 11 марта, 2016 · Жалоба Он есть. Для 16 битного режима: При чтении TMR0L значение TMR0L читается и синхронно TMR0H копируется в буфер, чтение затем TMR0H (можно не сразу) - читаться будет из буфера а не из реального TMR0H. Запись - аналогично. При записи в TMR0L синхронно в TMR0H копируется из буфера, которое туда ранее надо записать записью в TMR0H. Если по простому - то операции с TMR0H - это операции с буфером. А операции с TMR0L это операции с TMR0L и синхронно выполняются операции TMR0H<-> буфер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
volodya_t 0 11 марта, 2016 Опубликовано 11 марта, 2016 · Жалоба Также там написано, что в случае 16-ти битности обращение к TMR1H+TMR1L надо производить через буфер. А вот где этот буфер и как он называется я не обнаружил. Где искать? Имеется ввиду порядок обращения - в 16-битном режиме чтение производится в порядке TMRxL-TMRxH? Запись в обратном порядке TMRxH-TMRxL. TMRxH - буфер, при записи в TMRxL обновляется TMRx 16бит целиком. При чтении - запрос от TMRxL считывает 16бит TMRx целиком старшей частью to TMRxH. При чтении записи в обратном порядке можно получить ерунду. Упс- опоздал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LLLLLLLLLL 11 11 марта, 2016 Опубликовано 11 марта, 2016 · Жалоба Он есть. Для 16 битного режима: При чтении TMR0L значение TMR0L читается и синхронно TMR0H копируется в буфер, чтение затем TMR0H (можно не сразу) - читаться будет из буфера а не из реального TMR0H. Запись - аналогично. . Я вообще то спрашивал про Timer1. То есть, "буфером" в 16 битном режиме является TMR1L. А я пытался использовать TMR1H, видимо поэтому и не получалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smen 3 11 марта, 2016 Опубликовано 11 марта, 2016 (изменено) · Жалоба А вот где этот буфер и как он называется я не обнаружил. Где искать?Как уже выше сказали, это - не 16-битный режим таймера, а 16-битный режим записи/чтения в/из таймера. Что бы в/у операции производились в оба регистра одновременно (называется атомарная операция, можно в Гугле просветиться). Для этого, помимо включения режима, надо соблюдать определённую последовательность действий. При записи, сперва записать байт в регистр H (насколько помню), при этом, он запишется в специальный буфер, недоступный физически, а затем, второй байт в регистр L, при этом одновременно, в регистр H (реальный регистр таймера) запишется байт из буфера. При чтении, всё в обратной последовательности. Кстати, всё это в даташите расписано. :) Изменено 11 марта, 2016 пользователем Smen Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LLLLLLLLLL 11 11 марта, 2016 Опубликовано 11 марта, 2016 (изменено) · Жалоба Кстати, всё это в даташите расписано. :). Что буфер физически недоступен там не сказано. Я надеялся, что есть более прямая процедура записи 16 бит, чем указано в доках, но как оказалось, надеялся напрасно. Ошибся. Изменено 11 марта, 2016 пользователем =L.A.= Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smen 3 14 марта, 2016 Опубликовано 14 марта, 2016 · Жалоба там не сказаноА как же п.12.6 и в нём картинка 12-2? Я надеялся, что есть более прямая процедура записи 16 битА как ещё, интересно, можно записать/прочитать 16 битное слово, при 8-битной шине данных? :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LLLLLLLLLL 11 14 марта, 2016 Опубликовано 14 марта, 2016 · Жалоба А как ещё, интересно, можно записать/прочитать 16 битное слово, при 8-битной шине данных?. Я хотел обнулить/сбросить Timer1 одной командой. А упомянутая кривокостыльная процедура/фича придумана, как я понимаю, для того, чтобы оба байта считывались одномоментно, ну или считанное значение было от определенного момента времени. Чтобы при чтении в момент перехода TMR1L от 0xFF к 0x00 не появилась ошибка в 255 тиков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
siargy 6 15 марта, 2016 Опубликовано 15 марта, 2016 · Жалоба можно и одной, если ранее был обнулен старший байт тогда обнуление младшего фактически приводит к обнулению всего регистра Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться