Уважаемые коллеги! Изучая программирование на asm и работу с железом задался таким вопросом: а на какой вход контроллера прерываний (и какого контроллера) прерывания приходит сигнал от мыши? А от порта USB? А от сетевой карты? А от других устройств? В тех руководствах, что мне попадались, описаны следующие входы контроллеров прерываний: - irq0 - таймер; - irq1 - клавиатура; - irq2 - вход второго контроллера; - irq3 - последовательный порт 2; - irq4 - последовательный порт 1; - irq5 - парралельный порт 2; - irq6 - контроллер НГМД; - irq7 - параллельный порт 1; - irq8 - RTC; - irq9 - свободный; - irq10 - свободный; - irq11 - свободный; - irq12 - свободный; - irq13 - сопроцессор; - irq14 - винчестер; - irq15 - свободный. Где об этом можно почитать. В материалах Intel подробно говорится о процессоре, но о прерываниях я ничего не нашел.
m_kostik ДА, там все у интел. А вообще, я тебе так скажу. Там есть много всего описанного, но про контроллер прерываний плохо описанно. Контроллер PIC. Эмулируется программно на новом железе. В новом железе существует APIC (Advanced Programming Interrupt Controller). Может работать в двух режимах PIC и APIC. В твой список надо добавить - irq12 - Мышь ps/2 - irq14 - винчестер первый канал ; - irq15 - винчестер второй канал ; Остальные IRQ распределяет BIOS при загрузке. Из остального, у нас устройства весящии на PCI (USB контроллер, сетевая карта) Чтобы выяснить кто закем закреплен, нужно, воспользоваться BIOS'ом. Им же можно и переназначить. Для работы с PCI есть прерывание int 1A. А также, для работы с защащенном режимом есть точки входа "_32_", "$PCI". Читаем BIOS PCI. Так же есть таблица которая отвечает за показывает какое устройству куда от мэпированно я имее ввиду PCI IRQ Routing Table ищеться она по сигнатуре "$PIR", на это дело спецификация у Microsoft. А также можно узнать и управлять прерываниями через ACPI, читаем документацию. А также для мульти процессорных систем таблицы MP, спецификация у интел. Теперь о том о чем я не договорил. У PCI есть 4 вывода прерываний INTA# INTB# INTC# INTD# А есть еще PRSNT[1::2]# которые определяют устройство. Так вот эти вводы выводы перетасовываются и выставляются на контролер прерываний. Заведует этим делом LPC или ISA контроллер, программирование которого специфично и зависит от железа поэтому и нужно использовать BIOS. А еще в сонфигурационном пространстве кажого устройства записан номер его вывод который соответствует Interrupt Pin 0=нет данных 1=INTA#,2=INTB#,3=INTC#,4=INTD# А также есть поля Interrupt Line которое определяет номер IRQ выставляет на начальном этапе загрузке (POST). Но может меняться. Лучше менять через BIOS, так как по настоящему управление прерываниями осуществляется через LPC(ISA) мост. Воть теперь перейдем к APIC. Этот зверь может иметь кучу прерываний. В стандартном IRQ0-IRQ23 При этом IRQ2 уже может использоваться не по назночению. И еще какимто образом IRQ16-IRQ23 связаны с PIRQ(PIRQA# тоже самое что INTA# и тд) 16 PIRQA# 17 PIRQB# 18 PIRQC# 19 PIRQD# 20 N/A PIRQE# 21 N/A PIRQF# 22 N/A PIRQG# 23 N/A PIRQH# PS. Если что не так не пинайте я в этом еще плохо разбираюсь.
Нет. Именно так. Можешь убедиться и глянуть, хотя бы в BIOS Programmer's Guide v10.pdf Довессок. На старых компах с ISA шиной. Надо было смотреть в спецификации на железо какие рессурсы оно использует, в том числе и IRQ. С появлением технологии PnP появилась возможность определять подключение устройств. Используя PnP BIOS можно выяснить какие IRQ используют COM, LPT, Мышь PS/2, клавиатура. Для ISA плат, либы через PnP BIOS либы через точку входа PnP ISA. В современном компьюторе вся эта мелочь(COM, LPT, Мышь , Клава, FDC) находятся в Super I/O контроллере. Программируя его можно маскировать устройства и изменять прерывания. Но программирование зависит от чипа. В некоторых Super I/O контроллерах доступ напоминает "PnP ISA".
стоит отметить, что в PCI также существует механизм MSI (Message Signaled Interrupts), который в принципе и применяется на современных чипсетах
он пока нигде не используется, судя по наблюдениям. BIOS'ы не инициализируют MSI на девайсах и со стороны ОС до висты не было поддержки MSI.
_BC_ странно это более гибкий механизм давно специфицирован (если не ошибаюсь в PCI 2.2) а по поводу чипсетов... даже мой относительно древний 865PE это дело поддерживал да, Windows не показатель надо бы еще Linux посмотреть