Информационные технологииStfw.Ru 🔍
🕛

Аппаратные средства измерения времени

В IBM PCAT имеются аппаратные средства для измерения времени. Трехканальный счетчик-таймер, программно совместимый с 18254 (в XT — 8253), выполняет следующие функции:В IBM PCAT имеются аппар
В IBM PC/AT имеются аппаратные средства для измерения времени. Трехканальный счетчик-таймер, программно совместимый с 18254 (в XT - 8253), выполняет следующие функции:
- канал 0: - генерация аппаратных прерываний (IRQO) каждые 54,936 мс (частота 18,206 Гц), вызывающих инкремент системного таймера (счетчика в ячейке 40:006Е BIOS Data Area);
- канал 1 - генерация запросов на регенерацию памяти;
- канал 2 - генерация звуковых сигналов или измерение времени.
Внутренние счетчики микросхемы имеют разрядность 16 бит, но общение с ними возможно только 8-битными операциями. При этом можно задавать значение только младшего байта счетчика (LSB), только старшего (MSB) или обоих (LSB/MSB), причем сначала передается младший, а потом старший байт. Программирование микросхемы осуществляется записью байт в управляющий регистр по отдельности для каждого канала. Назначение регистров счетчиков-таймеров приведено в табл. 12.5. Входная частота для всех каналов 1,19318 МГц. Штатно все каналы работают в режиме генерации импульсов. Счет для каналов 0 и 1 разрешен постоянно. В канале 2 используется управляющий вход GATE, разрешающий счет, который управляется битом О (T2G, R/W) системного порта AT (061h). Выходной сигнал канала 2 может быть программно считан (Т20, бит 5 того же порта). При использовании канала 2 для измерения времени необходимо отключить формирование звука (обнулив бит SPK, R/W, бит 1 порта 061h).
Таблица 12,.5. Регистры счетчиков-таймеров Порт, R/W Назначение
040 RW Счетчик 0 - системные часы. Режим 011, LSB/MSB, Binary, константа счетчика
равна 0 (соответствует коэффициенту деления 65 536)
041 RW Счетчик 1 - регенерация памяти. Режим 010, LSB, Binary, константа счетчика
равна 12h (18)
042 RW Счетчик 2 - генератор звука, измерение времени. Вход GATE от бита 0 порта
В 8255 (061). Режим 011, LSB/MSB, Binary, значение счетчика определяет высоту тона


Порт, R/W Назначение
043 W Управляющий регистр. Биты 7,6 - выбор счетчика 0,1,2. Биты 5,4 - режим
, обращения: 00 - защелка текущего значения; 01 - LSB - только младший байт; 10 - MSB - только старший байт; 11 - LSB/MSB - сначала младший, затем старший байты. Биты 3-1 - режим счетчика: 000 - прерывание по счетчику; 001 - ждущий мультивибратор (одновибратор, у 8254 несколько отличается от 8253); х10 - генератор коротких импульсов заданной частоты; х11 - генератор меандра; 100 - счетчик событий с разрешением; 101 -счетчиксобытий с перезапуском. Бит 0 -0=Bin (двоичный счет), 1 =BCD - (двоично-десятичный счет)
Часы-колендаръ CMOS RTC являются частью комбинированной микросхемы МС146818 с батарейным питанием, используемой в IBM PC/AT для хранения ряда аппаратных настроек. Часы синхронизируются от собственного генератора (32,768 кГц), они содержат:
- часы-календарь (год, месяц, число, час, минута, секунда);
- будильник, подающий сигнал в назначенный час, минуту и секунду;
- генератор меандра, позволяющий формировать запросы прерываний с задан
ной частотой (как правило, 1024 Гц).
CMOS RTC является источником аппаратных прерываний (IRQ8). Прерывания могут возникать от будильника, генератора меандра и после смены времени в часах. Отдельные источники прерывания идентифицируются чтением ячейки ОСЬ и разрешаются записью в ячейку OBh.
Доступ к ячейкам CMOS RTC осуществляется через порты ввода-вывода 070h (индекс ячейки) и 071h (данные). Заметим, что бит 7 порта 70h используется и для блокировки NMI (см. п. 12.4), так что диапазон адресов памяти CMOS ограничен пределами 0-7Fh. Поскольку эта память имеет быстродействие порядка единиц микросекунд, между командами записи адреса и чтения-записи данных необходима программная задержка. Во время изменения состояния часов данные, считываемые из ячеек 0-9, могут оказаться некорректными. Признаком этой ситуации является единичное значение бита 7 ячейки OAh. Для определения момента окончания смены состояния часов можно пользоваться и разрешением соответствующего источника прерывания. Назначение ячеек CMOS RTC, относящихся к таймерной части, приведено в табл. 12.6 (полное определение ячеек см. в [1]).
Таблица 12.6. Назначение ячеек таймерной части CMOS RTC Индекс Назначение
00h-09h, 32h Ячейки РТС в BCD-формате: 00 - секунды; 01 - секунды будильника;
(37 в PS/2) 02 - минуты; 03 - минуты будильника; 04 - часы; 05 - часы будильника; 06 - день недели; 07 - день месяца; 08 - месяц; 09 - год (2 младшие цифры); 32h - век-1 (2 старшие цифры года); 37h - век-1 (2 старшие цифры года) в PS/2
продолжение А


Таблица 12.6 (продолжение) Индекс Назначение
OAh RTC Status Register А (регистр статуса А): бит 7 - обновление времени
(О - готов к чтению); биты [6:4] - делитель частоты (для кварца на 32,768 кГц - 010); биты [3:0] - 0110 - выходная частота меандра 1024 Гц
OBh PTC Status Register В (регистр статуса В): бит 7 - остановка часов
(О - нормальный ход); бит 6 - разрешение периодических прерываний (О - запрещено); бит 5 - разрешение прерывания от будильника (О - запрещено); бит 4 - разрешение прерывания по окончании смены времени (0 - запрещено); бит 3 (см. также регистр OAh) - разрешение выходного меандра (0 - запрещено); бит 2 - формат BCD/BIN (0 - BCD); бит 1 - 12/24-часовой режим (1 - 24-часовой); бит 0 - зимнее/летнее время (О - переключение запрещено)
OCh RTC Status Register С (регистр статуса С): чтение флагов идентификаторов
прерывания: бит 7 - IRQF (общий запрос прерывания); бит 6 - PF (периодические прерывания); бит 5 - AF (прерывание от будильника); бит 4 - UF (прерывание по окончании смены времени); биты [3:0] - зарезервированы
ODh RTC Status Register D (регистр статуса D): бит 7 - питание (1 - норма,
0 - разрядбатареи); биты [6:0] -зарезервированы
Аппаратные таймеры имеют поддержку функциями BIOS (подробнее см. [1,8,9]). Сервисы BIOS Int I Ah позволяют считывать и модифицировать значения системного таймера (ячейки 40:006Eh в BIOS Data Area ), а также даты, времени и будильника CMOS RTC.
Функции BIOS Int 15 h позволяют с помощью CMOS RTC вводить задержку или запускать таймер установки флага (через заданное время установить бит 7 указанной ячейки памяти). Время задается в микросекундах, но минимальная выдержка зависит от производительности ПК (достижимы единицы миллисекунд), максимальная выдержка - около 70 часов.
Начиная с процессоров Pentium, появилась возможность измерения времени с точностью до такта ядра процессора. Для этого процессоры имеют внутренний 64-битный счетчик TSC (Time Stamp Counter), обнуляющийся по аппаратному сбросу (сигналом RESET*). Разрядность позволяет считать без переполнения в течение нескольких столетий. Для доступа к счетчику имеется специальная инструкция RDTSC, правда, установкой флага TSD в управляющем регистре CR4 (процессора) ОС мо-жет сделать ее привилегированной (доступной только на нулевом уровне привилегий). В этом случае приложение, исполняемое на уровне 3, может аварийно завершаться по отказу исполнения инструкции. ОС может и позволить обращение к этому регистру, но «подсовывая» программе угодное ей значение времени. Заметим, что из-за внутреннего умножения частоты в процессоре результат чтения счетчика может отставать от реального времени на число, достигающее коэффициента умножения частоты. Правда, такая точность никому и не нужна (она потеряется в измеряющих программах).

Также по теме:
Новые программы для Windows, Linux и Android.