В продолжении тематики виртуального диска, раскрою тему быстрого порта COM2 на микросхеме 16C550.
Электрическая схема порта:
альтернативаня ссылка на схему
Устройство представляет собой карту расширения, подключается в системный разъём ПРК "Орион-128.2" (нумерация контактов указана согласно схеме рев.512).
Возможны два варианта сборки: упрощённый и стандартный. Первый вариант - без дешифратора 1533ИД3, его использование возможно только если в системе больше нет никаких других устройста, занимающих адресное пространство F700..F7FFh. Второй вариант с помощью дешифратора позволяет корректно занимать только диапазон F7E0..F7EFh, в этом случае сигнал ПРК "SEL_F7xx" (В30) идёт на БИС 16C550 через дешифратор.
Для упрощения схемотехники в качестве тактового генератора используется специализированный чип с HCMOS/TTL-выходом, например такой - http://www.chipdip.ru/product/7.3728mhz-hcmos-ttl/. Частота генератора - 7.3728 МГц.
Для преобразования сигналов (TTL<->RS232) используется микросхема MAX232. Вариантов исполнения этого популярного преобразователя вагон и маленькая тележка, они требуют разные номиналы конденсаторов обвязки, поэтому на схеме указан номинал с вариацией. Более точно нужно смотреть даташит на ваш конкретный экземпляр "макса".
На плате ПРК требуется небольшая доработка (если она у вас не была сделана ранее): на линию "В20" системного разъёма заводится сигнал RESET с выхода "9" микросхемы DD18.2 (ТМ7).
Как было сказано ранее, программно порт поддержан в ОС DSDOS начиная с версии v3.81, его наличие в системе определяется автоматически при загрузке, скорость обмена программируется максимальная - 115200 Бод.
Схема не требует наладки, при исправных деталях и правильном монтаже работает сразу.
Мой "макетный" вариант выглядит так:
Фото №1 Фото №2
В нём микросхем больше, т.к. я одновременно распаял два порта: COM1 и COM2. Причём первый с вариацией: 1) под КР580ВВ51А (скорость обмена 38400 Бод) и 2) под MSM82C51A-2 (скорость обмена 115200 Бод).
Информация по программированию порта COM2:
Код:; BIOS (2/2) для DSDOS v3.81 (Орион-128.2) ; (C) 1998-2016 Соловьев Д.Н. /Санкт-Петербург/ ; 18.06.2016 ; Порт COM2 (16C550) RG_RWD:EQU 0F7E0H; Read/Write Data RG_IER:EQU 0F7E1H; Interrupt Enable Reg RG_LCR:EQU 0F7E3H; Line Control Reg RG_MCR:EQU 0F7E4H; Modem Control Reg RG_LSR:EQU 0F7E5H; Line Status Reg RG_SCR:EQU 0F7E7H; Scratch Reg IniCOM: ; Инициализация UART 16C550 LXI H,RG_IER MVI M,0; отключить все прерывания INX H INX H MVI M,80H; маска установки DLAB MVI L,RG_RWD MVI M,4; LSB делителя (4 = 115200 Бод) INX H MVI M,0; MSB делителя INX H INX H MVI M,03H; настройка протокола (8,N,1) RET SvbCOM: ; Запись байта в порт обмена ; I: [C]-записываемый байт ; O: <C>=0 - [A]=записанный байт, ; <C>=1 - порт не готов MVI B,0; time-out const = 256 SVB2: DCR B JZ LDB2_4 LDA RG_LSR ANI 20H JZ SVB2 MOV A,C STA RG_RWD RET LdbCOM: ; Чтение байта из порта обмена ; O: C=0 - [A]=байт, C=1 - порт не готов LDB2_0: ; проверка на преждевременную готовность LDA RG_LSR RRC JC LDB2_2 ; ожидание поступления данных PUSH B LXI B,33000; time-out const LDB2_1: DCX B MOV A,B ORA C JZ LDB2_3 LDA RG_LSR RRC JNC LDB2_1 POP B LDB2_2: LDA RG_RWD CMC RET LDB2_3: POP B LDB2_4: STC RET








Ответить с цитированием