9. DMA КОНТРОЛЕР

Директен достъп до паметта (DMA) се използва за извършване на операции за пренос на данни директно между RAM и I/O устройства. Обикновено това са устройства като NGMD, NMD, KNML касетни устройства с магнитна лента (стримери).

Когато се използва DMA, процесорът не участва в I / O операции, самият контролер за директен достъп генерира всички сигнали, необходими за обмен на данни с устройството. Скоростта на такъв директен обмен е много по-висока, отколкото при традиционния вход / изход с помощта на централния процесор и INP, OUT команди.

Вече говорихме малко за DMA контролера в третата книга на първия том, в раздела за работа с флопидискови устройства на ниво I / O команда. Предоставена е програма, която използва DMA за четене на секторите на дискета. В този раздел ще разгледаме по-отблизо портовете на DMA контролера.

Разпространени са два типа DMA контролери - контролери за IBM PC/XT и контролери за IBM AT. Първо, ще говорим за първия тип контролери, след това ще се занимаваме с DMA контролера на компютъра IBM AT.

Контролерът за директен достъп за IBM PC/XT е базиран на чипа Intel 8237A и съдържа четири канала. Тези канали се използват, както следва:

0актуализиране на съдържанието на динамичната памет на компютъра, този канал има най-висок приоритет;
1не се използва;
2адаптер за флопидисково устройство (флопидисково устройство);
3Адаптер за магнитно дисково устройство (HDD) - Този канал е с най-нисък приоритет.

9.1.1. DMA канални регистри

Портове 00h - 07h

Този порт се използва при запис като контролен регистър и когаточете като регистър на състоянието.

Формат на контролния регистър:

Обикновено този регистър се инициализира от BIOS по време на системното тестване и няма нужда да се променя режимът на DMA контролера след това. Грешки при инициализирането на този порт могат да доведат до блокиране на системата.

При четене от порт 08h програмата получава думата за състоянието на DMA контролера:

Заявка за регистрация. Проектиран да организира софтуерна (а не хардуерна) заявка за DMA. За да използвате програмна заявка, каналът трябва да бъде програмиран в режим на блоково предаване.

Регистър на маските. Използва се за маскиране на заявки за директен достъп за отделни канали:

Режим регистър. Служи за определяне на режимите на работа на каналите на DMA контролера:

Нулирайте тригерните байтове. За зареждане на вътрешните 16-битови регистри на контролера се използва серийният изход на ниските, след това на старшите байтове на думата. След като нулирате байтовия тригер, можете да започнете да зареждате 16-битови регистри.

Записването в този порт води до нулиране на контролера. За по-нататъшна употреба контролерът трябва да бъде повторно инициализиран.

Нулирайте регистъра на маската. След записване на каквато и да е стойност в този регистър се активират и четирите канала за директен достъп.

Маскиране/демаскиране на канала. Този порт може да маскира или демаскира няколко канала едновременно:

Портове 81h-8Fh

Това са портовете на регистъра на страницата.

81чРегистър на страницата на канал 2
82чРегистър на страницата на канал 3
83чКанал 1 страница регистър

9.1.2. Инициализация на DMA канал

Веднъж активиран, каналът започва да предава данни. След края на прехвърлянето на данниустройството обикновено генерира прекъсване, което служи като знак за край на трансфера на данни.

DMA контролерът на IBM AT компютъра е обратно съвместим с IBM PC/XT контролера. Състои се от два каскадно разположени чипа Intel 8237A-5. Вторият контролер обслужва DMA канали с номера 4-7.

Ето присвояването на DMA канали за IBM AT:

0запазено;
1Управление на синхронна връзка за данни SDLC (Synchronous Data Link Control);
2адаптер за флопидисково устройство (флопидисково устройство);
3адаптер за магнитно дисково устройство (HDD);
4използва се за каскадно свързване към първия DMA контролер;
5-6запазено.

Размерът на страницата е 128 килобайта, така че когато прехвърляте данни чрез DMA, границата от 128 килобайта не трябва да се преминава.

81чРегистър на страницата на канал 2
82чРегистър на страницата на канал 3
83чКанал 1 страница регистър
87чРегистър на страницата на канала 0
89чКанал 6 страница регистър
8bhРегистър на страницата на канала 5
Канал 7 страница регистър
8FhДинамична регенерация на паметта

Портове 0C0h - 0DFh

Портове 0D0h-0DFh

Това са портовете за управление и състояние на втория чип 8237A-5. По отношение на формат и предназначение те съответстват на тези, разгледани по-рано за DMA контролера на IBM PC / XT компютри:

0D0hКонтролен регистър / регистър на състоянието
0D2hЗаявка за регистрация
0D4hКалъф за маска
0D6hРежим регистър
0D8hНулиране на тригерни байтове
0DAhНулирайте контролера
0DChНулирайте регистъра на маската
0DEhМаскиране/демаскиране на канала

Като пример за използване на контролер за директен достъп до паметта, нека вземем секторен четец на дискета. Вече го описахме в предишния том. Затова тук няма да описваме командите на флопи диск контролера и други тънкости, свързани с работата с флопи дискове.

Преди да започне инициализацията на PDCA, програмата трябва да изпрати към портовете 0Bh и 0Ch кода на операцията, която ще се изпълнява от PDCA - 46h за операция четене и 4Ah за операция запис.

Демонстрационната програма по-долу използва някои от най-често срещаните команди на флопи контролера. Той е проектиран да работи на AT машина. За да работи правилно на PC/XT машини, трябва да бъде леко модифициран. Промените се отнасят до програмирането на PDP контролера и програмирането на скоростта на предаване на флопи диск контролера.

PC/XT контролерът използва 4-битов номер на буферна страница вместо 8-битов. Скоростта на предаване на данни на флопи контролера в PC/XT машини не е програмируема, трябва да премахнете съответните редове от програмата. Също така трябва да обърнете внимание на различните скорости на машините AT и PC / XT и да коригирате константите в редовете на програмата, които изпълняват забавянето.

Програмата не проверява дали в слота за устройство има инсталирана дискета, така че не забравяйте да поставите диск, преди да я стартирате.

Останалите команди можете да опитате сами. За повече информация относно флопи контролера вижте техническото ръководство на IBM PC. От описанието може да се разбере многодискови контролери чипове 765 от NEC и аналози на този чип - Intel 8272A и вътрешни KR1810VG72A.