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 |
8ч | Канал 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.