Во-первых - рад, что что-то получилось.
> > > Разрешить прерывания от порта (адрес порта+4 бит > знач. 0х08) > > Я, блин, неделю почти провозился, пока случайно не нарвался > на этот факт (методом научного тыка). Я, кретин, > невнимательно прочитал твое сообщение и даже не обратил > внимание на этот пункт. И до сих пор понять не могу, какое > отношение имеет линия OUT2 к прерыванию. >
Мало где документированная особенность. На сколько я понимаю - это не просто один из сигналов, которым должно быть можно пользоваться как хочешь, а, на самом деле нельзя, он управляет разрешением прерываний.
> У меня есть еще парочка вопросов: > - Есть какая-нибудь литература (сайт) по работе с > COM-портом
Я пользовался только HELPами, MANами и другими файловыми доками.
Книжка по ассемблеру была, но куда-то делась, вроде как в книжке "С для профессионалов" что-то было, но, как правило, все кривое. Во всех доках ошибки найдуться.
> ( В обычных учебниках по ассемблеру что-то мало информации. > Я пользовался Зубковым "Ассемблер" - (кстати, и там этот > пункт одной строкой прописан - я тоже внимание не обратил > ;) ) ) > - Настройка регистров+2 и +3 для метода FIFO - это что > такое ?
У последовательных портов типа 16550А, именно А, есть очередь. То есть если байт не успели вытащить из регистра приемника, а по линии уже передан следующий, то при приеме нового, ни старый не забьется новым в регистре приемнике, ни новый не пропадет (встанет в очередь, попадет в регистр приемник и вызовет прерывание, как только будет завершена обработка предыдущего). Очередь до 16 событий по передаче и приему. Используется для повышения скорости и надежности связи. Информации о том как с очередью работать у меня нет.
> - Если под W2k писать драйвер - то с точки зрения > программирования аппаратной части разница есть > какая-нибудь.
Под Вин2к ничего не писал, но проблем может быть не мало. Если иметь всю документацию, то написать, естественно, можно.
> - Если тебе доводилось видеть комп с 10 COM портами (4 > COM-порта на одном векторе прерывания), то проблем никаких > у тебя с ними не было ?
Такую плату видел только "в глаза", в руках держал, но программировать под нее не программировал. Думаю ничего сложного - соответственно в 10 раз увеличивается пул адресов портов. Чуть хуже если используется мультиплексирование - т.е. значение какого-то портика используется как номер одного из десяти ком-портов, для которого отображен этот маленький диапазон портов. И крайне редкая ситуация - когда адреса приемников-передатчиков для каждого - свои, а адреса портов настройки/управления - общие. Короче нужно читать доку от платы.
Главное прерывание произошло - проверить не от одного ли это из десяти портов по мл. биту регистра идентификации прерываний, если нет - то вообще передать прерывание дальше - это в ДОСе. В виндовсе все по другому должно быть. В оригинале на одном векторе сидят СОМ1 и СОМ3 (IRQ4), на другом СОМ2 и СОМ4 (IRQ3). От того, что их 10 суть не меняется, принципы одни и те же остаются. Да и вообше, когда пишешь любой обработчик, нужно понимать, что на одном векторе несколько устройств может сидеть. Это на IBM-PC/XT только не возможно было. А то я натыкался на проблемы, когда в терминальной программе мышкой работать нельзя было (СОМ1-мышь, СОМ3 - модем), а при выходе из терминальной программы мышь умирала. Видомо терминальная программа запрещала IRQ4 в контроллере прерываний при завершении работы.
|