Шины PCI, USB и FireWire
Шрифт:
• Automatic Rotation Mode – режим автоматической ротации приоритетов позволяет организовать равноприоритетное обслуживание всех запросов. В этом режиме уровень, запрос от которого пошел на обслуживание, получает низший приоритет. Ротация приоритетов организуется подачей команд OCW2 с кодом операции 101 или 100 (см. далее);
• Specific Rotation Mode – режим специфицированной ротации: командой OCW2 с кодом операции 111 или 110 указанному уровню устанавливается низший приоритет;
• Poll Mode – режим опроса, в котором общий запрос INTR не вырабатывается. По команде Poll,
• Normal EOI – нормальный режим завершения, в котором бит ISR сбрасывается явной командой EOI, посылаемой контроллеру в конце исполнения обработчика прерывания. Обычно используется команда неспецифического EOI (код 20h), по которой сбрасывается бит ISR, соответствующий самому приоритетному из обслуживаемых запросов. Возможна команда и специфического EOI, которая сбрасывает в ISR бит, указанный в данной команде. Бит для замаскированного запроса таким способом сброшен быть не может;
• Auto EOI – автоматическая генерация неспецифического EOI контроллером в конце цикла подтверждения прерывания. Этот режим применим лишь в случаях, когда не требуется поддержка вложенности прерываний, и только для ведущего контроллера.
Контроллер 8259A своими 8-битными регистрами приписывается к пространству ввода/вывода и занимает 2 смежных адреса. Обмен с регистрами контроллеров должен производиться только однобайтными операциями ввода/вывода. В современных PC-совместимых компьютерах контроллеры имеют и дополнительные регистры (ELCR). Положение регистров в пространстве ввода/вывода приведено в табл. 3.2.
Контроллер имеет два режима работы: режим инициализации и операционный. После сброса контроллер инициализируется последовательностью команд ICW1-ICW4 (Initialization Command Words) длиной до 4 байт, после чего переходит в операционный режим. В операционном режиме (Operation Mode)контроллер воспринимает команды управления OCW1-OCW3 (Operation Control Words). В операционном режиме он может быть и реинициализирован, признаком начала инициализации является единичное значение бита 4 в байте, записываемом по адресу 020h (0A0h). Назначение команд и регистров контроллера прерываний приведено ниже
Команда инициализации ICW1 (запись по адресу 020h или 0A0h) служит для конфигурирования контроллера:
• биты [7:5]: 0 (в PC не используются);
• бит 4:1 – признак команды инициализации (в командах управления он нулевой);
• бит 3 – чувствительность линий запроса: 0 – прерывание по перепаду, 1 – прерывание по уровню. В современных контроллерах игнорируется, в них используется
отдельный регистр ELCR, управляющий чувствительностью каждого из входов;
• бит 2 = 0 (в PC не используется);
• бит 1:0 – каскадное включение пары контроллеров, 1 – одиночный контроллер;
• бит 0:1 – признак использования ICW4.
Команда инициализации ICW2 (запись по адресу 021h или 0A1h) задает номер вектора, генерируемого данным контроллером для входа 0. Биты [2:0] должны иметь нулевые значения.
Команда инициализации ICW3 (запись по адресу 021h или 0A1h) используется только для каскадного включения:
• для ведущего контроллера (Master, 8259A#1) биты [0:7] указывают на наличие ведомых контроллеров на линиях IRQ0–IRQ7 соответственно. В AT ICW3 = 04h (ведомый на IRQ2);
• для ведомого контроллера (Slave, 8259A#2) биты [2:0] содержат номер входа ведущего контроллера, к которому он подключен, биты [7:3] сброшены. В AT ICW3 = 02h (подключен к IRQ2 ведущего).
Команда инициализации ICW4 (запись по адресу 021h или 0A1h) задает режим работы контроллера, его применение обязательно при начальной инициализации:
• биты [7:5]: 0 – не используются;
• бит 4 – SFNM (Special Fully Nested Mode): 1 – специальный режим полной вложенности разрешен, 0 – запрещен;
• бит 3 – BUF (Buffered): 1 – признак буферизованности шины;
• бит 2 – M/S (Master/Slave), положение в каскаде: 1 – ведущий, 0 – ведомый.
В современных контроллерах не используется (сброшен);
• бит 1 – AEOI (Auto End Of Interrupt): 1 – разрешение автоматического завершения прерывания, 0 – нормальный режим (требует подачи EOI);
• бит 0 – тип используемого процессора: 1 – 8086/8088 и далее, 0 – 8080.
Команда управления OCW1 (запись по адресу 021h или 0A1h) задает маски запросов, единичное значение бита означает маскирование запроса. Биты [0:7]определяют маски запросов для IRQ0–IRQ7 (8259#1) или IRQ8–IRQ15 (8259#2).
Команда управления OCW2 (запись по адресу 020h или 0A0h) – завершение обслуживания прерывания (команда EOI), управление приоритетом:
• биты [7:5] задают код операции (в операциях, помеченных звездочкой, используется поле LLL в битах 2–0):
• 001 – неспецифический EOI;
• 011* – специфический EOI для запроса LLL;
• 101 – неспецифический EOI с ротацией приоритета;
• 100 – установка ротации приоритета в режиме AEOI;
• 000 – сброс ротации приоритета в режиме AEOI;
• 111* – специфический EOI с ротацией приоритета (установкой низшего приоритета для заданного уровня);
• 110* – установка низшего приоритета для заданного уровня;
• 010 – нет операции.
• биты [4:3]: 00 – признак OCW2;
• биты [2:0] – поле LLL – номер уровня, к которому относится команда (только для команд, помеченных звездочкой).
Команда управления OCW3 (запись по адресу 020h или 0A0h) – оперативное управление контроллером:
• бит 7:0 – не используется;
• биты [6:5] – режим специального маскирования (в PC не используется): 11 —установить, 10 – сбросить, 00, 01 – не изменять;
• биты [4:3]: 01 – признак OCW3;
• бит 2 – признак команды опроса (полинга). После команды полинга на последующую команду чтения порта 020h или 0A0h контроллер ответит байтом, кодирующим запрос прерывания с максимальным приоритетом. Для PC полинг обычно не используется (бит 2 – нулевой), а контроллер передает вектор прерывания по команде INTA;
• биты [1:0] – управление чтением регистров при операциях ввода по адресу 020h или 0A0h: