|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Rustam Gadeyev 2:5008/14 16 Mar 2003 09:36:58 To : Alex Korchmar Subject : Мультяха --------------------------------------------------------------------------------
14 Мар 03 19:10, Alex Korchmar wrote Oleg Goodyckov:
OG>> Следовательно, если два порта будут сидеть на одном прерывании, то
OG>> для программы нет никакой разницы, с какой платы это прерывание
OG>> поступило. К тому я и клонил. Драйверу безразлично, где
OG>> расположены порты - на материнке или на мультяхе, или и там, и там
OG>> поровну. Он их всеравно обработает корректно.
AK> к сожалению, микросхема NS16550 и ее аналоги и софтовые эмуляторы
AK> во внутренних модемах устроены так, что драйверу чрезвычайно сложно,
AK> если не невозможно вообще, корректно обрабатывать такую ситуацию,
AK> когда неизвестно, какая именно сгенерила прерывание. Как правило,
AK> весьма несложно вовсе повесить порт так, что лечится это уже только
AK> ресетом.
AK>
AK> Результат, наблюдаемый тобой - типичен для данной ситуации.
Во первых мультипортовки обычно так и работают: массив портов на одном
прерывании и драйвер вычитывает IIR у всех портов и решает обслуживать данный
порт или нет. Для мультях даже есть совет ставить диод для обеспечения
проводного ИЛИ изображая открытый эмиттер и диод для подтяжки к нулю.
Во вторых почему-то у меня под DOS прекрасно работает самописный драйвер,
которому нет разницы на каких прерываниях сидят порты или даже вовсе не имеют
прерывания. Все работает именно на использовании IIR и FIFO. FIFO позволяет
увеличить интервал между опросами IIR для портов без прерываний. То есть если
вызывать функцию чтения порта с частотой 1кГц, то скорость чтения данных из
порта 1000*16 обеспечит baudrate=160кBd
В третьих порты не вешаются просто так. У меня только иногда так получалось на
старинном notebook, а на всех остальных порты функционируют в соответствии со
стандартом. Скорее всего у тебя драйвер обслужил не все порты, которые
использовали это прерывание и подал PIC-у сигнал EOI. После этого прерывание уже
не вызовется. Если у тебя есть конкретный способ вешать порт так, чтобы он мог
вылечиться только через RESET, дай мне работающий примерчик.
Если трудности и существуют после решения аппаратной проблемы с IRQ, то только
в конкретной архитектуре драйверов.
Good Bye.
--- ---
* Origin: Ulan-Ude. Buryatia.0(2:5008/14)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/179983e7444c8.html, оценка из 5, голосов 10
|