Обработка прерывания на LPT

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Обработка прерывания на LPT

Сообщение Rojohn » 26.08.2007 (Вс) 12:29

Здравствуйте!
Кто-нибудь знает, как программно определить, было ли прерывание RQ5 или RQ7 на LPT. Как можно контролировать состояние этих прерываний в виде параллельного процесса (не по таймеру и не с помощью DoEvents), чтобы не занималось время основного процесса?Спасибо!
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.08.2007 (Вс) 12:33

Драйвера не пишут на VB.
Изображение

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 26.08.2007 (Вс) 12:35

А можно обращаться к стандартному драйверу LPT в Windows? Там вроде все прерывания должны быть прописаны... А чем делают драйвера, С? Скачал я одну книгу про драйвера, но там на С. А что, VB вообще не позволяет делать драйвера или просто это будет изврат?

Ещё один вопрос :), как работать с LPT в режиме EPP?
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.08.2007 (Вс) 13:15

Официальный DDK существует только на Сях.
Отдельные умельцы умудряются писать драйвера на асме, делфях и C++, но это скорее из разряда "расписать рисовое зерно полным текстом Махабхараты, стоя на лыжах в гамаке".
Об успешных экспериментах такого рода на VB я не слышал.
Изображение

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 26.08.2007 (Вс) 13:19

А что, чтобы контролировать прерывание на LPT обязательно надо писать драйвер?
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.08.2007 (Вс) 13:22

Да.
Изображение

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 26.08.2007 (Вс) 13:38

А как вообще Windows работает с прерываниями LPT порта? Как он на них реагирует и есть ли у него какие-либо стандартные драйвера из которых можно было бы достать инфу про прерывания? Может обратиться к его хендлу, например, или что-то вроде...
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.08.2007 (Вс) 14:04

Найди DDK, там, кажется, были исходники стандартного драйвера LPT, вместе с документацией и комментариями.
Изображение

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 26.08.2007 (Вс) 14:46

Ладно, попробую... но всё равно он будет на Сях :( Спасибо и на этом, если будет ещё какая инфа о прерываниях на LPT или о режиме EPP - буду за неё очень признателен...
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 26.08.2007 (Вс) 23:16

Может вопрос не совсем по VB, но может кто знает, какой регистр LPT в режиме EPP отвечает за сообщение об ошибке передачи данных?
Вот цитата с одного сайта:
Если Вы хотите работать с EPP совместимым устройством, тогда все, что Вы должны сделать - это поместить Ваши данные по адресу База + 4, и плата произведет все необходимые действия для подтверждения связи. Аналогично, если Вы желаете послать адрес вашему устройству, то используйте регистр адреса EPP со смещением +3.

Таким образом, и через регистр адреса EPP, и через регистр данных EPP читаются и пишутся данные вашего устройства, и Вы можете использовать одни и те же регистры и для чтения, и для записи. Однако контроллер EPP должен начать цикл чтения, поскольку и nDataStrobe и nAddressStrobe - выходы. Ваше устройство может запросить чтение через использование прерывания и, таким образом, выполнить операцию чтения.

Порт состояния имеет одно небольшое отличие. Бит 0, который был зарезервирован в наборе регистров SPP, теперь становится битом прерывания EPP. Этот бит будет установлен, когда произойдёт прерывание EPP. Это случается, когда линия nWait не деактивируется в течение приблизительно 10uS (в зависимости от порта) при активной линии IOW или IOR. IOW и IOR - это линии, представляющие чтение и запись портов ввода-вывода на ISA шине.

Режим EPP очень зависит от временной диаграммы шины ISA. Когда выполняется цикл чтения, порт должен предпринять соответствующее подтверждение связи и возвратить данные в этом цикле ISA. Конечно, это не происходит в пределах одного ISA цикла. Таким образом, порт использует сигнал IOCHRDY (Готовность канала ввода - вывода) на шине ISA, чтобы войти в состояние ожидание, пока цикл не закончится. Теперь представьте, что чтение или запись EPP начато без подключённой периферии. Порт никогда не получит подтверждения (nWait), останется в состоянии ожидания, и ваш компьютер остановится. Поэтому в EPP реализован сторожевой таймер, который срабатывает приблизительно через 10 мкс.

Три регистра, База + 5, База + 6 и База + 7, могут использоваться для операций 16- и 32- разрядного ввода-вывода, если ваш порт это поддерживает. Это может уменьшить количество операций ввода - вывода. Параллельный порт может передавать только 8 битов одновременно, таким образом, любое слово из 32 или 16 битов, записанное в параллельный порту, будет разделено на блоки размером в байт и послано через 8 линий данных параллельного порта.

Из всего сказанного трудно понять, какой регистр надо проверить, чтобы понять, дошли данные или не дошли...
Делитесь опытом и Вам воздастся! Кто разместит полезный код - тому воздастся вдвойне! :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 52

    TopList  
cron