Регистр идентификации прерывания
После того как произошло прерывание от COM-порта, программа может прочитать значение регистра идентификации прерывания, чтобы определить причину его возникновения.
Формат регистра представлен ниже:
D0 Если бит равен единице, значит нет прерываний, ожидающих обслуживания
D2-D1 Содержит идентификатор прерывания
Значение бит D2 D1 | Причина прерывания | ||
00 | Изменилось состояние модема. Устанавливается при изменении состояния входных линий CTS, RI, DCD, DSR. Сбрасывается после чтения состояния модема из регистра состояния модема | ||
01 | Буфер передатчика пуст. Сбрасывается при записи новых данных в регистр данных | ||
10 | Данные приняты и доступны для чтения. Сбрасывается после чтения данных из регистра данных | ||
11 | Прерывание по линии состояния приемника, возникает при переполнении приемника, ошибках четности или формата данных или при состоянии BREAK. Сбрасывается после чтения состояния линии из регистра состояния линии |
D7-D3 Должны быть равны 0
В файле UART_REG.H регистр идентификации прерывания определен следующим образом:
// Смещение относительно базового адреса
#define IIDR_N 2
// Регистр идентификации прерывания
typedef union _IIDR_
{
struct
{
unsigned char no_inter : 1;
unsigned char inter_id : 2;
unsigned char reserv : 5;
} bit_reg;
unsigned char byte;
} IIDR;