Ну что же идей-то ни у кого нет)
Вид для печати
Ну что же идей-то ни у кого нет)
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) только после сброса бита готовности.