- •Вопрос: Охарактеризуйте развитие системы внутренних интерфейсов пк.
- •Вопрос: Охарактеризуйте этапы изменения архитектуры свв материнских плат, начиная с пк на базе I 80486 и до Pentium IV.
- •Вопрос: Охарактеризуйте правила программирования подсистемы dma пк
- •3) Обладают более высоким приоритетом по сравнению с каналами контроллера 2 (каналы 5, 6, 7). Передачи dma
- •10.2.7.8. Регистр состояний (stat - 008, 0d0)
- •10.2.8. Программирование контроллера
- •Irq2 ведущего). На входы irq0, irq1, irq3-irq7 ведущей микросхемы и на входы irq8-irq15 ведомой
- •I8259a с целью сохранения совместимости со старым программным обеспечением. Большая часть
- •Вопрос: Охарактеризуйте правила программирования подсистемы cmos/rtc.
- •80H. Когда клавиатура работает в режимах 2 и 3, код отпускания представляет собой двухбайтовый код - код
- •60H. Ответные коды клавиатуры на команды помещаются микроконтроллером адаптера в выходной буфер и
- •1, См. Выше).
- •Раздел 1.4.3). Следует отметить, что функции прерывания int 17h реализуют только протокол интерфейса
- •32 Бит и для них до 4 байт может быть передано за один цикл обращения процессора. Таким образом
- •1.9.3.3. Программирование ерр-порта на уровне epp bios.
- •Irq11, для com2 и com4 — irq3 или irq10. В принципе номер прерывания можно назначать в
- •Video bios хранится в специальном пзу (rom), размещенном на плате видеоадаптера vga. Его
- •2.1.2.1. Видеосервис bios
- •2.1.2.1.1. Аппаратные прерывания
Вопрос: Охарактеризуйте правила программирования подсистемы cmos/rtc.
Ответ:
В архитектуре PC AT используется контроллер типа MC146818 (Motorola) в качестве
часов реального времени RTC (real-time clock) и памяти конфигурации системы.
Контроллер содержит 64 байт памяти (CMOS): первые 14 байт памяти используются
непосредственно для внутренней схемы RTC, остальные 50 байт используются для
размещения информации о конфигурации системы. MC146818 продолжает счет времени после отключения системного питания, при
этом должен производиться переход на альтернативный источник питания микросхемы
(обычно батареи). Во время этого перехода с системного питания на батарейное
проектировщик системы RTC с батарейной поддержкой должен обеспечить защиту
целостности данных, минимизацию энергопотребления и надежность аппаратных средств.
Программа процессора получает данные времени и календаря путем чтения
соответствующих байтов памяти. Путем записи этих байтов в соответствующие регистры
RAM программа может инициализировать часы, календарь и будильник. Содержимое 10
байтов часов, календаря и будильника может быть двоичным или двоично-десятичным
(BCD). Адреса байтов часов, календаря, будильника, служебных регистров и т.д. подробно
описаны в приложении 8.9.1.
Перед инициализацией внутренних регистров разряд SET регистра B должен быть
установлен в 1, чтобы предотвратить изменения данных часов/календаря.
Программа инициализирует 10 ячеек в выбранном формате (двоичном или BCD),
затем указывает этот формат в разряде кода режима данных (DM) регистра B.
Во всех 10 байтах часов, календаря и будильника должны быть использованы
одинаковые данные - либо двоичные либо BCD. Для разрешения корректировок должен
быть сброшен разряд SET. После инициализации RTC производит все корректировки
данных в выбранном режиме. Для изменения режима необходимо реинициализировать
указанные выше 10 байтов. Цикл корректировки проводится MC146818 каждую секунду
при условии, что использована одна из определенных частот, делитель DV0-DV2 не
сброшен, а разряд SET в регистре B сброшен. Если разряд SET установлен в 1, то
программа может инициализировать байты часов и календаря; для этого прекращается
текущий цикл корректировки и запрещаются новые циклы.
При частоте 4,194304 МГц или 1,048576 МГц цикл корректировки занимает 248 мкс,
а при временной оси 32,768 кГц - 1984 мкс. Во время цикла корректировки программа
129
процессора не имеет доступа к байтам времени, календаря и будильника. MC146818 не
позволяет программе читать промежуточные (переходные) данные. Эта защита
достигается за счет отключения части RAM, относящейся к часам, календарю и
будильнику, от шины микропроцессора на все время цикла корректировки. Если
процессор будет читать эти байты RAM до завершения корректировки, выход будет
неопределенным.
В это время устанавливается разряд состояния цикла корректировки UIP. При
случайном обращении к данным о времени и дате доступ программы к этим данным
оказывается невозможным ни в одной из 4032 попыток.
Разряд 24/12 в регистре B определяет, как ведется отсчет времени: 1-12 или 0-23.
Этот разряд не может быть изменен без реинициализации байта часов. При выборе 12-
часового формата старший разряд байта часов соответствует времени после полудня при
установке в 1.
Три байта будильника могут быть использованы двояко. Во-первых, когда
программа устанавливает время будильника в соответствующих байтах часов минут и
секунд, каждый день в указанное время вырабатывается прерывание будильника, если
установлен разряд разрешения прерывания. Кроме того, программа может установить
«безразличное» состояние в одном или всех байтах будильника. Кодом «безразличного»
состояния служит любой шестнадцатеричный байт от C0 до FF, т.е. «безразличное»
состояние вызывается, когда установлены в 1 два старших разряда каждого байта. Если
«безразличный» код установлен в байте часов будильника, прерывание будильника
вырабатывается каждый час. Если «безразличный» код установлен в байтах часов и
минут будильника, прерывание будильника вырабатывается каждую минуту. Наконец,
если «безразличный» код установлен во всех трех байтах будильника, прерывание
вырабатывается каждую секунду.
RTC и RAM обеспечивают три отдельных автономных источника прерываний
процессора. Прерывание будильника может быть запрограммировано на периодичность
от одного раза в секунду до одного раза в день. Периодические прерывания могут быть
выбраны с периодом от 0,5 с до 30,517 мкс. Для извещения программы о завершении
цикла корректировки может быть использовано прерывание конца корректировки.
Нужный режим прерывания выбирает программа процессора. Три разряда в регистре B
разрешают три прерывания. При записи единицы в разряд разрешения прерывания
прерывание будет выработано при наступлении соответствующего события. Нуль в
разряде разрешения прерывания запрещает выводу IRQ реагировать на данное
прерывание.
В MC146818 предусмотрено 22 двоичных каскада делителя по временной оси, как
показано на блок-схеме(приложение рис. 1). Выход делителей представляет собой сигнал
частотой 1 Гц, подающийся на логическое устройство, обеспечивающее цикл
корректировки. Делители управляются тремя разрядами (DV2, DV1 и DV0) регистра A.
Делители могут иметь три базовых частоты (4,194304 МГц, 1,048576 МГц или 32,768
кГц). Цепочка делителя может удерживаться сброшенной, что дает возможность точной
установки времени. Когда делитель переходит от сброса к рабочей временной оси, через
0,5 с осуществляется первый цикл корректировки.Разряды управления делителем
используются также для облегчения тестирования MC146818.
У MC146818 присутствует выход прямоугольных сигналов , но он не используется в
архитектуре РС АТ.
Пятнадцать из 22 выходов делителя доступны для селектора 1-15, как показано на
блок-схеме. Первая цель выбора выхода делителя состоит в генерации прямоугольного
выходного сигнала на выводе SQW. Частота прямоугольного сигнала устанавливается
130
разрядами RS0-RS3 в регистре A.
Селектор 1-15 используется не только для выбора частоты SQW, но и для
периодических прерываний.
После того как частота выбрана, программа управляет включением и выключением
выходного сигнала на выводе SQW с помощью разряда разрешения прямоугольного
сигнала (SQWE) в регистре B. Во время изменения разрядов выбора прямоугольного
сигнала или разрешения прямоугольного сигнала SQWE может возникать сигнал
асимметричной формы. Вывод SQW прямоугольного сигнала может использоваться по-
разному. Например, он может служить эталоном частоты для внешних применений,
синтезатором частоты или использоваться для генерирования одного или более звуковых
тонов под управлением программы. Для чтения и записи во внутреннюю память RTC используются команды
микропроцессора IN и OUT. Порт 70h используется совместно регистром маски NMI и
регистром адресов памяти конфигурации памяти. Чтобы оставить разрешенным
прерывание NMI, нужно, чтобы разряд 7 адресов RTC был установлен в единицу при
записи в порт 70h(т.е. 1XXXXXXX, где XXXXXXX - реальный адрес).
Чтобы записать значение в память RTC необходимо: использовать OUT 70h, AL -для
указания адреса памяти конфигурации, которая будет изменена (70h - номер порта, AL -
адрес памяти), с учетом вышеуказанного условия для NMI;
использовать OUT 71h, AL для записи данных в память RTC по адресу, указанному в
предыдущей команде записи в порт 70h.
Команды вывода слов (например, OUT 70h, AX) для одновременной загрузки ячейки
памяти и данных не допускаются.
Чтобы прочитать содержимое памяти конфигурации необходимо: использовать
OUT 70h, AL для указания адреса памяти конфигурации, который будет читаться (70h -
номер порта, AL - адрес памяти);
использовать IN AL, 71h для чтения данных, хранящихся по этому адресу.
Все 64 регистра памяти RTC доступны для чтения и записи, кроме
следующих:
регистров состояния C и D, доступных только для чтения;
разряда 7 регистра состояния A, доступного только для чтения;
старшего разряда байта секунд, доступного только для чтения;
не используемого байта 3Fh.
В MC146818 имеются четыре служебных регистра(A,B,C,D), доступных программе
процессора. Эти четыре регистра полностью доступны и во время цикла корректировки.
Рис.1. Блок-схема контроллера RTC.
Служебные регистры
В MC146818 имеются четыре служебных регистра, доступных программе процессора.
Эти четыре регистра полностью доступны и во время цикла корректировки.
Регистр A (0A).
Чтение/запись, кроме UIP.
7 0
UIP - разряд текущего цикла корректировки - флажок состояния, который может
контролироваться программой. Когда UIP установлен в 1, корректировка происходит или
должна начаться. Когда UIP установлен в нуль, цикла корректировки нет и он не начнется
раньше, чем по меньшей мере через 244 мкс. Данные часов, календаря и будильника в
RAM полностью доступны программе при UIP=0, в это время они не изменяются. Разряд
UIP доступен только для чтения и не управляется выводом RESET. При установке SET в
регистре B в 1 отсутствует цикл корректировки, и UIP сбрасывается.
DV2, DV1, DV0 - три разряда, позволяющие программе выбирать различные режимы
22-каскадного делителя. Разряды выбора делителя идентифицируют используемую
частоту. Может быть использована частота 4,194304 МГц, 1,048576 МГц и 32,768 кГц.
Разряды выбора делителя используются также для сброса цепочки делителя. При
инициализации часов календаря программа может запустить делитель в определенный
момент, который задан в RAM. При снятии сброса делителя через одну секунду
начинается первый цикл корректировки.
RS3, RS2, RS1, RS0 используются для выбора одного из 15 выходов 22-каскадного
делителя или запрещения выхода делителя. Выбранный выход может использоваться для
генерирования выходного прямоугольного сигнала (вывод SQW) и/или периодического
прерывания. Программа может
1) разрешить прерывание с помощью PIE;
2) разрешить выход SQW с помощью SQWE;
3) разрешить одновременно прямоугольный сигнал и прерывание с
одинаковой периодичностью;
4) не разрешить ни того, ни другого.
Указанные четыре разряда доступны для чтения и записи, на них не действует вывод
RESET. Соответствие содержимого разрядов RS3, RS2, RS1, RS0 и частоты выходного
прямоугольного сигнала и/или периодического прерывания приведено в таблице 4.
Таблица 4.
Регистр B (0B)
Чтение/Запись.
SET: когда этот разряд установлен в нуль, цикл корректировки функционирует
обычным образом, инкрементируя счет каждую секунду. Когда SET установлен в 1, цикл
корректировки запрещен. SET доступен для чтения и записи,
но он не изменяется выводом RESET или внутренними функциями МC146818.
PIE - разряд разрешения периодического прерывания, доступный для чтения и
записи; он позволяет флажковому разряду периодического прерывания(PF) в регистре C
понижать уровень вывода IRQ. Программа записывает 1 в PIE, чтобы получать
периодические прерывания с частотой, заданной разрядами RS3, RS2, RS1 и RS0 в
регистре A. Нулевой PIE блокирует возбуждение IRQ от периодического прерывания, но
при этом остается установленным флажковый разряд PF. PIE не модифицируется
никакими внутренними функциями MC146818, но сбрасывается в нуль выводом RESET.
AIE - разряд разрешения сигнального прерывания, доступен для чтения и записи; он
разрешает флажковому разряду сигнализации (AF) устанавливать
IRQ. Сигнальное прерывание вырабатывается каждую секунду, когда три разряда
времени совпадают с тремя разрядами сигнализации, включая «безразличный» код
(11ХХХХХХ).Когда разряд AIE установлен в нуль, разряд AF не активизирует сигнал
IRQ. Вывод RESET сбрасывает разряд AIE в нуль. Внутренние функции МС146818 не
влияют на разряд AIE.
UIE - разряд прерывания конца корректировки, доступный для чтения и записи; он
позволяет флажковому разряду конца корректировки (UF) в регистре C устанавливать
IRQ. При понижении вывода RESET или при установке SET разряд UIE сбрасывается.
SQWE - разряд разрешения прямоугольного сигнала. Когда он установлен
программой в 1, на вывод SQW выводится прямоугольный сигнал, частота которого
выбрана разрядами RS3-RS0. Когда SQWE установлен в нуль, вывод SQW удерживается
на низком уровне. SQWE сбрасывается выводом RESET.SQWE доступен для чтения и
записи.
DM -разряд режима данных, показывающий, в каком формате должна выполняться
корректировка данных часов и календаря - в двоичном или BCD. DM записывается
программой процессора и может читаться программой, но он не модифицируется
никакими внутренними функциями или RESET. Единица в DM соответствует двоичным
данным, нуль - двоично-кодированным десятичным.
24/12 - разряд, устанавливающий формат байтов часов: 24-часовой режим(1) или 12-
часовой режим (0). Этот разряд доступен для чтения и записи иизменяется только
программно.
DSE - разряд разрешения летнего времени, доступный для чтения и записи при
установке в 1 позволяет программе разрешить две специальные корректировки. В
последнее воскресенье апреля время инкрементируется с 1.59.59 на 3.00.00. В последнее
воскресенье октября время по достижении 1.59.59 изменяется на 1.00.00. Эти специальные
корректировки не производятся, когда DSE установлен в нуль. DSE не изменяется
никакими внутренними функциями или RESET.
Регистр C (0С).
Чтение/запись
IRQF -флажок запроса прерывания, устанавливается в 1, когда выполняется одно или
несколько следующих условий:
PF = PIE = 1 ,
AF = AIE = 1 ,
UF = UIE = 1 ,
т. е. IRQF = PF*PIE + AF*AIE + UF*UIE
Когда IRQF установлен в 1, вывод IRQ находится на низком уровне. После чтения
регистра C программой или после понижения вывода RESET все флажковые разряды
сбрасываются.
PF - флажок периодического прерывания, доступный для чтения и записи. Он
устанавливается в 1, когда обнаруживается определенный фронт на выбранном отводе
цепочки делителя. Частота периодических прерываний задается разрядами RS3-RS0. PF
устанавливается в 1 независимо от состояния PIE. При PF = 1 возбуждается сигнал IRQ, а
если и PIE = 1, то устанавливается IRQF. Разряд PF сбрасывается по выводу RESET или
при считывании программой регистра C.
AF - флажок сигнального прерывания. Установка его в 1 показывает, что текущее
время совпало со временем будильника. При этом понижается уровень вывода IRQ и
IRQF устанавливается в 1, если AIE также установлен в 1. AF сбрасывается по RESET
или при считывании программой регистра C.
UF - флажок конца корректировки, устанавливаемый после каждого цикла
корректировки. Когда UIE установлен в 1, то при единице в UF устанавливается в 1
IRQF и возбуждается вывод IRQ. UF сбрасывается при чтении регистра C или по RESET.
Разряды 3-0 - неиспользуемые разряды регистра состояния C, читаются как нулевые,
запись в них невозможна.
Регистр D (0D)
Только чтение.
VRT - разряд подтверждения корректности содержимого RAM и времени при
условии правильного подключения вывода состояния питания (PS). При низком уровне
PS в VRT появляется нуль. Программа процессора может установить VRT при
инициализации часов и календаря, чтобы он указывал верные RAM и время. VRT
доступен только для чтения и не изменяется по RESET. VRT может быть установлен
только чтением регистра D.
Вопрос: Охарактеризуйте правила программирования контроллера клавиатуры ПК.
Ответ:
Подсистема клавиатуры ПК тира IBM PC/AT была представлена контроллером интерфейса клавиатуры
(адаптером клавиатуры), выполненным на базе микроконтроллера i8042 (однокристальная микро-ЭВМ) и
электронной клавиатурой, содержащей устройство управления, выполненное, как правило, на базе того же
микроконтроллера i8042 или его аналога. Микроконтроллеры настраивались на выполнение функций
адаптера клавиатуры или устройства управления клавиатурой (контроллера клавиатуры) соответствующим
набором программных модулей, хранящихся в постоянном запоминающем устройстве (ПЗУ)
соответствующего микроконтроллера.
Для подключения клавиатуры к ПК на аппаратном уровне адаптер клавиатуры и контроллер клавиатуры
реализуют двунаправленный асинхронный интерфейс с раздельными двунаправленными линиями передачи
байтов данных в последовательном формате и синхронизирующей эту передачу последовательности
синхросигналов. По этим же линиям реализуется сигнальный протокол интерфейса, обеспечивающий
асинхронный обмен с квитированием приема и запросом передачи байтов данных, а также управлением
потоком.
Рис. 1.1. Упрощенная схема подключения клавиатуры и манипулятора PS-Mouse к компьютеру
В
клавиатуре имеется микроконтроллер (однокристальная микро-ЭВМ) из семейства MCS-48 фирмы Intel
(например, i8042) на базе которого выполнено устройство управления клавиатурой - контроллер клавиатуры.
Этот контроллер осуществляет сканирование матрицы клавиш, управление индикаторами, внутреннюю
диагностику и связь с системной платой (с адаптером клавиатуры). Связь осуществляется через
последовательный интерфейс, включающий в себя двунаправленные линии Data и Clock. По линии Data
передаются данные в последовательном формате, а по линии Clock производится синхронизация передачи
этих данных. От системы в клавиатуру поступают команды управления клавиатурой, а системе из
клавиатуры - коды сканирования и подтверждения. Данные сканирования вырабатываются клавиатурой при
нажатие и отпускание (отжатие) клавиши. Эти коды вместе называются "кодами сканирования" (скан-коды),
или "кодами клавиш".
Все действия по управлению клавиатурой и ее взаимодействию с системой процессор микроконтролле-
ра клавиатуры выполняет под управлением программ, "прошитых" в ПЗУ микроконтроллера. При включение питания контроллер клавиатуры, находящийся в блоке управления клавиатуры, генери-
рует сигнал "сброс по включению питания" (POR) на время от 150 мс до 2,0 с, после чего переходит к выпол-
нению базового теста. Базовый тест (BAT) состоит из теста процессора контроллера, контрольной суммы ПЗУ (ROM) и теста
ЗУПВ (RAM). Во время процедуры BAT сигналы на линиях Clock и Data игнорируются. Светодиоды
включаются в начале BAT и выключаются в конце BAT. BAT занимает от 300 до 500 мс (не считая времени,
требуемого POR).
После успешного завершения BAT в систему передается код завершения (AAh) и начинается сканиро-
вание клавиатуры. При возникновение ошибки BAT клавиатура передает системе код ошибки (FDh). После
этого клавиатура прекращает сканирование и ожидает ввода команды. Коды завершения посылаются через
0,45-2,0 с после POR и через 300-500 мс после подтверждения команды RESET.
Немедленно после POR клавиатура регистрирует сигналы на линиях Clock и Data и устанавливает
протокол линии. Схема связей клавиатуры представлена на рис. 1.17.
Рис. 1.17. Схема связей клавиатуры и системы
Обмен данными осуществляется между системой и клавиатурой, при этом на физическом уровне подра-
зумевается обмен данными между двумя микроконтроллерами типа i8042: одним в системе (адаптер клавиа-
туры), другим в клавиатуре (контроллер клавиатуры).
Когда клавиатура готова к передаче данных, она сначала проверяет состояние линий синхросигнала и
данных, чтобы определить, нет ли запрета клавиатуры, или, запрашивает ли система передачу. Если линия
синхросигнала не активна (низкий уровень), данные сохраняются в буфере клавиатуры. Если линия синхро-
сигнала активна (высокий уровень), а линия данных не активна (системой сформирован запрос на передачу и
стартовый разряд START BITc), данные сохраняются в буфере клавиатуры, а клавиатура переходит в режим
приема данных от системы, осуществляя синхронизацию этого процесса. Если линии синхронизации и дан-
ных активны (высокий уровень), клавиатура начинает генерировать синхросигналы и передает нулевой стар-
товый разряд (START BITk), 8 разрядов данных, разряд паритета PARITY и стоповый разряд STOP (см. диа-
грамму на рис. 1.18б). Данные будут действительны от заднего фронта и до переднего фронта синхроимпуль-
са. Период Tcy синхроимпульса не менее 60 мкс, отрицательный полу период Tcl не менее 5 мкс. Клавиатура
изменяет состояние линии данных за время Thk (минимальное значение 0 мкс) до формирования заднего
фронта синхросигнала. Во время передачи клавиатура проверяет линию синхросигнала по меньшей мере
через каждые 60 мкс. Если после начала передачи данных с клавиатуры система переводит линию синхро-
сигнала на неактивный уровень, имеет место состояние, которое называется конфликтной ситуацией на
линии, и клавиатура прекращает передачу данных. Если конфликтная ситуация возникает до переднего
фронта 10-го синхроимпульса (разряд паритета) контроллер клавиатуры возвращает передававшийся символ
в буфер клавиатуры и возвращает линии синхросигнала и данных на активный уровень. Если до 10-го
синхроимпульса конфликтной ситуации не возникает, клавиатура завершает передачу. После конфликтной
ситуации система может запросить у клавиатуры повторную посылку данных.
После приема данных от клавиатуры система может заблокировать клавиатуру на время обработки
поступивших данных или пока система не запросит ответ от клавиатуры (участок [6] временной диаграммы).
При работе в MS DOS после ввода очередного кода с клавиатуры она блокируется системой путем
удержания линии синхронизации в пассивном состоянии примерно на 400 мкс. Этот сигнал может
рассматриваться интерфейсом клавиатуры как сигнал подтверждения приема системой информации от
клавиатуры (ACKc).
В РС/АТ блокировка линии синхронизации может осуществляться программно командой адаптера кла-
виатуры ADh "Запретить клавиатуру", а разблокирование - командой AEh "Разрешить клавиатуру". В РС/ХТ
эти операции осуществляются установкой и сбросом разряда 7 порта 61h.
Контроллер клавиатуры генерирует фиксированный набор кодов нажатия и отпускания для каждой из
клавиш на клавиатуре. При нажатие клавиши контроллер клавиатуры посылает в систему код нажатия этой
клавиши.
В режиме 1 клавиатура генерирует однобайтовый код отпускания, состоящий из кода нажатия плюс
