Включил холодную УКНЦ КВАНТ литеры 7 с 1515ХМ1-031, позапускал тест таймера. Вероятность незаписи в буферный регистр на 4 мкс стала скакать, на 8 мкс оставалась постоянной (как и было описано ранее).
Скриншоты прилагаются:
Скрытый текст
[свернуть]
Включил холодную УКНЦ КВАНТ литеры 7 с 1515ХМ1-031, позапускал тест таймера. Вероятность незаписи в буферный регистр на 4 мкс стала скакать, на 8 мкс оставалась постоянной (как и было описано ранее).
Скриншоты прилагаются:
Скрытый текст
[свернуть]
В свете новых тестов несколько изменил теорерическую подоплеку работы регистра текущего значения.
1) Флаг нуля счетчика формируется все же если в регистре счетчика ноль, а не в регистре текущего значения. А вся путаница происходит из-за того, что периодически некорректно выполняется чтение из регистра текущего значения. А именно:
а) Иногда из регистра текущего значения считывается не текущее, а предыдущее значение счетчика, т.к. некоторые значения подолгу задерживаются в регистре текущего значения. Причем, чем больше период таймера, тем этот эффект проявляется сильнее. Кроме того, даже на малых периодах (2мкс) в районе переходного момента 0->BUF, так же иногда идет застревание предыдущего числа в регистре текущего значения.
б) Так же схема разблокировки регистра текущего значения не всегда получает импульс разблокировки (формируемый чтением из регистра), таким образом регистр остается заблокированным, хотя значение из него читается (возможно, так же предыдущее, но т.к. предыдущее тоже ноль, определить сложно).
Эти предположения появились в свете того, что предыдущая теория рассыплась в пух и прах, т.к. запись нуля из остановленного счетчика в регистр текущего значения должна была бы навечно его заблокировать до появления нового числа в буферном регистре, однако такое не происходит.
Тогда как при наличие явной ошибки записи в буферный регистр, логично предположить, что такого же типа ошибка, но уже по чтению, присутствует в регистре текущего значения.
Кажется, я раскрыл загадку таймера) Итак новая теория:
1. Программируемый предделитель находится не после делителя тактовой частоты на 12, а до него. Итого, после предделителя можем получить 4 программируемых частоты с периодами 1, 2, 4 и 8 тактов ПП, соответственно. Назовем этот сигнал PCLK.
2. Делитель на 12 на самом деле не совсем обычный делитель. Длительность его положительного импульса равна одному периоду PCLK. Назовем этот сигнал P12CLK.
![]()
3. Декремент счетчика происходит по фронту P12CLK.
4. Чтение из буферного регистра в счетчик происходит во время положительного импульса P12CLK. При этом невозможно одновременное чтение из буферного регистра счетчиком и запись в него процессором. Если эти циклы наложились друг на друга,
то запись откладывается до окончания цикла чтения, таким образом задерживаясь на 1, 2, 4 или 8 тактов, в зависимости от периода PCLK. Для периодов 2, 4 или 8 тактов, сопоставимых с циклом работы шины ПП (4 такта), возможно защелкивание данных, появившихся на шине спустя 2, 4 или 8 тактов, соответственно.
5. Запись информации из счетчика в регистр текущего значения на 1515ХМ1-031 происходит по положительному импульсу P12CLK. При этом невозможна одновременная запись в регистр текущего значения, и чтение его содержимого процессором. В результате, если цикл чтения процессором регистра текущего значения совпадет с импульсом записи значения таймера в этот регистр, запись значения таймера в регистр не пройдет, и мы прочитаем предыдущее, не изменившееся значение. Кроме того, так же не пройдет разблокировка регистра текущего значения, если он был заблокирован. Таким образом, чем чаще приходит положительный импульс P12CLK, тем выше вероятность прочтения предыдущего значения счетчика, а так же неразблокировки регистра текущего значения.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)