Регистр состояния линии
Регистр состояния линии позволяет программе определить причину ошибок, которые могут произойти при передаче данных между компьютером и 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;