Re[3]: прерывания под Windows или чтение из регистра LPT
От: Аноним  
Дата: 22.04.05 06:33
Оценка:
Здравствуйте, Аноним, Вы писали:

S>> Под NT — писать parallel port class driver, пример есть в DDK, под 9х — в принципе, и так (in/out) сойдет. По крайней мере, в некоторых версиях 95 работало.


А>Да ну!

А>Обычный Legasy драйвер сойдет , многое зависит от того какой контроллер прерываний используется APIC или PIC.
А>Если PIC то понятно какое софтверное прерывание будет соответствовать IRQ принтера,
А>если APIC все несколько сложнее.
А>Для PIC контроллера , соответствие SOftware Interrupt и IRQ расчитываются следующим образом:
А>SoftInt = IrqN + 0x30h — для NT подобных операционок , к примеру прерывание таймера IRQ0
А>SoftInt = 0 + 0x30h = > int 0x30h в таблице idt соответственно находится адресс обработчика прерывания таймеры по вектору 0x30.
А>Для машин с hypertrading или просто многопроццесорных машин обладающих APIC контроллерами все сложнее те могут индивидуальным IQR присвоить индивидуальные int x .
А>Соответственно расчитаем int для LPT (для PIC контроллера):
А>для LPT1 — IRQ7
А>int 0x37
А>lkz ДЗЕ2 — IRQ5
А>int 0x35
А>Подключить свой обработчик к прерыванию можно с помощью системного вызова
А>IoConnectInterrupt или както так, точно непомню, самостоятельно корректировать IDT
А>не рекомендую можно такой херни накрутить.

А>status = IoConnectInterrupt(&DeviceExtension->InterruptObject, // InterruptObject

А> InterruptIsr, // ServiceRoutine
А> DeviceObject, // ServiceContext
А> NULL, // SpinLock
А> MappedVector, // Vector
А> Irql, // Irql
А> Irql, // SynchronizeIrql
А> Latched, // InterruptMode
А> FALSE, // ShareVector
А> DeviceExtension->Affinity, // ProcessorEnableMask
А> FALSE);


Многое так-же зависит от типа прерывания , как известно они (прерывания бывают Latched и не лэтчед), разница лишь в том что считать прерыванием , изменение фронта сигнала на соответствующей ножке процессора/контроллера , или извменение уровня.
К примеру прерывания от COM портов меняются по фронту , это неизбежно приводит к неправильной работе мыши на com1 и модема на com3.
Напоминаю что устройства впринципе вполне спокойной могут бесконфликтно работать на одном irq вместе если драйвер написан правильно(исключение COM порты).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.