
Сообщение от
Titus
Итак, обновленный тест показал следующие результаты:
Итак, начнем критический анализ:

Сообщение от
Titus
1) Работа таймера в режиме счета/останова отличается лишь тем, что в режиме счета по фронту PCLK декрементируется счетчик таймера, а в режиме останова сохраняет свое значение.
Интересный момент. Насколько я знаю, в режиме останова содержимое буферного регистра переписывается в счетчик. Да, в режиме СТОП счетчик не декрементируется, но и не сохраняет то значение, при котором его остановили. Узнать, что находится в счетчике в данный момент невозможно, он не выводится ни на какие регистры.

Сообщение от
Titus
2) Значение из счетчика в регистр текущего значения переписывается по отрицательному фронту PCLK, таким образом, в режиме счета невозможно получить на выходе число, загруженное в буферный регистр, т.к. по переднему фронту PCLK оно декрементируется, а по заднему уже уменьшенное на единицу запишется в регистр текущего значения.
Такое возможно наверное получить, если в режиме ПУСК динамически менять содержимое буферного регистра, и с довольно большой скорость прочитывать содержимое регистра текущего значения. Но нужны доказательства на экран.

Сообщение от
Titus
3) Флаг нуля счетчика формируется по отрицательному фронту PCLK, если в РЕГИСТРЕ ТЕКУЩЕГО ЗНАЧЕНИЯ, а не в счетчике содержится ноль, не зависимо от режима пуск/стоп. Таким образом можно получить счет от нуля до нуля без переполнения, т.к. пройдя счетчик мы сразу получим значение 0xFFF.
Флаг нуля формируется в режиме СТОП? Интересно, интересно. Да, если остановили таймер, а в регистре текущего значения был ноль до этого, то флаг нуля стоит, но если прочесть регистр текущего значения, то флаг сбросится и уже любое значение, загружаемое в буфер через некоторое время появляется в регистре текущего значения (надо проверить), но флага нуля уже в режиме СТОП установлено не будет. Если в буфер загрузить ноль, то де-факто будет, как-будто это загружено 010000(0x1000), об этом может где-то и писалось.

Сообщение от
Titus
4) Если в регистре текущего значения в режиме останова находится число 0, то он будет блокироваться вновь и вновь по фронту PCLK, независимо от содержимого счетчика. Таким образом, чтение регистра текущего значения совпавшее с очередным фронтом PCLK, мешает разблокировке регистра текущего значения, с вероятностью тем большей, чем меньше период PCLK.
Т.е. остановили таймер, прочитываем регистр текущего значения бесконечное число раз, а регистре управления бит нуля так и будет стоять? Чего-то не верится.

Сообщение от
Titus
5) Содержимое буферного регистра записывается в счетчик по фронту PCLK в следующих случаях:
а) Переход флага нуля 0->1
б) Ноль в 0-м бите регистра состояния
в) Новый фронт по линии внешнего события
Ну вот здесь вроде совпали с документацией.

Сообщение от
Titus
Из-за того, что буферный регистр записывается в счетчик только по фронту PCLK, кратковременная установка нуля в 0-м бите регистра состояния, попавшая между двумя фронтами PCLK (а это до 96 тактов ПП), не окажет воздействия.
Т.е. такой код не окажет воздействия на таймер, особенно чем ближе к 16 мкс?
Код:
MOV #1,R0
MOV #177710,R1
BIC R0,@R1
BIS R0,@R1