Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Вот об этом я и говорил. 22.09.03 11:20 Число просмотров: 1732
Автор: amirul <Serge> Статус: The Elderman
|
> Обработчик выглядит примерно так:> com_port_interrupt_identification_mask = inp(
> com_port_interrupt_identification_register );
> if( com_port_interrupt_identification_mask & 1 )
> _chain_intr( oldinterrupt );
> switch( ( com_port_interrupt_identification_mask
> >> 1 ) & 3 ){
> case 0:
> time0 = ticks() / freq;
> com_port_modem_status_mask = inp(
> com_port_modem_status_register );
> break;
> case 1:
> // outp( com_port_receiving_register, 0 );
> break;
> case 2:
> inp( com_port_receiving_register );
> break;
> case 3:
> inp( com_port_line_status_register );
> break;
> default:
> break;
> }
> outp( 0x20, 0x20 );
> ---
> Не забываю подтверждение контроллеру. Читать состояние, > если изменилось состосние, читать данные, если пришли > данные... > Если это 4 прерывание, но не от СОМпорта, передаю его > дальше по цепочке.
Обработалось одно прерывание и выход. На самом деле нужно нечто типа
while (!(com_port_interrupt_identification_mask & 1)) {
// Здесь идет switch обработчика и выставляется флаг, что было обработано прерывание от порта
}
// Если флаг не установлен - передать по цепочке
---
|
|
|