Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
асвт, никитин сука.docx
Скачиваний:
11
Добавлен:
25.09.2019
Размер:
266.34 Кб
Скачать
  1. Контроллер прерываний

Это устройство, которое получает запросы на аппаратное прерывание от всех внешних устройств. Он определяет какие запросы следует обслуживать , какие будут ждать своей очереди, а какие не будут обслуживаться вообще. В ПК существует 2 контролера прерываний: IRQ 0 (8) – IRQ 7 (15), если происходит одновременно несколько прерываний, обслуживается тот, у которого высший приоритет.

  1. IRQ 0 (int 8) – прерывание системного таймера

  2. IRQ 1 (int 9) – прерывание клавиатуры

  3. IRQ 2 – подключается ведомый контролер

  4. IRQ 8 (int 70h) – прерывание часов реального времени

  5. IRQ 9-12 – могут использовать дополнительными устройствами

  6. IRQ 13(int 2 or int 75h) – ошибка математического сопроцессора

  7. IRQ 14 (int 76h) – прерывание IDE 1 контролера (ЖД)

  8. IRQ 15 (int 77h) – прерывание IDE 2 контролера

  9. IRQ 3 (int 0Bh) - прерывание последовательного порта COM 2

  10. IRQ 4 (int 0Ch) – COM 1

  11. IRQ 5 (int 0Dh) – LPT 2

  12. IRQ 6 (int 0Eh) – прерывание Floppy Disc

  13. IRQ 7 (ont 0Fh) – прерывание LPT 1

  1. Прерывания в защищённом режиме

При передачи управления обработчику, ЦП помещает в стек флаги и адрес возврата.

Int 2

Немаскируемое прерывание NMI

Int 3

#BP точка остановки

Int 8

#DF двойная ошибка

Вызывается, если одновременно произошли 2 исключения, которые не м/б обслужены последовательно (#DE #TS #NP #SS #GP #PE). Если при #DF произошло ещё одно исключение, то ЦП отключается и м/б выведен из этого состояния, только сигналом NMI или перезагрузкой

Int 0Ah

#TS ошибочный TSS

Вызывается при попытке переключения с ошибочным TSS

Int 0Bh

#NP сегмент недоступен

Вызывается при попытке загрузить в сегментный регистр селектор сегмента в дескрипторе которого сброшен бит присутствия сегмента

Int 0Ch

#SS ошибка стека

Int 0Dh

#GP общая ошибка защиты

Int 0Eh

#PF ошибка страничной адресации

Вызывается в режиме страничной адресации, если программы пытается обратиться к отсутствующей или прилигированной страницы.

Int 10h

#MF ошибка сопроцессора

Int 20h

#FFh для программ

  1. Порты ввода-вывода

Системы реального времени должны иметь возможность читать и писать данные в устройства. RTX-интерфейсы портов ввода / вывода  позволяют осуществлять это без необходимости переключения в режим ядра. Отпадает необходимость написания драйвера для каждого устройства, к которому необходимо получить доступ. Кроме того, устраняются задержки, связанные с запросом обслуживания драйвером при каждом обращении к устройству.

Порт  ввода / вывода  предоставляет альтернативный метод прямого общения с аппаратурой. В адресном пространстве ввода / вывода  у процессоров Intel каждый адрес представляет собой 8-ми битный “порт”, который обычно соответствует 8-ми битному управляющему регистру устройства. Хотя последовательные адреса могут представлять байты в многобайтовом порту, разработчики обычно используют подход, при котором существует однобайтовый порт, а многобайтовые величины обычно вводятся, как последовательные однобайтовые записи в порт.  

Перед любым вводом/выводом из портов необходимо разрешить доступ к портам. Это осуществляется посредством функции RtEnablePortIo, параметром которой является диапазон портов  ввода / вывода , к которым надо получить доступ. После этого для передачи данных можно использовать функции RtWrite* и RtRead*.

API управления портами  ввода / вывода: 

Следующие функции служат для управления портами  ввода / вывода :

RtEnablePortIo -

разрешает прямой доступ к портам  ввода / вывода  для указанного диапазона адресов

RtDisablePortIo -

запрещает прямой доступ к портам  ввода / вывода  для указанного диапазона адресов

API передачи данных:

Следующие функции служат для передачи данных из/в портов  ввода / вывода :

RtReadPortUchar,RtReadPortUshort,RtReadPortUlong -

напрямую читают одно-, двух-, четырехбайтовые данные из указанного порта

RtWritePortUchar,RtWritePortUshort,RtWritePortUlong -

напрямую пишут одно-, двух-, четырехбайтовые данные в указанный порт

RtReadPortBufferUchar,RtReadPortBufferUshort,RtReadPortBufferUlong -

копируют одно-, двух-, четырехбайтовые данные из указанного порта  ввода / вывода  в буфер

RtWritePortBufferUchar,RtWritePortBufferUshort,RtWritePortBufferUlong -

копируют одно-, двух-, четырехбайтовые данные из буфера в указанный порт  ввода / вывода 

Общие замечания по программированию

Интерфейсы RTX написаны на ассемблере и используют вызов _ _stdcall. Это означает, что подпрограмма ответственна за очистку стека. Вы не должны использовать другие соглашения о вызове (это может вызвать проблемы с компилятором).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]