Обработка прирываний и исключений

Тема в разделе "WASM.NT.KERNEL", создана пользователем skyproc, 9 май 2007.

  1. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Есле работать из под вины, то где в IDT находится вектор IRQ0.
    Собственно таймер нужен для Для синхронизации картридера.
    Возможно есть более продвинутые методы на совлеменных платах.
    И вообще где надыбать инфу!
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    вполне логично, что irq перенесли на вектора сразу после исключений. хотя я точно не знаю)
     
  3. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    skyproc
    используй RTE (Redirection Table Entry) I/O APIC-а, которая соответствует IRQ0
    вот пример
    Код (Text):
    1. read_apic_irq:
    2.     mov dword [0xFEC00000], 0x10 ; redirection table entry number for IRQ0
    3.     mov eax, [0xFEC00010]
    4.     and eax, 0x000000FF ; eax contains IDT descriptor number for IRQ0
    да, если из ядра ОС работаешь, надо посмотреть, на какой адрес отображены регистры I/O APIC-а (0xFEC000xx) (или самому их отобразить)
     
  4. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    ВО!
    Но с RTE (Redirection Table Entry) I/O APIC-а я не знаком.
    Где взять подробную инфу, желательно на русском.
    Заранее спосибо!
     
  5. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    skyproc
    на русском, пожалуй, не найдешь
    а так в Intel Datasheets поищи информацию, благо ее там много :derisive:
    если не найдешь, могу кратко рассказать что к чему
     
  6. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    rei3er
    Есле не сложно то раскажи.
    С коментариями кода на русском...
    :)
     
  7. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    skyproc
    I/O APIC - PCI устройство
    VENDOR ID = 0x8086
    DEVICE ID = 0x1361
    в конфигурационном пространстве есть два основных регистра
    1. BAR (offset 0x10), биты 31-12 содержат 20 старших бит страницы, куда отображаются регистры I/O APIC-а
    2. I/O APIC Base Register (offset 0x40-0x41), бит 15 включает альтернативное отображение регистров по адресу 0xFECXYZ00, где X - биты 11-8, Y - 7-4, Z - 3-0
    По-умолчанию X = Y = Z = 0, значит базовый адрес = 0xFEC00000
    I/O APIC имеет 4 регистра, которые напрямую отображены на память, основные это:
    1. Index Register (offset 0), R/W, младшие 8 бит - номер регистра, к которому будем обращаться косвенно с помощью Window Register
    2. Window Register (offset 0x10), R/W, собственно окно, через которое читаем/пишем в регистр, выбранный через Index Register
    Номера регистров, которые можем выбрать через Index Register:
    1. APIC ID (0x00)
    2. Version (0x01) (биты 23-16 содержат количество элементов Redirection Table - 1)
    3. Arbitration ID (0x02)
    4. Redirection Table Registers (0x10 - N, где N - максимальное количество элементов Redirection Table * 2)
    Каждый элемент Redirection Table занимает 8 байт, младшее двойное слово - 0x10, 0x12, 0x14, ...
    старшее - 0x11, 0x13, 0x15, ...
    т. е грубо говоря IRQ0 -> 0x10-0x11, IRQ1 -> 0x12-0x13, ...
    в не SMP машине старшее двойное слово можно не трогать, формат младшего следующий (основные биты)
    31-17: зарезервированы
    16: если 1 - линия замаскирована
    15: Trigger Mode (0 - edge sensitive, 1 - level sensetive)
    14: Remote IRR (устанавливается в 1, когда Local APIC подтвердил получение сообщения от I/O APIC-а, сбрасывается, когда Local APIC посылает EOI сообщение I/O APIC-у)
    10-8: delivery mode (fixed, SMI, NMI, INIT, ExtINT)
    7-0: вектор
     
  8. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    rei3er
    skyproc
    в теме не разбираюсь, просто хочу заметить, что VENDOR ID = 0x8086 только на интеловских чипсетах, да и DeviceID тоже специфичен для каждого производителя
    искать нужно по Class/Subclass code
     
  9. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Спосибо за помощь...
    :)
     
  10. rei3er

    rei3er maxim

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

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    rei3er
    Начнем с того что APIC состоит из двух частей. I/O APIC и Local APIC.
    I/O APIC - не обязан быть PCI устройством.
    При этом I/O APIC Base Register - может распологаться в любом из системных PCI устройств. Чаще всего на мосту ISA.

    Так что придеться заводить базу чипсетов, для поиска I/O APIC.
    Поэтому предлогаю на первое время оставить базовый адресс 0xFEC00000
     
  12. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    rei3er
    Pavia
    Как на щет статьи?
     
  13. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    ну так я и говорил не про APIC, а про I/O APIC :derisive:
    спасибо за поправку
     
  14. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    кстати, глупый вопрос - а в IoConnectInterrupt разве передается IRQ, а не номер прерывания?
     
  15. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Вроде как IRQ. А HAL уже смотрит в своей таблице ассоциированный с данным IRQ вектор прерывания.
     
  16. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    понятно..