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


Регистр состояния модема - часть 3


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 );




Начало  Назад  Вперед