Клавиатурные прерывания - PullRequest
3 голосов
/ 16 июля 2010

Я изучаю низкоуровневые драйверы устройств. Я запутался между прерываниями и IRQ. Пример кода драйвера, который перехватывает клавиатуру, предполагает прерывание клавиатуры 0x31, но моя книга о микропроцессоре говорит, что это 0x09. При открытии «Диспетчер устройств-> Клавиатуры-> Ресурсы» отображается IRQ 1. Кто-нибудь может уточнить это?

Спасибо, Санджив

Ответы [ 2 ]

2 голосов
/ 26 июня 2012

Это так. В вашем компьютере есть устройство, называемое (A) PIC. Это устройство принимает данные от некоторых ваших периферийных устройств, таких как клавиатура PS2, и вызывает прерывание на процессоре. В современной системе есть две APIC. Один называется основным, а другой называется ведомым, и каждая из них содержит 8 линий IRQ. Когда вы нажимаете клавишу на клавиатуре, APIC получает сигнал в строке 1 (IRQ 1), который затем вызывает прерывание в CPU.

APIC может быть запрограммирован так, что даже если он получит сигнал в строке 1, он не вызовет прерывание 9 на процессоре (хотя странно, что на самом деле это значение по умолчанию, если вы его не программируете), потому что это может конфликтовать с некоторыми из внутренние прерывания процессоров, так что вы обычно программируете его, чтобы он куда-то уходил. В вашем случае кажется, что он переводит его в прерывание 0x31, которое звучит так, как будто оно может быть правильным (добавляет IRQ + 0x30).

Я категорически не верю, что оно сопоставлено с прерыванием 9, потому что это будет конфликтовать с прерыванием исключения Double Fault для процессора, в книге, вероятно, просто упоминается настройка по умолчанию.

0 голосов
/ 31 августа 2010

Простой ответ заключается в том, что IRQ (Interrupt ReQuest) - это аппаратный вход, который отображается системой на прерывание.В случае клавиатуры IRQ1 отображается на прерывание 9.

Удачный ответ заключается в том, что прерывание 31h в этом контексте, очевидно, является ошибкой или опечаткой.

Запрос прерывания

...