Меню сайта

Урок 144. Адаптер синхронных коммуникаций

Адаптер асинхронных коммуникаций даетвозможность связываться с
— — — IBM PC по последовательному интерфейсу.Этот адаптер дает
— — — возможность связываться с другими ЭВМ,службами баз данных, а также
— — — с другими источниками информации. Мы небудем обсуждать принципы
— — — работы этого канала, а поговорим о методахпрограммирования этого
— — — конкретного адаптера IBM PC.

— — — — — Интегральная микросхема коммуникацийпроделывает всю работу по
— — — приему и передаче символов по асинхроннойлинии. Элемент
— — — асинхронной связи ACE (AsynchronousCommunication Element) 8250
— — — можно запрограммировать для управлениясамыми различными аспектами
— — — связи. При инициализации элемента ACE подпограммным контролем
— — — оказываются размер символа, частотапередачи, символы останова и
— — — биты четности. Адаптер также позволяетпроверять и задавать
— — — стандартные сигналы управления модемом(модулятора —
— — — демодулятора).

— — — — — С помощью элемента ACE символ передаетсяпросто посредством его
— — — записи в регистр передачи. Микросхемадалее выполняет все, что
— — — соответствует кодам, которые вы передалией при инициализации.
— — — Чтобы принять символ, вы просто читаетеего из буфера приема.
— — — Существует регистр состояния, называемыйрегистром состояния линии,
— — — который показывает, когда буфер передачипуст и может принять
— — — другой символ. Другой бит регистрасостояния сообщает, когда
— — — элемент ACE уже принял символ из другойсистемы.

— — — — — В техническом описании приводятся и другиерегистры, входящие в
— — — элемент ACE 8250. Эти регистры даютвозможность управления модемом
— — — и определения его состояния. Вы такжеможете разрешить выработку
— — — прерывания при возникновении в элементеACE различных условий. Это
— — — позволяет вашей программе быстрореагировать на любую смену внешних
— — — условий.east-font-family:»MS Mincho»‘&gt-
Программана Фиг. 8.16 демонстрирует основные механизмы,
— — — необходимые для инициирования элементаACE, посылки и приема
— — — символа. Базовый адрес ввода-вывода платыадаптера равен 3F8H, так
— — — что регистры элемента ACE расположены поадресам от 3F8H до 3FEH.
— — — Можно также модифицировать адаптерасинхронной связи фирмы IBM так,
— — — чтобы его регистры соответствовали адресамввода-вывода от 2F8H до
— — — 2FEH. С помощью такой модификации можноустановить в персональную
— — — ЭВМ второй адаптер и связаться с двумяразличными внешними
— — — устройствами. Фактически, можно подключитьпечатающее устройство к
— — — системе с помощью последовательного, а непараллельного сопряжения.
— — — В этом случае нужны два адаптера: один изних работает с печатающим
— — — устройством, а другой обслуживает внешниесвязи.

— — — — — Один из портов ввода-вывода элемента ACEвыполняет несколько
— — — функций. Оба буфера, передачи и приема,находятся по адресу 3F8H,
— — — так что когда что-либо записывается поэтому адресу, информация
— — — попадает в буфер передачи, но при чтениипо этому адресу, вы
— — — получаете последний символ, принятыймикросхемой ACE. Этот же порт
— — — ввода-вывода выполняет и третью функцию.Значение делителя,
— — — определяющее скорость работы адаптера,записывается в этот порт
— — — ввода-вывода. Микросхема ACE делит входнуючастоту на число,
— — — помещенное в регистр делителя, позволяятем самым выбрать скорость
— — — от 50 до 9600 бод. Режим использованияпорта 3F8H задает один из
— — — битов управляющего регистра.

— — — — — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — — — — 1/1/8004:05:45
— — — — — — — — — — — -Фиг. 8.16 Управление последовательным каналом — — — — — — — — — — -Page — — — — 1-1


— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -PAGE ,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -TITLE — — — — — Фиг. 8.16 Управление последовательным каналом

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — -&n
bsp- — — — — — STACK — — — — — SEGMENT STACK
— — — — — — — — — — — -0000 — — — — — 0040[ — — — — — — — — — — — — — — — — — — DW — — 64 DUP (?)
— — — — — — — — — — — — — — — — — — — — ????
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ]
— — — — — — — — — — — -0080 — — — — — — — — — — — — — — — — — — — — — — — STACK — — — — — ENDS

— — — — — — — — — — — -= 03F8 — — — — — — — — — — — — — — — SERIAL — EQU — — — — — 03F8H

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — — — — — — CODE SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -ASSUME -CS:CODE
— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — — — — — — ASYNC — — — — — PROC FAR
— — — — — — — — — — — -0000 — — — — — 1E — — — — — — — — — — — — — — — — — — — — — PUSH DS — — — — — — — — — Адрес возврата в ДОС
— — — — — — — — — — — -0001 — — — — — 2B C0 — — — — — — — — — — — — — — — — — — SUB — AX,AX
— — — — — — — — — — — -0003 — — — — — 50 — — — — — — — — — — — — — — — — — — — — — PUSH AX
— — — — — — — — — — — -0004 — — — — — BA 03FB — — — — — — — — — — — — — — — -MOV — DX,SERIAL+3 — — — — — — Управляющий регистр
— — — — — — — — — — — -0007 — — — — — B0 80 — — — — — — — — — — — — — — — — — — MOV — AL,80H
— — — — — — — — — — — -0009 — — — — — EE — — — — — — — — — — — — — — — — — — — — — OUT — DX,AL — — — — — — — — — — — — Настройка на установкускорости
— — — — — — — — — — — -000A — — — — — B8 0180 — — — — — — — — — — — — — — — -MOV — AX,384 — — — — Делитель частоты для скорости 300 бод
— — — — — — — — — — — -000D — — — — — BA 03F8 — — — — — — — — — — — — — — — -MOV — DX,SERIAL
— — — — — — — — — — — -0010 — — — — — EE — — — — — — — — — — — — — — — — — — — — — OUT — DX,AL — — — — — — — — — — — — Младшая часть делителя
— — — — — — — — — — — -0011 — — — — — 8A C4 — — — — — — — — — — — — — — — — — — MOV — AL,AH

— — — — — — — — — — — — — — — — — Фиг. 8.16 Управлениепоследовательным каналом (начало)
— — — — — — — — — — — -0013 — — — — — 42 — — — — — — — — — — — — — — — — — — — — — INC — DX
— — — — — — — — — — — -0014 — — — — — EE — — — — — — — — — — — — — — — — — — — — — OUT — DX,AL — — — — — — — — — — — — Старшая часть делителя
— — — — — — — — — — — -0015 — — — — — BA 03FB — — — — — — — — — — — — — — — -MOV — DX,SERIAL+3 — — — — — — Управляющий регистр
— — — — — — — — — — — -0018 — — — — — B0 03 — — — — — — — — — — — — — — — — — — MOV — AL,00000011b — — — — — Режим безпроверки на четность,8 бит
— — — — — — — — — — — -001A — — — — — EE — — — — — — — — — — — — — — — — — — — — — OUT — DX,AL

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ——- -Вывод символа в канал

— — — — — — — — — — — -001B — — — — — BA 03FD — — — — — — — — — — — — — — — -MOV — DX,SERIAL+5 — — — — — — Регистр состояния канала
— — — — — — — — — — — -001E — — — — — — — — — — — — — — — — — — — — — — — SEND:
— — — — — — — — — — — -001E — — — — — EC — — — — — — — — — — — — — — — — — — — — — IN — — AL,DX
— — — — — — — — — — — -001F — — — — — A8 20 — — — — — — — — — — — — — — — — — — TEST AL,20H
— — — — — — — — — — — 0021 — — — — — 74FB — — — — — — — — — — — — — — — — — — JZ -&n
bsp- SEND
— — — — — — — — — — — -0023 — — — — — B0 41 — — — — — — — — — — — — — — — — — — MOV — AL,’A’
— — — — — — — — — — — -0025 — — — — — BA 03F8 — — — — — — — — — — — — — — — -MOV — DX,SERIAL
— — — — — — — — — — — -0028 — — — — — EE — — — — — — — — — — — — — — — — — — — — — OUT — DX,AL

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ——- -Прием символа

— — — — — — — — — — — -0029 — — — — — BA 03FD — — — — — — — — — — — — — — — -MOV — DX,SERIAL+5 — — — — — — Регистр состояния канала
— — — — — — — — — — — -002C — — — — — — — — — — — — — — — — — — — — — — — RECV:
— — — — — — — — — — — -002C — — — — — EC — — — — — — — — — — — — — — — — — — — — — IN — — AL,DX
— — — — — — — — — — — -002D — — — — — A8 02 — — — — — — — — — — — — — — — — — — TEST AL,2
— — — — — — — — — — — -002F — — — — — 74 FB — — — — — — — — — — — — — — — — — — JZ — — RECV
— — — — — — — — — — — -0031 — — — — — BA 03F8 — — — — — — — — — — — — — — — -MOV — DX,SERIAL
— — — — — — — — — — — -0034 — — — — — EC — — — — — — — — — — — — — — — — — — — — — IN — — AL,DX

— — — — — — — — — — — -0035 — — — — — CB — — — — — — — — — — — — — — — — — — — — — RET
— — — — — — — — — — — -0036 — — — — — — — — — — — — — — — — — — — — — — — ASYNC — — — — — ENDP
— — — — — — — — — — — -0036 — — — — — — — — — — — — — — — — — — — — — — — CODE ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -END — ASYNC

— — — — — Фиг.8.16 Установка, пересылка и получениеданных по
— — — — — — — — — — — — — — — — — — — — асинхронному каналу (продолжение)

— — — — — Первая часть программы примераинициализирует микросхему ACE
— — — 8250. Первым делом программа настраиваетскорость работы адаптера.
— — — Значение делителя, равное 384,устанавливает скорость 300 бод.
— — — Обратите внимание, что перед записьюзначения делителя программа
— — — заносит 1 в бит 7 управляющего регистра поадресу 3FBH.
— — — Окончательный вывод в порт 3FBH задаетхарактеристики линии. В этом

— — — — — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — — — — 1/1/8004:05:50
— — — — — — — — — — — -Фиг. 8.17 Обработка прерываний от последовательного канала — Page — — — -1-1


— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -PAGE ,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -TITLE — — — — — Фиг. 8.17 Обработка прерываний от последовательного канала

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — — — — — — ABS0 SEGMENT AT 0
— — — — — — — — — — — -002C — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ORG — 0BH*4
— — — — — — — — — — — -002C — — — — — — — — — — — — — — — — — — — — — — — ASYNC_INTERRUPT LABEL — WORD
— — — — — — — — — — — -002C — — — — — — — — — — — — — — — — — — — — — — — ABS0 ENDS

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — — — — — — STACK — — — — — SEGMENT STACK

— — — — — — — — — — — — — — — — Фиг. 8.17 Обработка прерываний от последовательного канала(начало)
— — — — — — — — — — — -0000 — — — — — 0040[ — — — — — — — — — — — — — — — — — — DW — — 64 DUP (?)
— — — — — — — — — — — — — — — — — — — — ????
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — &n
bsp- ]
— — — — — — — — — — — -0080 — — — — — — — — — — — — — — — — — — — — — — — STACK — — — — — ENDS

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — — — — — — CODE SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -ASSUME -CS:CODE
— — — — — — — — — — — -0000 — — — — — 0049 R — — — — — — — — — — — — — — — — — BUFFER_POINTER — DW — — — — BUFFER

— — — — — — — — — — — -0002 — — — — — — — — — — — — — — — — — — — — — — — SET_INTERRUPT — — — PROC FAR
— — — — — — — — — — — -0002 — — — — — 2B C0 — — — — — — — — — — — — — — — — — — SUB — AX,AX
— — — — — — — — — — — -0004 — — — — — 8E D8 — — — — — — — — — — — — — — — — — — MOV — DS,AX
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -ASSUME -DS:ABS0 — — Адресация посегментному регистру DS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — вобласть векторов прерываний
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ——- -Установка прерывания
— — — — — — — — — — — -0006 — — — — — C7 06 002C R 0024 R — — — — — — — — — — MOV — ASYNC_INTERRUPT,offset INT_HANDLER
— — — — — — — — — — — -000C — — — — — 8C 0E 002C R — — — — — — — — — — — — — — — — — MOV — ASYNC_INTERRUPT,CS — — — — -Занесение вектора прерывания

— — — — — — — — — — — -0010 — — — — — BA 03F9 — — — — — — — — — — — — — — — -MOV — DX,03F9H — — — Регистр разрешения прерываний
— — — — — — — — — — — -0013 — — — — — B0 04 — — — — — — — — — — — — — — — — — — MOV — AL,04H — — — — Прерывание поприему из канала
— — — — — — — — — — — -0015 — — — — — EE — — — — — — — — — — — — — — — — — — — — — OUT — DX,AL

— — — — — — — — — — — -0016 — — — — — E4 21 — — — — — — — — — — — — — — — — — — IN — — AL,21H — — — — Регистр маскипрерываний 8259
— — — — — — — — — — — -0018 — — — — — 24 F7 — — — — — — — — — — — — — — — — — — AND — AL,0F7H — — — — Занесение 0 вразряд 3
— — — — — — — — — — — -001A — — — — — E6 21 — — — — — — — — — — — — — — — — — — OUT — 21H,AL — — — — Прерывание немаскируется

— — — — — — — — — — — -001C — — — — — BA 03FC — — — — — — — — — — — — — — — -MOV — DX,3FCH — — — — Регистр управления модемом
— — — — — — — — — — — -001F — — — — — B0 08 — — — — — — — — — — — — — — — — — — MOV — AL,08H — — — — разряд OUT2
— — — — — — — — — — — -0021 — — — — — EE — — — — — — — — — — — — — — — — — — — — — OUT — DX,AL

— — — — — — — — — — — -0022 — — — — — EB FE — — — — — — — — — — — — HERE: — — — — — JMP — HERE — — — — — — — Конец задания режима работыпоследователь-
— — — — — — — — — — — -0024 — — — — — — — — — — — — — — — — — — — — — — — SET_INTERRUPT — — — ENDP — — — — — — — -ного канала,ожидание прерывания

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ——- -Программа обработки прерываний от последовательного канала по приему

— — — — — — — — — — — -0024 — — — — — — — — — — — — — — — — — — — — — — — INT_HANDLER — — — — — PROC FAR
— — — — — — — — — — — -0024 — — — — — 50 — — — — — — — — — — — — — — — — — — — — — PUSH AX — — — — — — — — — Сохрание используемых регистров
— — — — — — — — — — — -0025 — — — — — 53 — — — — — — — — — — — — — — — — — — — — — PUSH BX
— — — — — — -&nb
sp- — — — -0026 — — — — — 52 — — — — — — — — — — — — — — — — — — — — — PUSH DX
— — — — — — — — — — — -0027 — — — — — BA 03FD — — — — — — — — — — — — — — — -MOV — DX,3FDH — — — — Регистр состояния канала
— — — — — — — — — — — -002A — — — — — EC — — — — — — — — — — — — — — — — — — — — — IN — — AL,DX
— — — — — — — — — — — -002B — — — — — A8 01 — — — — — — — — — — — — — — — — — — TEST AL,01H — — — — Был ли полученсимвол?
— — — — — — — — — — — -002D — — — — — 74 12 — — — — — — — — — — — — — — — — — — JZ — — INT_RETURN — Нет,возврат изпрерывания
— — — — — — — — — — — -002F — — — — — BA 03F8 — — — — — — — — — — — — — — — -MOV — DX,3F8H — — — — Регистр приема данных
— — — — — — — — — — — -0032 — — — — — EC — — — — — — — — — — — — — — — — — — — — — IN — — AL,DX — — — — — — — — — — — — Выбор символа из канала
— — — — — — — — — — — -0033 — — — — — 2E: 8B 1E 0000 R — — — — — — — MOV — BX,BUFFER_POINTER
— — — — — — — — — — — -0038 — — — — — 2E: 88 07 — — — — — — — — — — — — — — MOV — CS:[BX],AL — Сохранение вбуфере
— — — — — — — — — — — -003B — — — — — 43 — — — — — — — — — — — — — — — — — — — — — INC — BX
— — — — — — — — — — — -003C — — — — — 2E: 89 1E 0000 R — — — — — — — MOV — BUFFER_POINTER,BX
— — — — — — — — — — — -0041 — — — — — — — — — — — — — — — — — — — — — — — INT_RETURN:
— — — — — — — — — — — -0041 — — — — — 5A — — — — — — — — — — — — — — — — — — — — — POP — DX — — — — — — — — — Восстановление регистров
— — — — — — — — — — — -0042 — — — — — 5B — — — — — — — — — — — — — — — — — — — — — POP — BX
— — — — — — — — — — — -0043 — — — — — B0 20 — — — — — — — — — — — — — — — — — — MOV — AL,20H — — — — Сбросконтроллера прерываний

— — — — — — — — — — — -Фиг. 8.17 Обработка прерываний от последовательного канала — (продолжение)
— — — — — — — — — — — -0045 — — — — — E6 20 — — — — — — — — — — — — — — — — — — OUT — 20H,AL
— — — — — — — — — — — -0047 — — — — — 58 — — — — — — — — — — — — — — — — — — — — — POP — AX
— — — — — — — — — — — -0048 — — — — — CF — — — — — — — — — — — — — — — — — — — — — IRET — — — — — — — — — — — — — Возврат из прерывания
— — — — — — — — — — — -0049 — — — — — — — — — — — — — — — — — — — — — — — INT_HANDLER — — — — — ENDP
— — — — — — — — — — — -0049 — — — — — 0080[ — — — — — — — — — — — — BUFFER — DB 128 DUP (?)
— — — — — — — — — — — — — — — — — — — — — ??
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ]


— — — — — — — — — — — -00C9 — — — — — — — — — — — — — — — — — — — — — — — CODE ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -END — SET_INTERRUPT

— — — — — — — — — — — Продолжение в комментариях…

Категория: Программирование на Ассемблере | Дата: 07.03.13

Меню раздела
Блок