При запуске драйвера нужно установить в 0 сигнал RTS у COM-порта. В функции DriverEntry следующий код: Код (Text): _asm { mov dx,03fbh //Установка бита DLAB и настройка скорости порта mov al,80h out dx,al sub dx,3 mov al,0ch // Младшая часть скорости out dx,al dec dx xor al,al //Старшая часть скорости out dx,al mov dx,03fbh // Настройка регистра контроля mov al,00011011b out dx,al mov dx,03f9h //Настройка прерывания mov al,0 out dx,al mov dx,03fch //Сброс RTS mov al,00000000b out dx,al } Но это не работает. Подскажите в чем может быть ошибка? Может есть другое решение этой задачи? Спасибо!
вместо sub dx,3 sub dx,2 вместо mov dx,03fbh // Настройка регистра контроля нужно mov dx,03fсh // Настройка регистра контроля Перед настройкой прерывания DLAB нужно в 0 установить
В документации по настройке Com-порта написано, что за младшее слово скорости порта отвечает порт с адресом 0x3f8, следовательно 0x3fb-0x3 = 0x3f8. Там же написано,что line control register находиться по адресу 0x3fb. DLAB я сбрасываю вот этими строчками: Код (Text): mov al,00011011b out dx,al так как DLAB находиться в старшем бите line control register.
Smoke_man Коментарии у тебя не охти. Но у тебя после заполнения младшей иде dec dx, а нужно inc а то заприделы уходят.
после теста ничего не изменилось, теперь код выглядит так: Код (Text): _asm { mov dx,03fbh //Установка бита DLAB и настройка скорости порта mov al,80h out dx,al sub dx,3 mov al,0ch // Младшая часть скорости out dx,al inc dx //dec dx xor al,al //Старшая часть скорости out dx,al mov dx,03fbh // Настройка регистра контроля mov al,00011011b out dx,al mov dx,03f9h //Настройка прерывания mov al,0 out dx,al mov dx,03fch //Сброс RTS mov al,00000000b out dx,al }