Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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

Поиск

 

В IBM PC/AT имеются аппаратные средства для измерения времени. Трехканальный счетчик-таймер, программно совместимый с i8254 (в XT — 8253), выполняет следующие функции:

♦ канал 0: — генерация аппаратных прерываний (IRQ0) каждые 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, разрешающий счет, который управляется битом 0 (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, значение счетчика определяет высоту тона
043 W Управляющий регистр. Биты 7, 6 — выбор счетчика 0, 1, 2. Биты 5, 4 — режим обращения: 00 — защелка текущего значения; 01 — LSB — только младший байт; 10 — MSB — только старший байт; 11 — LSB/MSB — сначала младший, затем старший байты. Биты 3–1 — режим счетчика: 000 — прерывание по счетчику; 001 — ждущий мультивибратор (одновибратор, у 8254 несколько отличается от 8253); x10 — генератор коротких импульсов заданной частоты; x11 — генератор меандра; 100 — счетчик событий с разрешением; 101 — счетчик событий с перезапуском. Бит 0 — 0=Bin (двоичный счет), 1=BCD — (двоично-десятичный счет)

Часы-календарь 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.

Функции BIOS Int 15h позволяют с помощью CMOS RTC вводить задержку или запускать таймер установки флага (через заданное время установить бит 7 указанной ячейки памяти). Время задается в микросекундах, но минимальная выдержка зависит от производительности ПК (достижимы единицы миллисекунд), максимальная выдержка — около 70 часов.

Начиная с процессоров Pentium, появилась возможность измерения времени с точностью до такта ядра процессора. Для этого процессоры имеют внутренний 64-битный счетчик TSC (Time Stamp Counter), обнуляющийся по аппаратному сбросу (сигналом RESET#). Разрядность позволяет считать без переполнения в течение нескольких столетий. Для доступа к счетчику имеется специальная инструкция RDTSC, правда, установкой флага TSD в управляющем регистре CR4 (процессора) ОС может сделать ее привилегированной (доступной только на нулевом уровне привилегий). В этом случае приложение, исполняемое на уровне 3, может аварийно завершаться по отказу исполнения инструкции. ОС может и позволить обращение к этому регистру, но «подсовывая» программе угодное ей значение времени. Заметим, что из-за внутреннего умножения частоты в процессоре результат чтения счетчика может отставать от реального времени на число, достигающее коэффициента умножения частоты. Правда, такая точность никому и не нужна (она потеряется в измеряющих программах).

 

Способы запуска программ

 

Традиционным способом запуска программ является загрузка их с какого-либо устройства хранения (диска) в оперативную память и исполнение в ОЗУ. До того как пользователь получает возможность такого запуска, требуется множество предварительных действий. По включении питания (и аппаратному сбросу) процессор начинает исполнять процедуру POST (начальный запуск и самотестирование) из ROM BIOS, причем большая часть кода исполняется прямо в ПЗУ. POST инициализирует стандартное оборудование ПК (о котором «знает» ROM BIOS системной платы), а также обнаруживает модули расширения ROM BIOS и запускает их процедуры инициализации. Далее POST определяет загрузочное устройство (обычно диск), ищет на нем загрузочную запись (сектор), загружает этот сектор в фиксированную область ОЗУ и передает управление на его начальный адрес. С этого момента, как правило, начинается процесс загрузки операционной системы с того же носителя: сначала базовой системы, а затем и всех необходимых дополнительных компонентов в виде драйверов и автоматически загружаемых программ. Только после этого пользователь может запускать требуемые программы с любого доступного устройства хранения (в том числе и через сеть). Программы могут загружаться и автоматически, без участия пользователя, по предварительно составленному и сохраненному сценарию (файлы config.sys, autoexec.bat и т. п. средства).

Для ряда специальных применений ПК приходится нарушать эти традиции. Для сравнительно простых систем можно отказаться от использования операционных систем. Программу функционирования компьютера можно «зашить» в ПЗУ, оформив в виде модуля расширения BIOS, и эта программа получит управление от POST. Можно и не связываться с ПЗУ, а загружать программу с устройства хранения простым загрузчиком, первая ступень которого должна совпадать со стандартным начальным загрузчиком. Однако не стоит отказываться от операционной системы без веских причин, поскольку она обеспечивает не только удобное операционное окружение, но и средства разработки и отладки программ. Операционную систему и необходимые программы можно загружать не только с привычных дисков (гибких, жестких, оптических), но и с компактных твердотельных носителей (см. п. 9.3). Эти носители могут подключаться к обычным интерфейсам устройств хранения.

Интересный вариант «твердотельного диска» — DiskOnChip — для микрокомпьютеров и микроконтроллеров, не имеющих стандартных интерфейсов устройств хранения, предлагает фирма M-Systems. Это микросхема, имеющая интерфейс 8/16-битной статической памяти, легко подключаемый к шине ISA (или локальной шине). Модель Millenium Plus объемом 32 Мбайт содержит массив флэш-памяти архитектуры NAND, модуль статической памяти SRAM (1 Кбайт), интерфейсные схемы, логику защиты записи и чтения и схемы обнаружения и исправления ошибок. Микросхема отображается на 8-Кбайтную страницу пространства памяти компьютера в области C8000-EFFFFh. По сигналу аппаратного сброса начальный блок из флэш-памяти выгружается в SRAM; если обнаруживается ошибка, то берется следующий (резервный) блок. Этот блок содержит процедуру инициализации «диска», которая обнаруживается тестом POST как модуль расширения BIOS. Процедура загружает из флэш-массива в системное ОЗУ драйвер своего «электронного диска» (блочного устройства), которое становится первым или последним логическим жестким диском (по выбору при конфигурировании). Далее к этому «диску» можно обращаться обычным способом (через Int 13h), c него же может и загружаться ОС. Интерфейс допускает каскадирование — объединение в единый диск до 4 микросхем, увеличивая его объем до 128 Мбайт, при этом все микросхемы отображаются через общее окно памяти (используют общий сигнал выборки). Встроенное ПО обеспечивает полную эмуляцию диска с прозрачным исправлением ошибок и переназначением дефектных секторов. Микросхема поддерживает длительную скорость записи 750 Кбайт/с, считывания — 2,4 Мбайт/с. Пиковая скорость считывания/записи достигает 20 Мбайт/с. В устройстве имеется уникальный идентификационный номер, область для однократного программирования (OTP), возможность защиты от записи отдельных зон и возможность ограничения доступа по паролю (нечитаемому).

 

Сервисы и прерывания BIOS

 

Системная BIOS предоставляет ряд сервисов низкого уровня, в основном предназначенных для обслуживания ввода-вывода и имеющих отношения к стандартным аппаратным интерфейсам. Традиционные сервисы BIOS обычно вызываются в реальном режиме или V86 посредством инструкций программных прерываний (Int xx). Большинство сервисов может быть вызвано и через фактически стандартизованные точки входа (адреса в области ROM BIOS) дальними вызовами процедур (CALL Far) с предварительным помещением в стек регистра флагов (сервисы построены как обработчики прерываний). Все традиционные сервисы BIOS работают в 16-разрядном режиме процессора, и ими можно пользоваться в реальном режиме, V86 и малопривлекательном 16-разрядном защищенном режиме.

Для процессоров 386+ оптимальным по эффективности является 32-разрядный защищенный режим. Для того чтобы из этого режима можно было пользоваться сервисами BIOS (правда, не всеми) без промежуточных переключений, по инициативе фирмы Phoenix ввели 32-разрядные вызовы BIOS32. Адрес точки входа BIOS32 заранее не известен, но известен способ его нахождения: в диапазоне адресов памяти 0E0000-0FFFFFh на границе параграфов (младшие 4 бита адреса нулевые) ищется строка-сигнатура "_32_" (число 325F5F33h) заголовка, за которой следует физический адрес точки входа. Сами сервисы вызываются дальними вызовами точки входа в сервис. Номер, параметры вызываемых функций и результаты передаются на регистрах процессора.

Прерывания, обслуживаемые системной BIOS, перечислены ниже. Кроме них несколько векторов используются как указатели на различные структуры данных.

Внутренние прерывания:

♦ Int 00h — деление на 0;

♦ Int 01h — пошаговый режим;

♦ Int 03h — точка останова;

♦ Int 04h — переполнение;

♦ Int 06h — недопустимая команда 286+;

♦ Int 07h — вызов отсутствующего NPU.

Аппаратные прерывания:

♦ Int 02h — немаскируемое прерывание;

♦ Int 08h — таймер 8253/8254;

♦ Int 09h — клавиатура;

♦ Int 0Ah — IRQ2/9;

♦ Int 0Bh — IRQ3;

♦ Int 0Ch — IRQ4;

♦ Int 0Dh — IRQ5;

♦ Int 0Eh — IRQ6 — контроллер гибких дисков;

♦ Int 0Fh — IRQ7;

♦ Int 70h — CMOS-таймер;

♦ Int 71h — IRQ9 (перенаправлено на Int 0Ah);

♦ Int 72h — IRQ10;

♦ Int 73h — IRQ11;

♦ Int 74h — IRQ12 (контроллер мыши PS/2);

♦ Int 75h — IRQ13 — исключение сопроцессора;

♦ Int 76h — IRQ14 — контроллер жестких дисков;

♦ Int 77h — IRQ15.

 

 

ПРИМЕЧАНИЕ

Прерывания Int 70h-77h имеют место только в AT.

 

Функции ROM BIOS (16-битные сервисы):

♦ Int 05h (F000:FF54h) — печать экрана;

♦ Int 10h — видеосервис;

♦ Int 11h — чтение списка оборудования (слово из BDA 0040:0010h), возвращает в АХ:

• биты 15:14 — число обнаруженных LPT-портов: 00 — 0, …, 11 — 3;

• бит 13 — резерв;

• бит 12 — обнаружен игровой адаптер;

• биты 11:9 — число обнаруженных СОМ-портов: 000 — 0, …, 111 — 7;

• бит 8 — наличие контроллера DMA;

• биты 7:6 — число обнаруженных НГМД: 00 — 1, …, 11 — 4;

• биты 5:4 — активный видеорежим: 00 — резерв, 10 — 80-колоночный цветной, 01 — 40-колоночный цветной, 11 — монохромный;

• биты 3:2 — размер ОЗУ на системной плате (теперь обычно 00);

• бит 1 — присутствие математического сопроцессора;

• бит 0 — присутствие дисководов;

♦ Int 12h — размер непрерывной памяти;

♦ Int 13h — дисковый сервис (блочный ввод-вывод);

♦ Int 14h — обслуживание СОМ-портов;

♦ Int 15h — AT-функции (системный сервис, функции определяются значением АН/АХ):

• 00-03h — управление и обмен данными с кассетным магнитофоном (были когда-то и такие «стриммеры»!) на старых PC;

• 4fh — перехват клавиатуры;

• 53xxh — сервисы управления потреблением АРМ (Advanced Power Management);

• 8300h — запуск таймера, устанавливающего флаг в заданной ячейке;

• 8301h — сброс того же таймера;

• 84h — джойстик (см. п. 8.6);

• 86h — программируемая задержка;

• 87h — перемещение блока расширенной памяти;

• 88h — получение размера расширенной памяти;

• 89h — переключение в режим V86;

• C0h — получение системной конфигурации, при успешном выполнении (CF=0, AH=0) ES:BX указывает на таблицу данных конфигурации;

• 80-82h, 85h, 90h, 91h — функции многозадачных ОС (BIOS устанавливает заглушки);

♦ Int 16h — клавиатурный ввод-вывод;

♦ Int 17h — обслуживание LPT-портов;

♦ Int 18h — процедура восстановления при неудаче начальной загрузки (прежде — ROM-Basic);

♦ Int 19h — начальная загрузка (вызов процедуры Bootstrap);

♦ Int 1Ah — системное время, дата, будильник и 16-битные вызовы сервисов PCI;

♦ Int 1Bh — обработчик нажатия клавиш Ctrl+Break;

♦ Int 1Ch — User Timer Interrupt, процедура, вызываемая обработчиком Int 08h каждые 55 мс; BIOS устанавливает простую заглушку (IRET), но программы могут перехватывать это прерывание; на время отработки этой процедуры все аппаратные прерывания запрещены (кроме NMI).

♦ Int 33h — поддержка мыши;

♦ Int 4Ah — обработчик будильника пользователя, установленного функцией BIOS Int 1Ah(6); прерывание вызывается асинхронно, так что при возврате из процедуры все регистры и флаги должны быть в том же состоянии, что и при входе; BIOS ставит заглушку (IRET);

♦ Int 67h — EMS-функции.

Указатели на таблицы:

♦ Int 1Dh — видеопараметры;

♦ Int 1Eh — параметры дискет;

♦ Int 1Fh — знакогенератор СGA;

♦ Int 41h — параметры HDD 0;

♦ Int 46h — параметры HDD 1;

♦ Int 43h — знакогенератор EGA.

 



Поделиться:


Последнее изменение этой страницы: 2016-07-14; просмотров: 446; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.181.122 (0.01 с.)