Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет мой.doc
Скачиваний:
15
Добавлен:
22.12.2018
Размер:
1.6 Mб
Скачать

Инициализация кпдп.

Перед началом работы КПДП его необходимо инициализировать путем выполнения следующих действий:

— настройки выбранного канала путем записи в регистр режима (РР) необходимой информации:

— вывода адреса страницы в соответствующий данному каналу регистр PC;

— записи начального адреса оперативной памяти в требуемый регистр текущего адреса (РТА) канала К:

— передачи кода числа циклов в регистр текущего числа циклов (РТЧЦ) капала К:

— сброса триггера Т и разрешения ПДП путём программного сброса триггера Т3 ПДП.

Запись в регистр РР выполняется по команде OUT с адресом 0Bh, причем в самом посылаемом байте данных биты D1 и D0 определяют номер канала (00-К01.,01- К1,. 10- К2,. 11- К3'), для которого устанавливается соответствующий ре-жим. Старшая часть адреса SA9-SA4 дешифруется внешней схемой и с учетом управляющего сигнала записи ввода/вывода в КПДП поступает сигнал -ЗпПДП, указывающий на выбор ПДП и операцию записи данных. Младшая часть адреса SA3-SA0 направляется в КПДП для выбора соответствующего порта. В рассматриваемом случае SA3SA2SA1SA0=1011. Этот код с учетом низкого активного уровня сигнала -ЗпППД поступает через регистр БФ1 на адресные входы ПЗУ (Шиф) и считывает содержимое соответствующей ячейки памяти, в которой два бита хранят номер регистра (HP) режима, поступающий на дешифратор ДшУС. На выходе ДшУС формируется сигнал -ЗпРР. который записывает байт данных, поступивший через приемопередатчик ПП на входы блока РР3-РР0, в соответствующий РР1, причем выбор индекса регистра режима осуществляют биты данных D1 и D0, определяющие номер (индекс) канала.

Запись в регистр PC1 производится по команде OUT с использованием одного из следующих адресов: 083h запись адреса страницы К0; 082h - К1; 081 h - К2; 080h - К3, при этом по линиям данных SD3-SD0 передаются соответствующие биты адреса: SD3-SA19, SD2-SA18, SD1-SA17, SD0-SA16.

Выбор нужного PC1 (одного из четырех) осуществляется битами адреса SA1 и SA0. а момент записи данных определяется внешним сигналом записи страницы (-ЗпСтр), при формировании которого учитывается результат дешифрации адреса PC, и наличие интерфейсного сигнала -IOW.

Запись в 16-битный PTAN производится командой OUT с употреблением следующих адресов: 000h - адрес РТА0, 002h-PTAl, 004-PTA2, 006-РТАЗ. Так как входная шина КПДП 8-битная (SD7-SD0), то вывод 16-битного кода начального адреса выполняется двумя командами OUT, причем первая команда передает младший байт адреса (А7-А0), а вторая команда - старший байт (А15-А8).

Более подробно выполнение команды OUT в этом случае показывает следующая схема последовательности действий, представленная на рис. 21.

Рис. 21. Схема последовательности действий КПДП при записи байта адреса в РТА

Из схемы последовательности действий видно, что входной сигнал -ЗпПДП и младшие биты адреса SA3-SA0 через регистр БР1 поступают на адресные входы шифратора (Шиф), выполненного на базе ПЗУ. На входах Шиф. формируется 3-битный код режима (100- запись в РТА) и сигнал включения (-Вкл), которые соответственно поступают на входы ПМ (ПЗУ) и триггер ТВкл. Триггер ТВкл сбрасывается в нулевое состояние и разрешает работу дешифратора ДшК, на входы которого поступает 3-битный код команды. К этому моменту времени сигналом ОЕПП, открыт приемопередатчик ПП1 и байт адреса с шины SD7-SD0 поступает по внутренней шине BD7-BD0 на входы блока PTA3-PTA0 и записывается в требуемом РТА1 (младшую часть битов. А7-А0) сигналом -Зп мл. байта. Кроме того, выполняется установка в единичное состояние триггера Т, для приема следующего байта адреса з старшую часть битов PTA1 (А15-А8).

Аналогичным образом осуществляется запись в регистр текущего числа циклов РТЧЦ путем выполнения двух команд OUT для записи вначале младшего байта, а потом старшего байта. При этом применяются следующие адреса: 001 h - для записи в РТЧЦ канала 0, 003h - в РТЧЦ канала 1, 005h - в РТЧЦ канала 2 и 007h - в РТЧЦ канала 3.

Триггер ТЗ ПДП устанавливается в режим запрета ПДП но сигналу RESET. Разрешение ПДП осуществляется командой OUT с адресом 008h. причем бит SD2 должен быть равен 0.

Сброс триггера Т выполняется без передачи бита данных командой OUT с адресом 00Ch. Доступ к регистрам контроллера, выполняемые операции и коды режима представлены в табл. 5.

Циклы ПДП.

Рассмотрим цикл ПДП в режиме чтения (чтение ВУ и запись в память). После того, как выполнена инициализация КПДП и программно сброшен триггер ТЗ ПДП, указывающий на разрешение ПДП сигналы запроса ПДП DRQ3 - DRQ0 (один или несколько) воспринимаются Шиф. причем наивысшим приоритетом обладает сигнал DRQ0,. а низшим приоритетом - сигнал DRQ3. Таким образом, в циклах ПДП Шиф реализует функцию фиксированного приоритета, когда предпочтение отдается сигналу запроса ПДП с меньшим номером. С появлением одного или нескольких сигналов DRQ на входе Шиф формируется сигнал - Вкл. который сбрасывает триггер ТВкл в нулевое состояние, тем самым блокируется прием запросов DRQ в БР1 до конца выполнения режима, сбрасывается счетчик микрокоманд (СчМ) и разрешается работа дешифратора ДшК. Кроме того, Шиф выдает 2-битный код текущего номера канала (НКi). поступающий в блок РР3-РР0 блок PC3-PC0, блок РТА3-РТА0, блок РТЧ3,- РТЧЦ0 и формирователь ФDАСК. Помимо этого Шиф формирует 3-битный код режима (000 - цикл ПДП), который подается на соответствующие адресные входы памяти микрокоманд (ПМ). В свою очередь, ПМ через регистр РМ выдает сигнал запроса шины (HRQ). После этого с помощью счетчика СчМ, который последовательно считывает содержимое ПМ (ПЗУ), дешифратор ДшК последовательно формирует сигналы - Чт младшего байта и - Чт старшего байта, по которым начальный адрес памяти из РТА через счетчик Сч записывается в регистр РА.

Таблица 5.

Затем системный процессор подтверждает захват шины сигналом -HLDA. который запоминается в регистре БР, по синхросигналу SCLK. и подается на вход ПМ, генерирующей через регистр РМ сигнал -AEN.

Сигнал -AEN и -HLDA участвуют в формировании сигнала разрешения выходных сигналов (-РВ), позволяющего установить биты адреса страницы (А19 - А15) из PC, и биты адреса А15-А0 из регистра РА на шину адреса, сформировать сигнал - DACK па выходе ФDACK вслед за установленным адресом.

По сигналу -AEN формирователь ФУС с учетом информации в выбранном регистре РР выдает сигнал -IOR (чтение ввода - вывода) и затем сигнал записи в память -MEMW.

Цикл ПДП завершается после поступления из памяти сигнала готовности I/O CH RDY, по которому ПМ снимает -AEN, затем сбрасывает адрес, уп­равляющие сигналы -IOR, -MEMW и сигнал -DACK.

После этого содержимое счетчика (Сч) увеличивается (уменьшается) на 1 и по сигналу - Зп слова дешифратора команд (ДшК) адрес из Сч переписыва­ется в РТА,. Кроме того, значение РТЧЦ заносится в Сч. где оно уменьшается на 1 и снова записывается в РТЧЦ.

Затем дешифратор ДшК формирует сигнал «-конец», устанавливающий триггер ТВкл в единичное состояние, и становится возможным запись вход­ных сигналов в регистр БР.. Описанные действия повторяются до тех пор. пока содержимое Сч не станет равным FFFFh. при этом на выходе Сч выра­батывается сигнал окончания счета (Т/С).

Логика действия КПДП иллюстрируется блок-схемой, представленной на рис. 22.

Рис. 22 Блок-схема функционирования КПДП

Листинг программы

.MODEL small

.STACK 100h

.DATA

CR DB 13,10,0

Message DB "Программа тестирования КПДП",13,10

db "Канал1 DMA, передача 128 байтов данных."

db "Режим блочной передачи (в состоянии контроля).",13,10

db "Для продолжения нажмите любую клавишу…",0

MessOk DB 13,10,"Проверка выполнена .", 0

MessStateReg DB 13,10," Регистр состояния:",0

MessDataReg DB 13,10," Регистр данных :",0

MessCycleReg DB 13,10," Регистр текущего числа циклов:",0

Tables DB "0123456789ABCDEF"

.Code

bxod:

mov ax,@data

mov ds,ax

mov si,Offset Message

Call WriteStr

mov ah, 0 ; чтение символа с клавиатуры

int 16h

out 0dh,al ; Программный сброс контроллера 

mov si,Offset MessStateReg

Call WriteStr

in al,08h ; Чтение регистра состояния

Call WriteChar

out 0ch,al ; Сброс триггера первый/последний

mov al,0h

out 02h,al ; Устанавливаем адрес

mov al,0h

out 02h,al

mov al,81h ; Направляем код : Блочная передача +

; контроль канала1 в регистр режима

out 0bh,al

out 0ch,al ; Сброс триггера первый/последний

mov al,7fh ; Помещаем код числа циклов в порт 03h

out 3h,al

mov al,0h

out 3h,al

mov al,0h

out 08h,al ; Запись командного слова в регистр

mov al,05h

out 09h,al ; Устанавливаем программный запрос

in al,03 ; Чтение текущего числа циклов

mov cl,al

in al,03

mov ch,al

in al,0dh

mov dh,al ; Регистр данных

in al,08h

mov dl,al ; Чтение регистра состояния

mov al,1 ; Снятие запроса ПДП канала1

out 09h,al ‚

mov si,Offset MessOk

Call WriteStr

mov si,Offset MessStateReg

Call WriteStr

mov al,dl

Call WriteChar

mov si,Offset MessdataReg

Call WriteStr

mov al,dh

Call WriteChar

mov si,Offset MessCycleReg

Call WriteStr

mov al,cl

Call WriteChar

mov ah,4ch

int 21h

WRITECHAR PROC ;AL = char ; Начало процедуры ввода символа

xor ah,ah

push ax

shr al,4

mov bx,ax

mov al,Tables[bx]

mov ah,0eh

mov bh,0

int 10h

pop ax

and al,00001111b

mov bx,ax

mov al,Tables[bx]

mov ah,0eh

mov bh,0

int 10h

mov ax,0E20h

xor bx,bx

int 10h

ret

WRITECHAR ENDP

WriteStr PROC ; si -addr str ; Начало процедуры вывода

mov ah,0Eh

UP:

lodsb

cmp AL, 0

jz DOWN

int 10h

jmp UP

DOWN:

ret

WriteStr ENDP

END bxod