Контроллер прерываний

Тема в разделе "WASM.NT.KERNEL", создана пользователем NoName, 20 май 2008.

  1. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    кстати, вопрос в тему: каким образом идет передача номера вектора от PIC к CPU?
    если брать LPC в ICH8, который инкапсулирует PIC, то он имеет доступ только к части системной шины (LINT0#, INIT#, ...)
    прямого доступа к адресной шине и шине данных у ICH8 нет
    с APIC все понятно: LPC генерирует цикл записи на шине PCI, приемником является MCH, он генерирует IMT на системной шине
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    rei3er
    APIC это и есть PIC.

    Вернее то что раньше было PIC теперь I/O APIC он передает данные на системнкю шину.
    На этой шине висит Local APIC он уже в процессоре и он прерывает работу процессора.
    Все усложнилось.

    Как нету? Еще как есть.


    Читай подробнее 5.8.1.3 Hardware/Software Interrupt Sequence
    Там используется acknowledge cycle.
     
  3. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    нет
    LPC инкапсулирует как PIC (MASTER/SLAVE), так и I/O APIC
    выход MASTER PIC каскадно подключен ко входу INTIN0 I/O APIC
    0-ой элемент RT, соответствующий INTIN0, реализует Virtual Wire режим (Delivery Mode = ExtINT)

    т. к LPC имеет доступ к LINT0# на системной шине, а I/O APIC - часть LPC, генерация сигнала любым PIC приводит к генерации сигнала LINT0# на системной шине
    обычно элемент LVT0 для всех не BSP Local APIC замаскирован (семантика обычного PIC-режима)
    BSP Local APIC получает входной сигнал LINT0# и проверяет Delivery Mode в LVT0
    для реализации Virtual Wire режима обычно Delivery Mode = ExtINT
    в этом случае идет генерация сигнала на внутренний вход CPU, соответствующий ExtINT
    CPU отвечает генерацией Acknowledge Cycle на системной шине
    Host Bridge на MCH получает сигнал и преобразует его в Acknowledge Cycle на PCI шине
    единственным получателем сигнала данного типа является LPC
    LPC генерирует 2 INTA# сигнала для PIC
    вот теперь вопрос: каким образом передается номер вектора после получения PIC второго INTA# сигнала?
    нет
    читай спецификацию на ICH8
    доступ к A[35:0]# и D[63:0]# есть только у MCH
    MCH соединен с ICH8 через DMI
    в случае I/O APIC все понятно: обычный цикл записи на PCI шине с фиксированными 12-ю старшими разрядами адреса (0xFEE)
    PCI-to-PCI bridge (имеющий доступ к DMI) ретранслирует цикл записи через DMI на MCH
    Host Bridge гененерирует IMT (Interrupt Message Transaction)
    генерация идет до передачи вектора
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    rei3er
    Процессор генерирует interrupt acknowledge cycle он передается на шину PCI.
    Далее этот запрос должен быть доставлен контроллеру прерываний. ICH8 разибвает на два сигнала которые сопровождаются INTA#. При перым замораживаются состояния прерываний. При втором отпровляется вектор прерывания как данные на шину данных. Эти данные должны передаться на шину PCI по шине данных (все еще выставлен interrupt acknowledge cycle). Спецификацию PCI посмотри. А вот далее эти данные должны быть доставленны процессору.
     
  5. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Pavia
    ага!
    в принципе, похоже на правду
    теперь все стало на свои места