
Сообщение от
ivagor
Спасибо! Интересно, получается запись 65535, 0 или 1 дает примерно одинаковый результат.
Не совсем. Я в своём эмуляторе так рассчитываю реальные периоды для режимов 2 и 3:
Код:
//Нормализация переменной рабочего значения периода ВИ53 после модификации записываемого значения периода.
void VI53::NormPer()
{
uint j = B16, i = perI; //B16 == (1u << 16)
if (cr & 1) { //для BCD режима
uint k = 1;
j = 0;
do {
j += (i & 15) * k;
k *= 10;
} while (i >>= 4);
i = j;
j = 10000;
}
switch (mode & 7) {
case 2: //режим 2
if (i == 1) {
mode |= 1 << MODEF_PER;
return;
}
mode &= ~(1 << MODEF_PER);
case 3: if (i < 2) i += j; //режим 3
default: if (!i) i = j;
}
perW = i;
switch (mode) {
case 0:
case 4: cnt = i;
}
}
где: perI - записанное в регистры значение периода;
perW - рабочее (используемое для генерации) значение периода.
Видно, что при записи в двоичном режиме значения == 1, рабочий период будет ==0x10001.
В BCD (соответственно) ==10001.
Это для mode_3. В mode_2 при ==1 - счётчик не считает.
Вычитал это в одном из даташитов ВИ53.
- - - Добавлено - - -

Сообщение от
SegaBoy
P.S. Похоже что запись 0 равно счёту до 65536, а 1 - до 65537. Ну или что-то в этом роде.
Так и есть. Я в своём эмуляторе так и делаю для режима_3_binary.