Модемы и факс-модемы. Программирование для MS-DOS и Windows

Регистр состояния линии


Регистр состояния линии позволяет программе определить причину ошибок, которые могут произойти при передаче данных между компьютером и COM-портом. Формат регистра представлен ниже:

D0        Данные получены и готовы для чтения, при чтении данных бит сбрасывается

D1        Ошибка переполнения. Принят новый байт данных, а предыдущий еще не был считан программой. В результате предыдущий байт потерян

D2        Ошибка четности, сбрасывается после чтения состояния линии

D3        Ошибка синхронизации. Возникает, например, при отсутствии стоп-битов в принятом байте

D4        Обнаружен запрос на прерывание передачи BREAK - длинная строка нулей

D5        Регистр хранения передатчика пуст, в него можно записывать новый байт для передачи

D6        Регистр сдвига передатчика пуст. Этот регистр получает данные из регистра хранения и преобразует их в последовательный вид для передачи. Если этот бит равен единице, то UART может принять очередной символ от компьютера

D7        Тайм-аут (устройство не связано с компьютером)

Доступ к отдельным полям регистра состояния линии можно организовать с помощью следующего объединения:

// Смещение относительно базового адреса

#define LSR_N     5

// Регистр состояния линии



typedef union _LSR_

{

     

struct

     

{

            

unsigned char in_ready               : 1;

            

unsigned char overflow               : 1;

            

unsigned char parity                    : 1;

            

unsigned char synxr                           : 1;

            

unsigned char break_detect : 1;

            

unsigned char out_ready                   : 1;

            

unsigned char shift_ready          : 1;

            

unsigned char taimout                        : 1;

     

} bit_reg;

     

unsigned char byte;

} LSR;



Содержание раздела