Доброго времени суток, уважаемые. Прошу меня извинить, если затрагиваю несвежую тему, но поиск как-то не помог.
Имеется компьютер без встроенного LPT-порта, PCI-платка ST-Lab I-210 - контроллер LPT на 2 выхода на микросхеме Moschip MCS9815CV-BA (даташит прикрепил ниже, если кого заинтересует), а также устройство, с которым нужно общаться по протоколу EPP. Судя по документу, расположение регистров у микросхемы контроллера стандартное.
Теперь, собственно, о проблеме: инициализацию провожу стандартным образом: в ECR устанавливается режим EPP (пишу "100" в старшие 3 бита), на nINIT подаётся кратковременный "0", после чего в регистр адреса EPP записывается адрес. Контроллер делает вид, что байт пошёл, EPP Timeout при этом не взводится - в общем, всё как будто бы идёт по плану, ничто не предвещает. При попытке же прочитать данные начинается интересное: если устройство не подключено, я честно получаю от контроллера Timeout = "1" в регистре состояния. Если же устройство есть, я получаю в регистр данных то, что выставил на шине адреса, причём стабильно. Поначалу грешил на кривую прослойку между пользовательским и системным уровнем, но даже в реальном режиме под DOS симптоматика та же. Само устройство на других машинах с "бортовым" LPT ведёт себя адекватно. Адреса пространства ввода/вывода используются правильные.
Кто-нибудь может поделиться соображениями на тему того, что и где пошло не так?
Имеется компьютер без встроенного LPT-порта, PCI-платка ST-Lab I-210 - контроллер LPT на 2 выхода на микросхеме Moschip MCS9815CV-BA (даташит прикрепил ниже, если кого заинтересует), а также устройство, с которым нужно общаться по протоколу EPP. Судя по документу, расположение регистров у микросхемы контроллера стандартное.
Теперь, собственно, о проблеме: инициализацию провожу стандартным образом: в ECR устанавливается режим EPP (пишу "100" в старшие 3 бита), на nINIT подаётся кратковременный "0", после чего в регистр адреса EPP записывается адрес. Контроллер делает вид, что байт пошёл, EPP Timeout при этом не взводится - в общем, всё как будто бы идёт по плану, ничто не предвещает. При попытке же прочитать данные начинается интересное: если устройство не подключено, я честно получаю от контроллера Timeout = "1" в регистре состояния. Если же устройство есть, я получаю в регистр данных то, что выставил на шине адреса, причём стабильно. Поначалу грешил на кривую прослойку между пользовательским и системным уровнем, но даже в реальном режиме под DOS симптоматика та же. Само устройство на других машинах с "бортовым" LPT ведёт себя адекватно. Адреса пространства ввода/вывода используются правильные.
Кто-нибудь может поделиться соображениями на тему того, что и где пошло не так?
