unsigned adr; int port; unsigned
void main(void) {
unsigned adr; int port; unsigned char data;
LCR reg_lcr; LSR reg_lsr; MCR reg_mcr; MSR reg_msr; ICR reg_icr; IIDR reg_iidr;
printf(" Программа отображает состояние регистров UART.\n\n");
printf(" Введите номер асинхронного порта (1-4): "); scanf("%d", &port );
// определяем базовый адрес адаптера port
adr = com_address( --port );
// считываем значение управляющего регистра
printf("\n Управляющий регистр = %Xh\n\n", data = (unsigned char ) inp( adr + LCR_N ) );
reg_lcr.byte = data;
printf(" Длина слова в байтах %d\n" " Количество стоповых битов %d\n" " Контроль %s\n" " Фиксация четности %s\n" " Установка перерыва: %s\n" " Порты %Xh, %Xh используются %s\n",
reg_lcr.bit_reg.len + 5, reg_lcr.bit_reg.stop + 1, (reg_lcr.bit_reg.parity == 3) ? "на четность" : ((reg_lcr.bit_reg.parity == 1 ) ? "на нечетность" : "четности не выполняется"),
(reg_lcr.bit_reg.stuck_parity == 1) ? "производится" : "не производится",
(reg_lcr.bit_reg.en_break_ctl == 1) ? "есть" : "нет",
adr, adr + 1, (reg_lcr.bit_reg.dlab == 1) ? "для загрузки делителя частоты" : "как обычно"
);
// считываем значение регистра состояния линии
printf("\n Регистр состояния линии = %Xh\n\n", data = (unsigned char ) inp( adr + LSR_N ) );
reg_lsr.byte = data;
printf(" Данные готовы для чтения: %d\n" " Ошибка переполнения: %d\n" " Ошибка четности: %d\n" " Ошибка синхронизации: %d\n" " Обнаружен запрос на прерывание \"BREAK\": %d\n" " Регистр хранения передатчика пуст: %d\n" " Регистр сдвига передатчика пуст: %d\n" " Тайм-аут: %d\n",
reg_lsr.bit_reg.in_ready, reg_lsr.bit_reg.overflow, reg_lsr.bit_reg.parity, reg_lsr.bit_reg.synxr, reg_lsr.bit_reg.break_detect, reg_lsr.bit_reg.out_ready, reg_lsr.bit_reg.shift_ready, reg_lsr.bit_reg.taimout );