Итак, обновленный тест показал следующие результаты:
1) Работа таймера в режиме счета/останова отличается лишь тем, что в режиме счета по фронту PCLK декрементируется счетчик таймера, а в режиме останова сохраняет свое значение.
2) Значение из счетчика в регистр текущего значения переписывается по отрицательному фронту PCLK, таким образом, в режиме счета невозможно получить на выходе число, загруженное в буферный регистр, т.к. по переднему фронту PCLK оно декрементируется, а по заднему уже уменьшенное на единицу запишется в регистр текущего значения.
3) Флаг нуля счетчика формируется по отрицательному фронту PCLK, если в РЕГИСТРЕ ТЕКУЩЕГО ЗНАЧЕНИЯ, а не в счетчике содержится ноль, не зависимо от режима пуск/стоп. Таким образом можно получить счет от нуля до нуля без переполнения, т.к. пройдя счетчик мы сразу получим значение 0xFFF.
4) Если в регистре текущего значения в режиме останова находится число 0, то он будет блокироваться вновь и вновь по фронту PCLK, независимо от содержимого счетчика. Таким образом, чтение регистра текущего значения совпавшее с очередным фронтом PCLK, мешает разблокировке регистра текущего значения, с вероятностью тем большей, чем меньше период PCLK.
5) Содержимое буферного регистра записывается в счетчик по фронту PCLK в следующих случаях:
а) Переход флага нуля 0->1
б) Ноль в 0-м бите регистра состояния
в) Новый фронт по линии внешнего события
Из-за того, что буферный регистр записывается в счетчик только по фронту PCLK, кратковременная установка нуля в 0-м бите регистра состояния, попавшая между двумя фронтами PCLK (а это до 96 тактов ПП), не окажет воздействия.
Скрытый текст
[свернуть]





Ответить с цитированием