Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 5 раз(а), последний 2021-05-21 05:29:42 |
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Раз нужно, добавлю.
|
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Вообще-то, очень хочется иметь двунаправленную шину данных. Однонаправленных принтерных портов уже, наверное, в природе не осталось (я недавно попытался найти где мог - не нашел).
Для проведения побайтного обмена, кроме двунаправленности шины данных (естественно, с возможностью выбора направления), необходимы еще четыре управляющих сигнала на выход. Они же на вход - тоже не плохо, но это не напрягает. Нормально было бы, если бы их можно было писать (возможно и читать) байтом, как пишет Леонид. Если говорить короче, то все, что есть у двунаправленного режима LPT - то и нужно. В принципе не так много, осталась только возможность сидеть на прерываниях по ACK - и все. Для инженера, которому раз плюнуть собрать внешний очень полезный контроллер - это была бы незаменимая вещь (в смысле объект). |
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Считывание байта добавил, на счет двунаправленного режима посмотрю еще доки, поскольку не где пока не встречал, как переключать эти пины с чтения на прием.
|
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Байт по смещению +2: младшие 4 бита - управляющие на выход; бит 4 - разрешает прерывания по ACK (из 1 в 0); бит 5 - меняет направление данных.
|
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Спасибо. На неделе добавлю.
|
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
А как получить элемент(ы) отдельно, а не метровый пакет?
|
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Когда обновлений много нет смысла выкладывать 50% и более файлов, поэтому уберается только компилятор, который еще мег прибавляет. Тем более что есть компоненты, часть которых встроена в среду.
|
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Тестировал LPT.
Совсем ведь ерунда осталось - прочитать байт по смещению +0 (именно он меняет направление по биту 5 в байте со смещением +2). Сам еще недостаточно освоился для добавления метода/события. Кстати, расскажите, что происходит при установке драйвера LPT-порта, и с какой частотой ведете опрос при генерации onLineInX. Я у себя ничего не заметил, да и тестовая программа, запущенная отдельно, не попросила ни каких dll-ек (у меня, правда 98SE). |
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Там теперь все байты прочесть можно и новым компонентом "Проверка битов числа" проверить отдельные биты
При установки драйверов LPT они(в Win98 одна библиотека) копируются в системную папку и все. Частоту опроса порта вы задаете сами методом doCheck, но вот насколько быстро его сможет опрашивать драйвер зависит от компьютера и ОС. |
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Там теперь все байты прочесть можно и новым компонентом "Проверка битов числа" проверить отдельные биты
А вот тут не понял. Вообще-то я говорил про чтение байта из порта 0x378+0. При установки драйверов LPT они(в Win98 одна библиотека) копируются в системную папку и все.
Действительно. Не запеленговал потому-что dll-ка осталась с версии 2.XX и давно не обновлялась. Но понял так, что, переходя с програмкой (например тестовой) на другой комп, я должен захватить и dll-ку, причем другую. Частоту опроса порта вы задаете сами методом doCheck, но вот насколько быстро его сможет опрашивать драйвер зависит от компьютера и ОС.
Тем более хочется получить событие без опроса - прерывание по ACK, хотя и не горит - но принципиальная возможность-то есть. |
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
А вот тут не понял. Вообще-то я говорил про чтение байта из порта 0x378+0.
Чтот же порт служит для вывода данных! Что же в него писать можно? Тем более хочется получить событие без опроса - прерывание по ACK, хотя и не горит - но принципиальная возможность-то есть.
Я не знаю, как обрабатывать прерывание по ACK, но есть предположение, что такая ф-ция будет работать только в 98, хотя я могу и ошибаться |
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
А вот тут не понял. Вообще-то я говорил про чтение байта из порта 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 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Запросто (писать - имеется ввиду снаружи)! Результат чтения с адреса +0 зависит от бита 5 в байте по смещению +2. Если он нуль, то результат - то что мы записали в порт последний раз. Если единица, то линии порта переходят на вход (Z-состояние), а читается то, что подано снаружи.
В документации я этого не встречал. Но возможно действительно я ситал только для однонаправленного порта. В винде тоже не знаю, кроме того, что на моем компе это 7-й вектор.
Вот именно, что по этому вектору еще нужно заставить порт работать. Теоретически, подпрограмма прерывания должна обладать 0-м приоритетом, и если винда позволяет это сделать приложению, значит оно может сделать с виндой все, что угодно
Нулевое кольцо программе совсем не обязательно иметь. Достаточно драйвера и DLL для взаимодействия с ним(как сейчас и реализована работа с портом LPT). В остальном же нужно искать доки или примеры реализации. |
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
В остальном же нужно искать доки или примеры реализации.
В принципе -ДА! Дока важна полюбому. Но если у Вас в столе лежит разъем со светодидами (как в help-е), то принципиальную проверку можно сделать за две минуты. Зажгите какую-либо комбинацию светодидов и запишите в порт+2 байт 0x20. Светодиоды должны погаснуть - значит порт переключил направление. Далее можете не сомневаться - при чтении с порта+0, будете получать состояние внешних линий. Если запишите 0 в порт+1 - светодиоды зажгутся снова. |
|||
карма: 9 |
|