Цитата
Все по-порядку. PCI-ядро выставляет прерывание. Обработчик прерывания в драйвере считывает регистр состояния прерывания PCI-ядра - этот регистр доступен для чтения обработчиком независимо от наличия/отсутствия передачи данных по ДМА (шина не грузится мастером на 100%).
как раз это и непонятно: как регистр может быть всегда доступен?(где бы он ни находился: в пр-ве портов или в конфигурационном пространстве)
Предположим ДМА передает burst'ом 100 фаз данных.В это время обработчик получил прерывание(не от нашего устройства) , он говорит драйверу, что нужно считать регистр состояния, драйвер в свою очередь вызывает ф-ю ReadPort , далее комп в роли мастера пытается инициировать транзакцию чтения, НО
1 он не получит доступа к шине пока текущая транзакция не закончится, а она может тянуться долго.
+как выяснилось время отпущенное каждому драйверу на определение принадлежности ему прерывания ограничено.
2 как устройство поймет, что надо переводит буферы сигналов на прием?(например TRDY для мастера вх., для таргета - вых.)
----------------
я свою проблему решил следующим образом:
Если мы выставили прерывание, тогда ДМА ждет пока драйвер не попросит его(прерывание) снять.
Если прерывание выставлено не нами, тогда ф-я read_Port возвращает все '1' для значения регистра состояния.(~реально один бит у меня всегда '0') - как раз случай когда времени на опр. принадлежности прер-я не хватает.
Таким образом для обработчика это значит, что прерывание адресовано не нам.
----------------
Но я все же не понимаю, как др. устройства-мастера решают эту проблему.
Сообщение отредактировал qwqw - Nov 24 2005, 21:16