Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АВМиС - Готовые шпоры.doc
Скачиваний:
145
Добавлен:
15.09.2014
Размер:
1.75 Mб
Скачать

53 Программирование контроллера пдп(dma).

Общий алгоритм ПДП.

Для осуществления прямого доступа к памяти контроллер должен выполнить ряд последовательных операций:

  • принять запрос (DREQ) от устройства ввода-вывода;

  • сформировать запрос (HRQ) в процессор на захват шины;

  • принять сигнал (HLDA), подтверждающий захват шины;

  • сформировать сигнал (DACK), сообщающий устройству о начале обмена данными;

  • выдать адрес ячейки памяти, предназначенной для обмена;

  • выработать сигналы (MEMR, IOW или MEMW, IOR), обеспечивающие управление обменом;

  • по окончании цикла DMA либо повторить цикл DMA, изменив адрес, либо прекратить цикл.

Программирование контроллера.

Контроллер DMA может программироваться процессором, когда HLDA не активен; это утверждение истинно, даже если активен HRQ. Ответственность процессора заключается в гарантии, что программирование контроллера и активный HLDA взаимоисключающие. Если -CS и HLDA в низком состоянии, контроллер DMA входит в режим программирования. Выбор регистров при программировании осуществляется с помощью адресной шины A0-A3, работающей на вход, а выбор режима записи или считывания - с помощью сигналов -IOW или -IOR. При записи/считывании 16- разрядных регистров адреса или счетчика соответствующего канала необходим дополнительный разряд адреса, в качестве которого используется внутренний триггер FF. По FF=0 происходит обращение к младшему байту, а по FF=1 - к старшему байту регистра адреса или счетчика. Кроме того, для контроллера существуют дополнительные специальные команды, которые могут быть выполнены в режиме программирования и не зависят от набора разрядов на шине данных. К ним относятся следующие команды:

  • сброс триггера FF (Clear First/Last Flip-Flop; 00C, 0D8). Эта команда выполняется перед записью или чтением информации из регистров адреса или счетчика слов контроллера DMA. Триггер FF устанавливается таким образом, чтобы микропроцессор адресовал старший и младший байты в нужной последовательности;

  • очистка (Master Clear; 00D, 0DA). По этой программной команде в контроллере DMA выполняются такие же действия, как и по аппаратному RESET. Очищаются регистры команд, состояния, запросов и триггер FF, а регистр маски устанавливается. После этого контроллер DMA переходит в холостой цикл;

  • cброс регистра маски (Clear Mask Register; 00E, 0DC). По этой команде очищаются разряды масок для всех 4 каналов, что разрешает им принимать запросы DMA. После включения питания предполагается, что все внутренние ячейки, особенно регистр MOD, будут загружены некоторым действительным значением. Это необходимо сделать, даже если некоторые каналы не используются.

Пример программирования подсистемы DMA.

PC AT использует канал 2 контроллера DMA для обмена с гибким диском. Чтобы получить доступ к верному адресу памяти, необходимо загрузить соответствующий регистр страниц. В данном случае для канала 2 это адрес порта 81h.

В приводимом примере ограничимся рассмотрением установки канала 2 для чтения одного сектора (512 байт) гибкого диска, начиная со смещения внутри страницы, содержащегося в BX. Программа имеет следующий вид:

mov al,46h ;Канал 2, передача одного байта, чтение с диска (4Аh для записи на диск)

out dma+0B,al ;Установить байтный режим

out dma+0C,al ;Сбросить триггер FF

mov al,bl ;Загрузить смещение адресов в текущий регистр страниц DMA

out dma+4,al

mov al,bh

out dma+4,al

mov al,0 ;Загрузить счетчик=512

out dma+5,al

mov al,2

out dma+5,al

out dma+0A,al ;Размаскировать канал 2 и читать сектор Примечание: dma - это базовый адрес, равный 00h.