Assembler - язык неограниченных возможностей


Контроллер DMA - часть 3


    бит 2: 1/0 — установка/сброс запроса на DMA

    биты 1 – 0: номер канала (00, 01, 10, 11 = 0/4, 1/5, 2/6, 3/7)

порт 0Ah/D4h для записи: регистр маски канала DMA

    бит 2: 1/0 — установка/сброс маскирующего бита

    биты 1 – 0: номер канала (00, 01, 10, 11 = 0/4, 1/5, 2/6, 3/7)

порт 0Bh/D6h для записи: регистр режима DMA

    биты 7 – 6:

    00 — передача по запросу

    01 — одиночная передача (используется для звука)

    10 — блочная передача (используется для дисков)

    11 — канал занят для каскадирования

бит 5: 1/0 — адреса уменьшаются/увеличиваются

бит 4: режим автоинициализации

биты 3 – 2:

    00 — проверка

    01 — запись

    10 — чтение

биты 1 – 0: номер канала (00, 01, 10, 11 = 0/4, 1/5, 2/6, 3/7)

порт 0Ch/D8h для записи: сброс переключателя младший/старший байт

    Для чтения/записи 16-битных значений из/в 8-битные порты 00h – 08h. Следующий байт, переданный в эти порты, будет считаться младшим, следующий за ним — старшим.

порт 0Dh/DAh для записи: сброс контроллера DMA

    Любая запись сюда приводит к полному сбросу DMA-контроллера, так что его надо инициализировать заново.

порт 0Dh/DAh для чтения: последний переданный байт/слово.

порт 0Eh/DCh для записи: любая запись снимает маскирующие биты со всех каналов

порт 0Fh/DEh для записи: регистр маски всех каналов:

    биты 3 – 0: маскирующие биты каналов 3/7, 2/6, 1/5, 0/4

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




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