Что означает запись?

Очень старый код на с++. В коде идет настройка COM порта, не могу понять каким образом. Зачем добавлять к номеру порта число?
_outp(COMBase+3,0x80);
	  _outp(COMBase,0x01);  
	  _outp(COMBase+3,0x03);
	  _outp(COMBase+1,0x00); 
	  _outp(COMBase+2,0xC7); 
	  _inp(COMBase);
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В контроллере COM-порта несколько регистров. Запись в них определённых значений меняет режим работы порта. Эти регистры адресуются от базового адреса контроллера.
_outp(COMBase+3,0x80); - Line Control Register (LCR). Установка старшего бита разрешает доступ к делителю.
_outp(COMBase,0x01); - установка младшего байта делителя (0x01 => 115200 tick/s).
_outp(COMBase+3,0x03); - отключение доступа к делителю и установка размера символа 8 бит, 1 стоп-бит, без контроля чётности.
_outp(COMBase+1,0x00); - Inerrupt Enable Register (IER), запрет всех прерываний.
_outp(COMBase+2,0xC7); - FIFO Control Register (FCR), разрешить буферы FIFO размером 14 байт и очистить их.
_inp(COMBase); - прочитать байт из буфера.
www.osdever.net/documents/CP_serial.pdf
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Похоже, это прям низкий уровень - работа с регистрами UART.
COMBase - это базовый адрес порта. По этому адресу находятся регистры порта их несколько. Добавляя число вы пишите данные в регистр, соответствующий заданному смещению относительно базового адреса.
Вот тут есть старинное хорошее описание низкоуровневой работы с UART и последовательным портом, с регистрами и прочим.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы