прерывание от железа

Discussion in 'WASM.HARDWARE' started by m_kostik, Jul 17, 2007.

  1. m_kostik

    m_kostik New Member

    Blog Posts:
    0
    Joined:
    Jul 30, 2006
    Messages:
    9
    Уважаемые коллеги!
    Изучая программирование на asm и работу с железом задался таким вопросом:
    а на какой вход контроллера прерываний (и какого контроллера) прерывания приходит сигнал от мыши? А от порта USB? А от сетевой карты? А от других устройств? В тех руководствах, что мне попадались, описаны следующие входы контроллеров прерываний:
    - irq0 - таймер;
    - irq1 - клавиатура;
    - irq2 - вход второго контроллера;
    - irq3 - последовательный порт 2;
    - irq4 - последовательный порт 1;
    - irq5 - парралельный порт 2;
    - irq6 - контроллер НГМД;
    - irq7 - параллельный порт 1;
    - irq8 - RTC;
    - irq9 - свободный;
    - irq10 - свободный;
    - irq11 - свободный;
    - irq12 - свободный;
    - irq13 - сопроцессор;
    - irq14 - винчестер;
    - irq15 - свободный.
    Где об этом можно почитать. В материалах Intel подробно говорится о процессоре, но о прерываниях я ничего не нашел.
     
  2. Pavia

    Pavia Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 17, 2003
    Messages:
    2,409
    Location:
    Fryazino
    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. Если что не так не пинайте я в этом еще плохо разбираюсь. :)
     
  3. z0mailbox

    z0mailbox z0

    Blog Posts:
    0
    Joined:
    Feb 3, 2005
    Messages:
    635
    Location:
    Russia СПБ
    а не наоборот?
     
  4. Pavia

    Pavia Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 17, 2003
    Messages:
    2,409
    Location:
    Fryazino
    Нет.
    Именно так.
    Можешь убедиться и глянуть, хотя бы в
    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".
     
  5. m_kostik

    m_kostik New Member

    Blog Posts:
    0
    Joined:
    Jul 30, 2006
    Messages:
    9
    Большое спасибо, Pavia и z0mailbox!
     
  6. rei3er

    rei3er maxim

    Blog Posts:
    0
    Joined:
    Jan 15, 2007
    Messages:
    917
    Location:
    minsk
    стоит отметить, что в PCI также существует механизм MSI (Message Signaled Interrupts), который в принципе и применяется на современных чипсетах
     
  7. _BC_

    _BC_ БЦ

    Blog Posts:
    0
    Joined:
    Jan 20, 2005
    Messages:
    759
    он пока нигде не используется, судя по наблюдениям. BIOS'ы не инициализируют MSI на девайсах и со стороны ОС до висты не было поддержки MSI.
     
  8. rei3er

    rei3er maxim

    Blog Posts:
    0
    Joined:
    Jan 15, 2007
    Messages:
    917
    Location:
    minsk
    _BC_
    странно
    это более гибкий механизм
    давно специфицирован (если не ошибаюсь в PCI 2.2)
    а по поводу чипсетов... даже мой относительно древний 865PE это дело поддерживал
    да, Windows не показатель ;)
    надо бы еще Linux посмотреть
     
  9. t00x

    t00x New Member

    Blog Posts:
    0
    Joined:
    Feb 15, 2007
    Messages:
    1,921
    в ядре 2.6. точно есть