- Работа таймера и прерывание на векторе 100
-
? Валерий@ - 14.02.2012 02:56
Доброго времени суток !
¤
Уважаемые пользователи БК разъясните пожалуйста как работает таймер в подробностях ?
Опорная частота, при каких условиях происходит прерывание, как маскируется, разница в БК-0010 и БК-0011 (в смысле таймера).
¤
В инете нашел две ссылки, но они толком не разъяснили, при попытке высчитать опорную частоту получилась какая то фигня
http://code.google.com/p/bk0010/wiki/Timer -- здесь описание регистров
¤
А вот это было написано во второй:
10 POKE &O177706,32767% 'установка длительности периода S0
20 POKE &O177712,&O160 'запуск таймера
30 ? AT(0,0)PEEK(&O177710) 'смотрим, как он работает
40 GOTO 30
Таймер работает независимо от работы программы. Содержимое счетчика
времени определяется как результат функции PEEK(&O177710) и
периодически уменьшается от S0 до 0 (рис.10).
В приведенном примере при S0=32767 период счетчика Т=89,657 с [6].
¤
Посмотре по портам О160 это 5,6 бит в 1 и 4-тый бит запуск.
5,6 это опорная / 64
берем 32768 * 64 = 2097152 импульсов за 89,657 с.
следовательно 2097152 / 89.657 = 23390,834 это опорная частота, блин но это ерунда какая то.
¤
Пожалуйста помогите разобраться.
-
? Александр Тишин (Sandro)@ - 14.02.2012 04:07
Не путайте встроенный в процессор таймер и таймер с прерыванием по вектору 100. У первого никаких прерываний нет, работает на частоте процессора/(128*делитель). Второй есть только в БК-0011(М), работает с частотой 50 герц.
¤
PS: 3000000/128 = 23437,5, а не 23390,834. У вас или в статье небольшая ошибка с округлением.
-
? Валерий@ - 14.02.2012 14:35
Доброго времени суток !
¤
Александр, огромное Вам Спасибо ! Про делитель частоты на 128 я нигде не нашел. А в 11-той следовательно 4000000/128 ?
И пожалуйста если можно по подробней про прерывание по вектору 100.
-
? anonymous - 14.02.2012 20:30
Тут тема была про исследование времянок БК и некоторых хитростей поведения процессора, если интересно. Там таймер мы тоже разбирали, http://bk0010.org/forum/?id=3799
-
? Валерий@ - 14.02.2012 20:52
Спасибо за ссылочку. Но про 100-ый вектор там не слова. Кто нибудь может прояснить ситуацию ?
-
? anonymous - 14.02.2012 21:31
Что конкретно нужно про 0100й вектор? Он образуется на 11(М) из кадровых импульсов видеоконтроллера, а в БК0010 он используется в качестве прерывания внешнего устройства, что в 11х заменено на вектор 0270. В 10й машине надо подавать частоту на контакты разъемов УП(B1) или МПИ(A5) с внешнего генератора.
-
? Валерий@ - 15.02.2012 03:30
Спасибо. Потихоньку проясняется. А как это прерывание маскируется ? Если можно то опишите 10 и 11.
-
? anonymous - 15.02.2012 18:39
На десятке - никак, только запрещением прерываний, а на 11(М) - через вызов .BTIM или напрямую - записью в 14 бит регистра данных клавиатуры, но т.к. в том же регистре по записи есть биты переключения текущего буфера экрана и биты палитры, считать которые невозможно, надо либо у себя хранить копию, либо использовать системный вызов.
- << Форум