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

Регистр идентификации прерывания



Регистр идентификации прерывания

Считывая содержимое регистра идентификации прерывания, программа может определить причину прерывания.

Формат регистра:

7 6 5 4 3 2 1 0 --T-T-T-T-T-T-T-¬ ¦ ¦ ¦ ¦ LT+-+-+-+T+T+T+T- L===T===- L=¦ L= 1 - Нет прерываний, ожидающих ¦ ¦ обслуживания ¦ ¦ ¦ L=== 00 - Состояние модема. Устанавливается при ¦ изменении состояния входных линий ¦ CTS, RI, DCD, DSR. Сбрасывается ¦ после чтения состояния модема из ¦ регистра состояния модема ¦ ¦ 01 - Буфер передатчика пуст. Сбрасывается ¦ при записи новых данных в регистр ¦ данных ¦ ¦ 10 - Данные приняты и доступны для чтения. ¦ Сбрасывается после чтения данных ¦ из регистра данных ¦ ¦ 11 - Прерывание по линии состояния ¦ приемника, возникает при ¦ переполнении приемника, ошибках ¦ четности или формата данных ¦ или при состоянии BREAK. ¦ Сбрасывается после чтения состояния ¦ линии из регистра состояния линии ¦ L=========== Должны быть равны 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;



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