Обработка прерываний pci NuMegой

Тема в разделе "WASM.ELECTRONICS", создана пользователем vitpan, 23 сен 2005.

  1. vitpan

    vitpan New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2005
    Сообщения:
    3
    Добое время суток!!!

    Существует следующая проблема:

    есть pci девайс, который пользует прерывания, есно стоит проблема их перехватывать.

    Сам пользуюсь нумегой. При создании WDM драйвера она вроде как инициализирует прерывание, но обработчик почему-то не вызывается, а при генерировании прерывания платой винды подзависают. На аппаратном уровне все вроде работает.
     
  2. Kola

    Kola New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    69
    vitpan

    a IoConnectInterrupt вернул STATUS_SUCCESS?
     
  3. vitpan

    vitpan New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2005
    Сообщения:
    3
    Ну вообще я пользуюсь numegой и в ней эта ф-я называется Kinterrupt::Connect. Она мне STATUS_SUCCESS вернула.

    Я так понимаю, что надо как-то сбрасывать прерывания, когда они происходят. В силу того, что я первый раз занимаюсь этим делом, то не очень очетливо понимаю, как этот процес происходит, и как мне кажется чего-то не доделываю в обработчике.
     
  4. Kola

    Kola New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    69


    у нумеги много всяких продуктов - лучше сказать что "пользуюсь DriverStudio"

    Поскольку прерывание PCI может быть разделяемым, не забывай возврящять TRUE, если запрос на прерывание делало твое устройство, и FALSE если нет.
     
  5. vitpan

    vitpan New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2005
    Сообщения:
    3
    Kola

    Полностью согласен. Некоректное название. Конечно-же DriverStudio



    С прерываниями все вроде заработало, только мне не очень понятно как. Возвращать TRUE из обработчика я возвращал. Только все заработало, когда в обработчике в регистр прерывания (функция в DDK - HalSetBusDataByOffset, в DriverWork - KPciConfiguration::WriteInterrupt) записываю номер прерывания. Я никак не могу понять смысла этой операции. Мне казалось, что прерывание я снимаю, возвращая из обработчика TRUE и снимая его на плате вручную.