Часы-календарь CMOS RTC
являются частью комбинированной микросхемы МС146818 с батарейным питанием, используемой в IBM PC/AT для хранения ряда аппаратных настроек. Часы синхронизируются от собственного генератора (32,768 кГц), они содержат:♦ часы-календарь (год, месяц, число, час, минута, секунда);
♦ будильник, подающий сигнал в назначенный час, минуту и секунду;
♦ генератор меандра, позволяющий формировать запросы прерываний с задан ной частотой (как правило, 1024 Гц).
CMOS RTC является источником аппаратных прерываний (IRQ8). Прерывания могут возникать от будильника, генератора меандра и после смены времени в часах. Отдельные источники прерывания идентифицируются чтением ячейки 0Ch и разрешаются записью в ячейку 0Bh.
Доступ к ячейкам CMOS RTC осуществляется через порты ввода-вывода 070h (индекс ячейки) и 071h (данные). Заметим, что бит 7 порта 70h используется и для блокировки NMI (см. п. 12.4), так что диапазон адресов памяти CMOS ограничен пределами 0-7Fh. Поскольку эта память имеет быстродействие порядка единиц микросекунд, между командами записи адреса и чтения-записи данных необходима программная задержка. Во время изменения состояния часов данные, считываемые из ячеек 0–9, могут оказаться некорректными. Признаком этой ситуации является единичное значение бита 7 ячейки 0Ah. Для определения момента окончания смены состояния часов можно пользоваться и разрешением соответствующего источника прерывания. Назначение ячеек CMOS RTC, относящихся к таймерной части, приведено в табл. 12.6 (полное определение ячеек см. в [1]).
Таблица 12.6
. Назначение ячеек таймерной части CMOS RTCИндекс | Назначение |
---|
00h-09h, 32h (37 в PS/2) | Ячейки РТС в BCD-формате: 00 — секунды; 01 — секунды будильника; 02 — минуты; 03 — минуты будильника; 04 — часы; 05 — часы будильника; 06 — день недели; 07 — день месяца; 08 — месяц; 09 — год (2 младшие цифры); 32h — век-1 (2 старшие цифры года); 37h — век-1 (2 старшие цифры года) в PS/2 |
0Ah | RTC Status Register А (регистр статуса А): бит 7 — обновление времени (0 — готов к чтению); биты [6:4] — делитель частоты (для кварца на 32,768 кГц — 010); биты [3:0] — 0110 — выходная частота меандра 1024 Гц |
0Bh | RTC Status Register В (регистр статуса В): бит 7 — остановка часов (0 — нормальный ход); бит 6 — разрешение периодических прерываний (0 — запрещено); бит 5 — разрешение прерывания от будильника (0 — запрещено); бит 4 — разрешение прерывания по окончании смены времени (0 — запрещено); бит 3 (см. также регистр 0Ah) — разрешение выходного меандра (0 — запрещено); бит 2 — формат BCD/BIN (0 — BCD); бит 1 — 12/24-часовой режим (1 — 24-часовой); бит 0 — зимнее/летнее время (0 — переключение запрещено) |
0Ch | RTC Status Register С (регистр статуса С): чтение флагов идентификаторов прерывания: бит 7 — IRQF (общий запрос прерывания); бит 6 — PF (периодические прерывания); бит 5 — AF (прерывание от будильника); бит 4 — UF (прерывание по окончании смены времени); биты [3:0] — зарезервированы |
0Dh | RTC Status Register D (регистр статуса D): бит 7 — питание (1 — норма, 0 — разряд батареи); биты [6:0] — зарезервированы |
Аппаратные таймеры
имеют поддержку функциями BIOS (подробнее см. [1, 8, 9]). Сервисы BIOS Int 1Ah
позволяют считывать и модифицировать значения системного таймера (ячейки 40:006Eh в BIOS Data Area), а также даты, времени и будильника CMOS RTC.