Ну что же идей-то ни у кого нет)
Ну что же идей-то ни у кого нет)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Titus, все же хотелось бы уточнить, что же это за Prescalar Clock. Объясните пожалуйста поподробнее, что Вы под этим подразумеваете.
Теперь по поводу загрузки счетчика: собственно в документации эти моменты прописаны, что счетчик (который не выводится ни на какие регистры) загружается из буферного регистра (177712) в следующих случаях:
- в режиме останова таймера;
- при обнулении (после формирования требования прерывания);
- при фиксации внешнего события (после формирования требования прерывания).
Кстати, а при чем тут буферный регистр (177712) и PCLK? Запись в буферный регистр (177712) происходит во время адресного обмена по шине МПИ, соответственно запись происходит по сигналу DOUT.
Вот уже запись в счетчик из буферного регистра (177712) вполне может быть привязана к импульсам с делителя. Поэтому, скажем так, что таймер в режиме СТОП, стоит 16 мкс. Проскочил импульс, прошла 1 мкс, записали в буфер (177712) новое значение, на запись ушло 4 мкс, соответственно через 11 мкс новое значение появится в счетчике.
А узнать, прописалось ли новое значение в буфер, можно только через регистр текущего значения (177714).
А вот у меня получалось.
Правда, эта ситуация выскакивала крайне редко.
Гораздо легче получить неразблокировку регистра текущего значения при его чтении.
---------- Post added at 16:27 ---------- Previous post was at 16:19 ----------
На счет регистра текущего значение есть такое предположение:
В режиме останова, он все равно блокируется в цикле по каждому фронту предделителя. И если счиать его в тот момент, когда пришел новый фронт, то он разблокируется, и заблокируется заново.
Да, в режиме останова.
---------- Post added at 16:41 ---------- Previous post was at 16:36 ----------
Последовательность такая:
1) 4 -> регистр состояния (останов, цикл 8мкс)
2) 4095 -> буферный регистр (0xFFF в шестнацатиричном)
(очень редко запись может не пройти, и в регистре останется старое значение)
3) читаем регистр текущего значения
4) читаем много раз регистр состояния
(в регистре состояния в одном и 10 случаев, а то и чаще, так и остается значение 132 (0x84 в шестнацатиричном), что говорит о заблокированном регистре текущего значения. В большинсве же случаев читается 0x04)
---------- Post added at 16:45 ---------- Previous post was at 16:41 ----------
Кстати, о том, что запись в регистры может не пройти, говорит и кусок кода из драйвера дисковода, где:
Loop:
0 -> регистр состояния
число -> буферный регистр
читаем регистр текущего значения, и если <> числу, то цикл на Loop
Что говорит нам о том, что:
1) запись нуля в регистр состояния может не пройти?
2) запись в буферный регистр может не пройти
После останова таймера надо обязательно прочесть регистр текущего значения (177714), т.к. если в регистре состояния (177710) стоит бит готовности, то естественно после записи в буфер (177712) новое значение и не перепишется в регистр текущего значения (177714), если стоит бит готовности, несмотря на то, что таймер в режиме СТОП. А вот после установки режима СТОП и чтения регистра текущего значения (177714) должны сбросится биты готовности, переполнения, фиксации внешнего события и буфер (177712) должен переписаться в регистр текущего значения (177714) (через счетчик естественно).
Если выразится точнее, то в режиме СТОП и установленном бите готовности буфер (177712) переписывается в счетчик, а вот счетчик перепишется в регистр текущего значения (177714) только после сброса бита готовности.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)