Попробуйте у себя на разных машинах приложенный тестик.
В общем, таймер - это еще тот ахтнуг. Живет свой жизнью по многим параметрам. Даже в голову не могло прийти, что там столько загадок.
Сделал тест скорости доступа к его регистрам вот почему.
Сперва снял 4 дампа по 128 значений счета таймера при 2, 4, 8 и 16 мкс. Значения снимались командой MOVB (R0),(R1)+, где R0 - регистр текущего значения, а R1 - буфер. Потом уже понял, что снимать надо было словным чтением, т.к. байтовая запись в буфер только кажется быстрее, но из-за того, что цикл RMW, она медленее - 68 тактов против 60 (в случае чтения из регистров ПП). Так вот, вычислил, что команда занимает 68 тактов, и стал вычислять, правильно ли таймер работает согласно рассчетам. При 2мкс дамп показал полную идентичность теоретическим рассчетам, за исключением переходного момента с нуля на значение буферного регистра, где иногда лишний раз задерживалось не то число, что однако не сбивало общую скорость счета. Проверка таблицы на 4мкс тоже совпала с рассчетами. А вот 8мкс стала расходиться. Причем явно какое-то плавание таймингов команды MOVB (R0),(R1)+. В связи с этим написал тест скорости чтения регистров таймера при разных условиях. И догадки подтвердились.
Словом, регистр статуса - совершенно нормальный регистр, такой же, как и остальные в поле ПП. А вот регистр текущего значения имеет какие-то собственные тайминги, связанные так же с периодом счета. Вот такой он загадочный.
p.s.: Пока тестировал чтение регистров командой словного чтения (потом перешел к байтовому), чтение из регистра статуса происходило за 56 тактов, а чтение из регистра текущего значения за 60. Но как только компьютер нагрелся, они сравнялись 60/60.




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