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