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

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



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

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

7 6 5 4 3 2 1 0 --T-T-T-T-T-T-T-¬ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ LT+T+T+T+T+T+T+T- ¦ ¦ ¦ ¦ ¦ ¦ ¦ L= Данные получены и готовы для чтения, ¦ ¦ ¦ ¦ ¦ ¦ ¦ при чтении данных бит сбрасывается ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L=== Ошибка переполнения. Был принят новый ¦ ¦ ¦ ¦ ¦ ¦ байт данных, а предыдущий еще не был ¦ ¦ ¦ ¦ ¦ ¦ считан программой. В результате предыдущий ¦ ¦ ¦ ¦ ¦ ¦ байт потерян ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L===== Ошибка четности, сбрасывается после ¦ ¦ ¦ ¦ ¦ чтения состояния линии ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L======= Ошибка синхронизации. Возникает, например, ¦ ¦ ¦ ¦ при отсутствии стоп-битов ¦ ¦ ¦ ¦ ¦ ¦ ¦ L========= Обнаружен запрос на прерывание ¦ ¦ ¦ передачи BREAK - длинная строка нулей ¦ ¦ ¦ ¦ ¦ L=========== Регистр хранения передатчика пуст, в него ¦ ¦ можно записывать новый байт для передачи ¦ ¦ ¦ L============= Регистр сдвига передатчика пуст. Этот ¦ регистр получает данные из регистра ¦ хранения и преобразует их в ¦ последовательный вид для передачи. ¦ Если этот бит равен единице, то UART может ¦ принять очередной символ от компьютера ¦ L=============== Таймаут (устройство не связано с компьютером)

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

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

#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;



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