Программирование модемов


Инициализация COM-порта



Инициализация COM-порта

Сначала надо перевести в неактивное состояние линии DTR и RTS, которые сообщают модему, что компьютер готов к обмену данными. Для этого надо записать нулевое значение в регистр управления модемом:

mov al,0 ; сбрасываем сигналы DTR и RTS

mov dx,MCR ; где MCR - адрес регистра управления модемом

out dx,al

jmp $+2 ; задержка

Затем сбрасываем регистры состояния линии, состояния модема и данных. Это достигается простым считыванием значений этих регистров:

; сбрасываем регистр состояния линии

mov dx,LSR ; LSR - адрес регистра состояния линии in al,dx jmp $+2 ; задержка

; сбрасываем регистр состояния модема

mov dx,MSR ; где MSR - адрес регистра состояния модема in al,dx jmp $+2 ; задержка

; сбрасываем регистр данных

mov dx,DAT ; где DAT - адрес регистра данных in al,dx jmp $+2 ; задержка

Эти регистры необходдимо сбросить для того, чтобы в дальнейшем не мешали старые значения, которые могли остаться от работы других программ. Так, если программа, ранее работавшая с COM-портом, не считала из регистра данных байт, принятый через COM-порт, то он "дождется" запуска нашей программы и попадет в приемный буфер.

После того как мы сбросили регистры UART, можно приступить собственно к инициализации COM-порта. Во время инициализации задается формат данных - длина слова, количество стоповых битов, наличие контроля по четности и скорость обмена.

Для задания скорости обмена данными надо перевести регистр данных и регистр управления прерываниями в режим ввода значения делителя частоты тактового генератора. Этот режим устанавливается записью единицы в старший бит регистра управления:

// переводим регистр данных и регистр управления прерываниями // в режим ввода значения делителя частоты тактового генератора

ctl = inp(LCR); // LCR - адрес регистра управления outp(LCR_N, ctl | 0x80); // устанавливаем старший бит регистра

// вычисляем значение для делителя частоты (переменная baud // определяет скорость обмена, которую мы хотим установить)




Начало  Назад  Вперед



Книжный магазин