Глава 7. Ввод/вывод.
Раздел 1. Доступ к последовательному порту.
7.1.4 Определение статуса коммуникационного порта.
Регистр статуса линии микросхемы UART 8250 определяет протокол связи. Этот регистр имеет адрес порта на 5 больше, чем базовый адрес данного канала. Обычно он постоянно просматривается в процессе коммуникационного обмена. При передаче данных регистр сообщает, что предыдущий символ уже послан, позволяя программе записать новый символ поверх его. При приеме данных регистр информирует программу о поступлении следующего символа, с тем чтобы программа могла прочитать его прежде чем он будет уничтожен следующим прибывшим. Значение битов этого регистра следующее:
бит 0 1 = байт данных получен
1 1 = полученные данные были перезаписаны (предыдущий
символ не был вовремя считан)
2 1 = ошибка четности (вероятно, из-за шума в линии)
3 1 = ошибка окружения (передача не синхронизована)
4 1 = обнаружен перерыв (получена длинная строка единиц,
индицирующая, что другая станция запрашивает
конец передачи)
5 1 = регистр хранения передатчика пуст (в этот регистр
должны помещаться передаваемые данные)
6 1 = регистр сдвига передатчика пуст (этот регистр по
лучает данные из регистра хранения и преобразует
их в последовательный вид)
7 1 = таймаут (устройство не связано с машиной)
Hизкий уровень.
Этот пример совершенно аналогичен приведенному на Бейсике. Из области данных BIOS считывается базовый адрес коммуникационного канала, к нему добавляется 5, а затем из полученного адреса порта считывается байт статуса.
| MOV AX,40H | ;ES указывает на область данных BIOS |
| MOV ES,AX | ; |
| MOV DX,ES:[2] | ;получаем базовый адрес COM2 |
| ADD DX,5 | ;добавляем 5 для регистра статуса |
| IN AL,DX | ;получаем байт статуса |
| TEST AL,10000B | ;бит 5 установлен? |
| JNZ BREAK_DETECT | ;если да, то на обработку перерыва |
<~-7.1.3 Установка текущего коммуникационного порта.
Содержание
7.1.5 Инициализация и управление модемом.-~>