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

Регистр управления прерываниями



Регистр управления прерываниями

Этот регистр используется либо для управления прерываниями от асинхронного адаптера, либо (после вывода в управляющий регистр байта с установленным в 1 старшим битом) для вывода значения старшего байта делителя частоты тактового генератора.

В режиме управления прерываниями регистр имеет следующий формат:

7 6 5 4 3 2 1 0 --T-T-T-T-T-T-T-¬ ¦ ¦ ¦ ¦ ¦ ¦ LT+-+-+T+T+T+T+T- L==T==- ¦ ¦ ¦ L= 1 - Разрешение прерывания при готовности ¦ ¦ ¦ ¦ принимаемых данных ¦ ¦ ¦ ¦ ¦ ¦ ¦ L=== 1 - Разрешение прерывания после передачи ¦ ¦ ¦ байта (когда выходной буфер передачи ¦ ¦ ¦ пуст) ¦ ¦ ¦ ¦ ¦ L===== 1 - Разрешение прерывания по обнаружению ¦ ¦ состояния BREAK или по ошибке ¦ ¦ ¦ L======= 1 - Разрешение прерывания по изменению ¦ состояния входных линий на разъеме ¦ RS-232-C (CTS, DSR, RI, DCD) ¦ L============ Не используются, должны быть равны 0

Для удобства доступа к регистрам UART мы определили для каждого регистра соответствующее объединение (см. файл uart_reg.h).

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

// регистр управления прерываниями

#define ICR_N 1 // смещение относительно базового адреса

typedef union _ICR_ {

struct {

unsigned char in_ready : 1; unsigned char out_ready : 1; unsigned char err : 1; unsigned char change : 1; unsigned char reserv : 4;

} bit_reg;

unsigned char byte;

} ICR;



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