А вот из того, что я смотрел...
Вид для печати
А вот из того, что я смотрел...
Я это написал, чтобы было понятно, что в любом случае считывается не само значение счётчика, а его копия.
Я вот тут сейчас подумал, и мне показалось, что счёт всё-таки начинается сразу после загрузки счётчика, просто в регистр для чтения данные попадают на 1 такт позже, т.к. обновление и счётчика, и регистра происходит по одному тактовому импульсу.
- - - Добавлено - - -
Это более правильная картинка.
Должна быть ещё картинка с нечётным делителем, там числа типа такие: 5 4 2 4 2 5 4 2 4 2 ...
- - - Добавлено - - -
Вроде во всех даташитах сказано, что счёт останавливается после загрузки управляющего слова. И это, кстати, достаточно часто используется, чтобы выключить звук в компах, где gate постоянно разрешён, а выход идёт напрямую на динамик.
Попробовал вставить NOPы.
Если вставить между перед OUT, или между OUT и IN разницы в показаниях не будет. Так что значение для чтения фиксируется на OUTе.
Я в английском не силён, может тут есть что полезное.
- - - Добавлено - - -
Чё он их так уменьшает? :(
KTSerg,
Скрин ну очень мелкий чтобы читать. Выложи лучше книжку сюда. Видно очень подобное описание 8253.
- - - Добавлено - - -
нашел этот даташит:
http://pdf.datasheetarchive.com/inde...IH00054971.pdf
- - - Добавлено - - -
еще один нашел:
http://www.sharpmz.org/download/8253.pdf
Ага, первый - это именно тот файл из которого я давал скрины.
мыло, мочало - начинаем всё сначала...
Придется перечитать даташиты что я нашел. Вот уже вычитал важное уточнение: Note that the internal counters are reset to 0000H during control word setting.
- - - Добавлено - - -
я так понял из новых доков, что значение счетчика при чтении всегда на такт раньше чем реальное значение. Видимо, поэтому у меня начинается с 0A вместо 0C.
- - - Добавлено - - -
у меня возник вопрос про это однотактовое отставание.
Не могу найти ответ в доках.
1) Что происходит в тех режимах в конце, когда счетчик дотикивает до 0 и останавливается? Читаемое значение останавливается на 1 или через такт тоже становится 0?
2) При загрузке начального значения, читаемое сразу выставляется и не меняется 2 такта или выставляется через такт?
- - - Добавлено - - -
С tst8253 разобрались. Теперь правильно показывает.
а вот тест I8253 из того же пакета тестов:
Вложение 56184
Отсутствуют значения 01 и 05, при том, что остальные значения правильные.
А должны ли 01 и 05 присутсвовать, если GATE всегда 1? В этих режимах счет запускается фронтом GATE.
Судя по диаграммам:
Новое значение заносится в регистры при следующем спаде тактовой частоты после записи этого значения в счётчик.
Если при очередном спаде такта достигается 0, значение счётчика сразу обновляется.
Если заносится нечётное значение, 0 и 1 на выходе имеют разную длину (на 1 такт).
На диаграммах указаны значения счётчика без младшего бита (стр.724 файла где сканы страниц).
Видимо для определения достигло ли значение счётчика минимального значения младший бит учитывается...
Не могу сообразить...
Получается так, если при очередном вычитании 2 из счётчика результат 0, то в счётчик заносится значение, которое в него записывали (может быть не чётным). А если получилось FFh (перенос - на единицу меньше 0-ля) то в счётчик заносится значение на 1 меньше чем записывали (чётный вариант значения - без младшего бита)...
KTSerg,
я не понял на какой вопрос ты отвечал ;)
Вроде ничего такого я не спрашивал.
По поводу значений я разобрался. В доке от Сименса написано, что читаемое значение всегда на шаг отстает от реального.
И вопрос был про то, что получается в этом отстающем значении при пограничных условиях (начало и конец).
Еще в доках от ОКИ написано, что значение 0 никогда не считывается. Что подразумевает, что счет останавливается на 1, при реальной остановке на 0.
Но у меня нет реального железа чтобы проверить это.
- - - Добавлено - - -
Если про 3 режим: то там оказалось всё проще. Если значение нечетное, то от него отнимается либо 1 (out=1) либо 3 (out=0), а далее по два до нуля.