Смекни!
smekni.com

Программирование контроллера приоритетных прерываний (стр. 8 из 8)

Type С (Burst Timing) — сокращенный на 87,5% цикл, ориентированный на пакетный режим передач. Работает со скоростными EISA-адаптерами и при обмене 32-битных устройств с 32-битной памятью позволяет разви­вать скорость обмена до 33 Мбайт/с.

В PCI-системах для обмена с устройствами системной платы (FastATA-2 или E-IDE-порты) возможно использование DMATypeF, при котором между соседними циклами интервал может не превышать 3 тактов шины (360 нс). Для разгрузки системной шины используется дополнительный 4-байтный буфер. Режим F может работать только в режиме одиночной передачи или по запросу и только с инкрементом (увеличением) адреса. На самой шине PCI адаптеры могут использовать режим прямого управления шиной, для чего имеется специальный протокол арбитража, который к контроллерам DMA отношения уже не имеет.

Таблица 1. Стандартные каналы прямого доступа к памяти.

Номер канала DMA# 0 1 2 3 4 5 6 7
Стандартное назначение XT MRFR* - FDD HDD Отсутствуют
AT - SDLC* FDD HDD* Каскад - - -
Разрядность, байт 1 2 с четного адреса
Макс. размер блока 64 Кбайта 128 Кбайт, четный
Граница блоков Кратна 1000h Кратна 2000h
Регистр страниц 4 бит А16-А19 7 бит А17-А23
Адреса регистров:
страниц 087 083 081 082 08F 08В 089 087
нач. адреса (W)текущ. адреса (R) 000 002 004 006 0С0 0С4 0С8 0СЕ
нач. счетчика (W)текущ. счетчика (R) 001 003 005 007 0С2 0С6 0СА 0СЕ

*SDLC-адаптер устанавливается редко.

HDD-контроллер в ATDMA обычно не использует.

Канал 0 в XT используется для регенерации памяти (MRFR).

Канал 4 доступен только в PS/2 МСА.

Программное управление контроллером ПДП

Программное управление контроллером ПДП осуществляется через порты ввода-вывода. Доступ к каждому регистру контроллера может быть осуществлен через свои порты ввода-вывода. Распределение адресов и описание внутренних регистров первого и второго контроллера ПДП приведено в таблице 2.

Таблица 2.Регистры контроллера ПДП 8237А.

8237#1 8237#2 R/W Назначение регистров
008h 0D0h W

Регистр команд (CommandRegister)

Биты: 7=1 – активный уровень DACK – высокий

6=1 – активный уровень DRQ – высокий

5=1 – режим расширенной записи

4=1 – циклический приоритет

3=1 – укороченный цикл обмена

2=1 – запрет работы контроллера

1=1 – фиксация адреса 0 канала

0=1 – передача память-память (в PC не используется)

008h 0D0h R Регистр состояния каналов (StatusRegister) Биты 7..4 запросы каналов 0-3Биты 3..0 завершение цикла каналов 0-3
009h 0D2h W Регистр запросов (RequestRegister) Биты 7..3 – не используются 2=1 – установка/ =0 – сброс бита запроса 1..0 – выбор канала (00=0, 01=1, 10=2, 11=3)
00Ah 0D4h W

Регистрмаски - Single Mask Bit Register Биты 7..3 – не используются 2=1 – установка/ =0 – сброс бита маски

1..0 – выбор канала (00=0, 01=1, 10=2, 11=3)

00Bh 0D6h W Регистр режима работы канала (ModeRegister) Биты 7..6 – режим передачи (00- по запросу, 01- одиночный, 10- блочный, 11- каскадирование) 5=1 – инкремент / =0 – декремент адреса 4=1 – разрешение автоинициализации 3..2 – тип передачи (00- холостой, 01-запись, 01- чтение, 11- не исп.) 1..0 – выбор канала (00=0, 01=1, 10=2, 11=3)
00Ch 0D8h W Сброс триггера младшего/старшего байта – ClearBytePointerFlip/Flop
00Dh 0DAh W Общий сброс 8237А - MasterClear (вывод любого байта в регистр вызывает сброс)
00Eh 0DCh W Общий сброс масок всех каналов – ClearMaskRegister (вывод любого байта в регистр вызывает сброс)
00Fh 0DEh W

Регистр масок всех каналов - AllMaskRegisterBits

Биты 7..4 – не используются

3..0 – маски каналов 0-3 (0-канал разрешен, 1- маскирован)

Регистры управления каналами второго контроллера
- 0C0h, 0C4h, 0C8h, 0CCh W Запись начального адреса в регистр начального адреса (BaseAddressRegister) и регистр текущего адреса канала (CurrentAddressRegister) 4,5,6,7
- 0C0h, 0C4h, 0C8h, 0CCh R Чтение начального адреса из регистра начального адреса канала (CurrentAddressRegister) 4,5,6,7
- 0C2h, 0C6h, 0CAh, 0CEh W Записьврегистрначальногосчетчикациклов (Base Word Count Register) иврегистртекущегосчетчикацикловканала (Current Word Count Register) 4,5,6,7
- 0C2h, 0C6h, 0CAh, 0CEh R Чтение текущего значения из регистра текущего счетчика циклов канала (CurrentWordCountRegister) 4, 5, 6, 7
- 089h, 08Bh, 08Ah, 08Fh W Задание номера страницы для канала 6,5,7,4

Каналы 4 - 7 предназначены для обмена 16-разрядными словами. В связи с этим возникает ряд отличий в работе с этими каналами:

- бит 0 в данных, заносимых в регистры начального и текущего адреса, всегда подразумевается равным 0, поэтому через эти регистры передаются биты 1 - 16 полного 23-разрядного адреса (а не биты 0 - 15 полного 20-разрядного адреса, как это реализовано на ХТ - подобных ПЭВМ). По этой же причине в страничные регистры каналов 4 - 7 заносятся биты 17 - 23 полного адреса, а не биты 16 - 23, как это надо сделать при работе с каналами 0 - 3;

- поскольку передача осуществляется 16-разрядными словами, в регистры текущего и начального счетчика циклов заносится не число байт, а число слов, уменьшенное на единицу;

- размеры страниц памяти, в пределах которых возможен обмен в течение одной передачи, составляют 2000h байтов.

Описание регистров

Регистр начального адреса (Base Address Register). В этом регистре задается стартовый адрес ОЗУ, с которого начинается передача. Регистр содержит 16 разрядов и определяет адрес внутри заданной страницы памяти размером 64К. Задание номера страницы памяти осуществляется через специальные страничные регистры (Page Registers), поддерживаемые внешней логикой.

Каждый канал ПДП имеет свой регистр начального адреса и страничный регистр. Такое деление памяти на страницы не позволяет осуществить обмен с блоком памяти, находящимся на пересечении двух страниц. Каждая страница начинается с сегментного адреса, кратного 1000h (0, 1000h, 2000h, ..., 9000h).

Регистр начального счетчика циклов (Base Word Count Register)

В этом регистре задается начальное число циклов передачи для программируемого канала. Фактическое число передаваемых во время работы ПДП элементов данных на единицу превышает заданное число циклов, т. е. если Вы задаете 100 циклов передачи, а размер элемента будет равен 1 байту, то за сеанс обмена будет передан 101 байт информации.

Регистртекущегоадреса (Current Address Register)

Начальное значение заносится в этот регистр одновременно с регистром начального адреса. В дальнейшем в ходе передачи значение текущего адреса автоматически увеличивается или уменьшается (конкретное направление изменения задается при программировании в регистре режима). Если разрешена автоинициализация, то после окончания передачи в регистр автоматически устанавливается значение из регистра начального адреса.

Регистртекущегосчетчикациклов(Current Word Count Register)

Регистр содержит текущее значение счетчика циклов (число оставшихся циклов передачи). Отображаемое в нем число циклов всегда на единицу меньше числа еще не переданных элементов данных, так как изменение значения в этом регистре производится в конце цикла передачи, уже после фактической передачи элемента данных, а конец передачи фиксируется в момент переполнения счетчика (изменение его значения с 0 на 0FFFFh).

Каждый из четырех каналов ПДП имеет свой набор регистров, описанных выше. Кроме того, имеется следующий набор регистров, общих для всех каналов.

Регистр режима (Mode Register)

Данный регистр задает режимы работы своего канала контроллера.

Регистр команд (CommandRegister).

Этот 8-битный регистр управляет работой контроллера. Он программируется, когда контроллер находится в состоянии программирования и очищается командами сброса «Reset» и «Master Clear».

Регистр состояния (Status Register)

Регистр отражает текущее состояние запросов и передач по всем четырем каналам. Биты 0 - 3 устанавливаются в единицу после завершения передачи по каналам 0 - 3 (бит 0 - канал 0, бит 1 - канал 1 и т.д.), если не задан режим автоинициализации. Эти биты очищаются после команды сброса контроллера и после каждой операции считывания состояния из регистра состояния. Биты 4 – 7 указывают по какому из каналов 0 - 3 активен в текущий момент сигнал запроса на ПДП.

Регистр масок (MaskRegister)

Каждый бит этого 4-битового регистра маскирует/демаскирует свой канал ПДП, при этом значение 1 маскирует канал, значение 0 демаскирует канал и разрешает прием сигнала запроса по этому каналу.

Регистр запросов (RequestRegister)

Сигнал запроса на ПДП (DREQ) может быть издан как обслуживаемым устройством, так и программно. Для программного издания сигнала запроса по одному из 4-х каналов ПДП необходимо установить соответствующий бит в 4-разрядном регистре запросов. Запрос на ПДП может быть отменен записью нулевого значения в соответствующий бит регистра. Бит запроса очищается автоматически при окончании передачи по данному каналу. Все биты запросов очищаются при сбросе контроллера. Для того, чтобы воспринимать программные запросы на ПДП, канал должен находится в режиме блоковой передачи.

Литература

1. Уокерли Дж. Архитектура и программирование микроЭВМ: в 2-х кн./ пер. с англ. – М.: Мир, 1984.

2. Ассемблер. Юров. В. – СПб.: Питер, 2001. – 624 с.:ил.

3. Ассемблер: практикум. Юров. В. - СПб.: Питер, 2001. – 400 с.:ил.