Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Комментирую... 06.04.04 16:43 Число просмотров: 1999
Автор: leo <Леонид Юрьев> Статус: Elderman Отредактировано 06.04.04 17:10 Количество правок: 2
|
Комментирую, с запозданием (только вот заметил), но может еще пригодиться.
1)
На ISA-шиненельзяпосадить дваразныхISA-устройства на одно IRQ по электрическим "причинам".
Если все-же это сделать, то при первом-же прерывании будет ситуация когда TTL-выход с логическим '0' будет соединен с другим TTL-выходом с логическим '1'. Сигналы как минимум "задавятся", и в худшем случае TTL-вентиль устройства выставившего прерывания (лог 0) может перегореть. Хотя иногда "задавленного" уровня может хватить для срабатывания триггера на контроллере шины/прерываний, и тогда все может работать и даже "предсказывать" погоду :).
Реально обычно ничего не горит, но и не работает.
2)
Некоторые мультипортовые ISA-платы могут соединяться между собой специальным шлейфом, при этом обеспечивается синхронность изменения TTL-уровня на IRQ. Т.е. все соединенные платы выставляют IRQ одновременно и синхронно.
3)
Некоторые IO-контроллеры (ISA-карты на борту которых COM-порты, LPT, возможно IDE и т.д.) имеют логику "объединения" IRQ между своими устройствами, и поэтому, при наличии нормальных драйверов такие COM-порты могут работать на одном IRQ.
4)
Интегральные IO-чипсеты (все в одном чипе), как для ISA, так и для PCI, либо имеют логику объединения IRQ, либо не допускают установку одного IRQ для своих устройств. Но не все из чипов имеют "на борту" интерфейс к шине компьютера и при этом могут выдавать IRQ от каждого устройства на отдельном выводе.
5)
Внутренности плюшевых Win95/98/Me я знаю очень плохо, могу только предположить что WDM (98, Me) работает примерно также как Win2K/XP.
Win2K/XP не позволяет драйверам штатно разделать IRQ для ISA-устройств. Но можно сказать, что если системе "известно", что эти устройства "дружат" по IRQ между собой, и если их драйвера "захотят" разделать IRQ, то все будет работать. На самом деле все несколько сложнее, может быть несколько шин ISA, несколько шин PCI, и несколько процессоров... В конечном счете все будет решаться арбитром шины + HAL и драйверами.
Мой драйвер (SerialXp.sys) может работать в режиме разделения IRQ для ISA, системный Serial.sys тоже может, но его часто просто невозможно заставить это сделать. И конечно, независимо от драйвера, разделение IRQ на ISA должно не вызывать конфликтов на аппаратном уровне.
6)
В Windows для устройств предусмотрена возможность "псевдо"-разделения IRQ. При этом логическое подключение к IRQ производиться только при задействовании устройства (открытии handle к COM-порту), соответственно в каждый момент времени только одно из устройств разделяющих IRQ может быть активно. На аппаратном уровне это должно поддерживаться динамическим отключением/подключением устройств от/к линии IRQ (например через ISA-PNP).
7)
Вот еще забыл написать. На ISA-шине прерывание фиксируется контроллером прерываний по фронту (но можно перепрограммировать). Поэтому, перед выходом из обработчика прерываний и перед подачей контролеру команды "End Of Interrupt" (mov al, 20h; out al, 20h) необходимо убедиться, что с момента фиксации прерывания (TTL_IRQ 1->0) был момент (такт) когда линия IRQ была неактивна (TTL_IRQ = 1), иначе контроллер больше "не заметит" новых прерываний. Это также затрудняет разделение IRQ на ISA между разными устройствами, которые обслуживаются разными драйверами.
Ну прямо FAQ получилось :-)
Удачи!
SerialXp.sys
|
|
|