Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];

Вниз

Как отловить прерывание от LPT - IRQ7   Найти похожие ветки 

 
Serge Pik   (2003-02-26 17:00) [0]

Пишу интерфейс для управления прибором. Все было хорошо пока небыло необходимости быстро реагировать на "событие" прибора.
В петле опрашивать порт не хочеться. Хочу попробывать установить разрешение прерывания и ждать себе ACK. По идее это генерирует IRQ7. Но как его увидеть?
Не знаю, есть ли такое сообщение - по идее должно быть.

Дайте на Водку кто может.


 
Слесарь Матерящийся   (2003-02-26 17:33) [1]

А какова частота запросов с прибора?


 
Serge Pik   (2003-02-26 19:12) [2]

Может быть разной. Где - то от 1 кГц и выше (очень выше - 100кГц - очень запросто), но успокаивает одно - если пропущу пару - тройку событие из 4-ех-5-и -- ничего страшного, хотя хотелось - бы не пропускать.


 
Слесарь Матерящийся   (2003-02-26 19:38) [3]

Да, прерывание вполне в тему.
В любом случае, проблема решается написанием драйвера.
Либо на замену parport.sys, либо драйвер-"паразит".
Причём обработку придётся писать внутри interrupt service routine, и использовать буферирование, чтобы снизить частоту обращений в user-mode программу. IMHO, разумеется.


 
Serge Pik   (2003-02-26 20:35) [4]

NuMege WinDriwer генерит код (для Delphi в т.ч.) к своим *.vxd и *.sys драйверам. Что касается обращения к порту то более менее понятно, а вот с прерываниями разобраься не могу (хотя код NuMega с прерываниями явно работает (даже больше, чем мне того хотелось)). Да и вообще: стоит ли разбираться с этим? Спрашиваю потому что понимаю предыдущее замечание весьма интуитивно, а Драйвер сам не напишу быстро точно (опять же понимаю, что NuMege WinDriwer врядли ли широко известен Мастерам Delphi, я набрел на него случайно). Если у Вас есть мнение поделитесь пожалуйста.


 
Слесарь Матерящийся   (2003-02-27 09:53) [5]

Про vxd ничего не буду советовать, но для машин с ОС Windows 2000/XP можно запросто "попросить" у драйвера параллельного порта parport.sys CALLBACK на прерывание.

Т.е. в вашем драйвере добавляете ф-ю, которая будет вызываться из parport.sys, когда на линию приходит прерывание.

Ваш драйвер вызывает parport.sys (IoAttachDevice() на линк "\Device\ParallelPortX", потом через IoCallDriver()), выполняете запросы:

-- IOCTL_INTERNAL_GET_PARALLEL_PORT_INFO - заполнит структуру PARALLEL_PORT_INFORMATION данными о регистрах порта -- можем узнать базовый адрес порта;

-- IOCTL_INTERNAL_GET_MORE_PARALLEL_PORT_INFO - он заполняет структуру MORE_PARALLEL_PORT_INFORMATION, записывая туда данные о прерывании, штатно назначенном порту -- выполнив этот запрос, можно узнать, сможем использовать прерывание или нет;

-- IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE - чтобы монопольно блокировать порт, если решились его использовать;

-- IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT - чтобы получить доступ к прерыванию порта. В этом запросе передаётся адрес callback-процедуры в вашем драйвере.

Останется установить бит разрешения прерывания в регистре управления порта.
Да, и ещё придётся прописать в реестре ключ, разрешающий parport-у расшаривать прерывания.

Так что ничего сложного!

Где искать информацию:
1. MSDN, свежая документация для Windows DDK.
2. Windows 2000 DDK - старая справка; +исходники там же.

В DDK есть исходники parclass.sys и parport.sys. Mожно посмотреть по исходникам parclass, как надо коннектиться к parport и передавать ему запросы.
Заодно интересно разобраться в логике работы parport.sys.

По поводу использования NuMega - я пробовал - не понравилось. Использую мастер от Walter O"ney (только WDM-ки, VxD-шек нет) - WDMWIZ.AWX. Взять эту фичу можно здесь:
http://src.fitkursk.ru/detail.asp?id=925
http://src.fitkursk.ru/detail_book.asp?id=83
Он генерит достаточно понятный скелет драйвера. Добавляем свой код - и - о-па!

Ну вот - что знал - рассказал...


 
Serge Pik   (2003-02-27 14:22) [6]

М-да. Похоже оно. Сам бы не накопал бы. Большое Вам Спасибо.



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.018 c
7-54928
Maestro1
2003-02-26 13:46
2003.04.17
Работа с модемом


3-54455
Ptr
2003-03-26 13:10
2003.04.17
ПАРАДОКС


14-54816
sancho
2003-03-31 20:33
2003.04.17
Почему я не могу отписаться от рассылки?


14-54836
Rol
2003-04-01 09:44
2003.04.17
С Днём Математика!


3-54500
malkolinge
2003-03-31 14:12
2003.04.17
Сравнение с датой на сервере





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский