Вверх ↑
Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
#1: 2004-07-28 23:42:22 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-05-21 05:29:42
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2004-07-29 03:03:00 ЛС | профиль | цитата
Раз нужно, добавлю.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#3: 2004-07-29 10:32:49 ЛС | профиль | цитата
Вообще-то, очень хочется иметь двунаправленную шину данных. Однонаправленных принтерных портов уже, наверное, в природе не осталось (я недавно попытался найти где мог - не нашел).
Для проведения побайтного обмена, кроме двунаправленности шины данных (естественно, с возможностью выбора направления), необходимы еще четыре управляющих сигнала на выход. Они же на вход - тоже не плохо, но это не напрягает. Нормально было бы, если бы их можно было писать (возможно и читать) байтом, как пишет Леонид.

Если говорить короче, то все, что есть у двунаправленного режима LPT - то и нужно. В принципе не так много, осталась только возможность сидеть на прерываниях по ACK - и все. Для инженера, которому раз плюнуть собрать внешний очень полезный контроллер - это была бы незаменимая вещь (в смысле объект).
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#4: 2004-07-30 08:22:43 ЛС | профиль | цитата
Считывание байта добавил, на счет двунаправленного режима посмотрю еще доки, поскольку не где пока не встречал, как переключать эти пины с чтения на прием.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#5: 2004-07-30 09:17:03 ЛС | профиль | цитата
Байт по смещению +2: младшие 4 бита - управляющие на выход; бит 4 - разрешает прерывания по ACK (из 1 в 0); бит 5 - меняет направление данных.
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#6: 2004-07-31 02:18:39 ЛС | профиль | цитата
Спасибо. На неделе добавлю.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#7: 2004-07-31 15:08:18 ЛС | профиль | цитата
А как получить элемент(ы) отдельно, а не метровый пакет?
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#8: 2004-08-02 02:27:49 ЛС | профиль | цитата
Когда обновлений много нет смысла выкладывать 50% и более файлов, поэтому уберается только компилятор, который еще мег прибавляет. Тем более что есть компоненты, часть которых встроена в среду.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#9: 2004-08-03 23:33:15 ЛС | профиль | цитата
Тестировал LPT.
Совсем ведь ерунда осталось - прочитать байт по смещению +0 (именно он меняет направление по биту 5 в байте со смещением +2). Сам еще недостаточно освоился для добавления метода/события.

Кстати, расскажите, что происходит при установке драйвера LPT-порта, и с какой частотой ведете опрос при генерации onLineInX. Я у себя ничего не заметил, да и тестовая программа, запущенная отдельно, не попросила ни каких dll-ек (у меня, правда 98SE).
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#10: 2004-08-04 05:29:28 ЛС | профиль | цитата
Там теперь все байты прочесть можно и новым компонентом "Проверка битов числа" проверить отдельные биты

При установки драйверов LPT они(в Win98 одна библиотека) копируются в системную папку и все.

Частоту опроса порта вы задаете сами методом doCheck, но вот насколько быстро его сможет опрашивать драйвер зависит от компьютера и ОС.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#11: 2004-08-04 09:29:40 ЛС | профиль | цитата
Там теперь все байты прочесть можно и новым компонентом "Проверка битов числа" проверить отдельные биты

А вот тут не понял. Вообще-то я говорил про чтение байта из порта 0x378+0.
При установки драйверов LPT они(в Win98 одна библиотека) копируются в системную папку и все.

Действительно. Не запеленговал потому-что dll-ка осталась с версии 2.XX и давно не обновлялась. Но понял так, что, переходя с програмкой (например тестовой) на другой комп, я должен захватить и dll-ку, причем другую.
Частоту опроса порта вы задаете сами методом doCheck, но вот насколько быстро его сможет опрашивать драйвер зависит от компьютера и ОС.

Тем более хочется получить событие без опроса - прерывание по ACK, хотя и не горит - но принципиальная возможность-то есть.
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#12: 2004-08-06 03:33:11 ЛС | профиль | цитата
А вот тут не понял. Вообще-то я говорил про чтение байта из порта 0x378+0.


Чтот же порт служит для вывода данных! Что же в него писать можно?

Тем более хочется получить событие без опроса - прерывание по ACK, хотя и не горит - но принципиальная возможность-то есть.


Я не знаю, как обрабатывать прерывание по ACK, но есть предположение, что такая ф-ция будет работать только в 98, хотя я могу и ошибаться
карма: 27
0
Ответов: 9906
Рейтинг: 351
#13: 2004-08-06 08:06:12 ЛС | профиль | цитата

А вот тут не понял. Вообще-то я говорил про чтение байта из порта 0x378+0.

Чтот же порт служит для вывода данных! Что же в него писать можно?

Запросто (писать - имеется ввиду снаружи)! Результат чтения с адреса +0 зависит от бита 5 в байте по смещению +2. Если он нуль, то результат - то что мы записали в порт последний раз. Если единица, то линии порта переходят на вход (Z-состояние), а читается то, что подано снаружи.
Да, кстати, теперь я понимаю, что для чтения данных достаточно одной точки снизу.
Я не знаю, как обрабатывать прерывание по ACK, но есть предположение, что такая ф-ция будет работать только в 98, хотя я могу и ошибаться

В винде тоже не знаю, кроме того, что на моем компе это 7-й вектор.
Поэтому будем ждать прозрения. Теоретически, подпрограмма прерывания должна обладать 0-м приоритетом, и если винда позволяет это сделать приложению, значит оно может сделать с виндой все, что угодно. В 98-й DOS-овские задачи эмулируются настолько хорошо, что сесть на вектор прерывания - запросто.
------------------------------------------------
P.S. В принципе существует одна тонкость.
Однонаправленные принтерные порты были только на самой заре цивилизации. Это еще мультипорты на ISA-шных картах. Да и тогда уже в магазинах продавались мультипорты только с двунаправленным LPT (еще раньше я не застал). Далее появились EPP-порты, а потом и ECP. В ECP-портах существуют адреса со смещением +0x400... И какой-то из них (по моему +0x402) задает режимы LPT-порта (а может и похитрее). Один из режимов - "классический" (однонаправленный - там бит 5 по смещению +2 не работает), второй - "двунаправленный", третий включает какие-то режимы EPP, есть какие-то еще свои режимы. Сколько я не встречал виндов - если в биосе настроен режим ECP - то он стоит в режиме "двунаправленный". То есть, практически, проблем не должно быть. Но теоретически возможно, что кто-то загнал порт в непонятный режим, и тогда надо честно настраивать LPT по всем правилам ECP (а для этого их еще надо изучить). Ну а моя информация про LPT этим практически и закончилась.
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#14: 2004-08-08 05:04:47 ЛС | профиль | цитата
Запросто (писать - имеется ввиду снаружи)! Результат чтения с адреса +0 зависит от бита 5 в байте по смещению +2. Если он нуль, то результат - то что мы записали в порт последний раз. Если единица, то линии порта переходят на вход (Z-состояние), а читается то, что подано снаружи.

В документации я этого не встречал. Но возможно действительно я ситал только для однонаправленного порта.

В винде тоже не знаю, кроме того, что на моем компе это 7-й вектор.

Вот именно, что по этому вектору еще нужно заставить порт работать.

Теоретически, подпрограмма прерывания должна обладать 0-м приоритетом, и если винда позволяет это сделать приложению, значит оно может сделать с виндой все, что угодно

Нулевое кольцо программе совсем не обязательно иметь. Достаточно драйвера и DLL для взаимодействия с ним(как сейчас и реализована работа с портом LPT).

В остальном же нужно искать доки или примеры реализации.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#15: 2004-08-08 09:09:47 ЛС | профиль | цитата
В остальном же нужно искать доки или примеры реализации.

В принципе -ДА! Дока важна полюбому.
Но если у Вас в столе лежит разъем со светодидами (как в help-е), то принципиальную проверку можно сделать за две минуты. Зажгите какую-либо комбинацию светодидов и запишите в порт+2 байт 0x20. Светодиоды должны погаснуть - значит порт переключил направление. Далее можете не сомневаться - при чтении с порта+0, будете получать состояние внешних линий. Если запишите 0 в порт+1 - светодиоды зажгутся снова.
карма: 9

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)