Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.17;
Скачать: CL | DM;

Вниз

Как отловить прерывание от 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
14-54863
Lucky Startik
2003-04-01 17:25
2003.04.17
Возможности DELPHI


3-54493
npAKTuk
2003-03-30 20:45
2003.04.17
Без BDE


1-54680
Pk
2003-04-03 22:57
2003.04.17
Открыть файл соответствующей программой


1-54568
SeNtiMeL
2003-04-06 01:44
2003.04.17
Как читать тескстовую информацию из консольных приложений ?


8-54751
KA_
2003-01-11 11:54
2003.04.17
SVG