ПредишенСледващото

След регистрацията, по-голямата част от операция на водача е конфигуриран за правилното функциониране на контролера DMA. Тази задача не е тривиално, но за щастие, ядрото изнася всички функции, необходими за един типичен шофьор.

Шофьор, трябва да конфигурирате контролера DMA или когато четете или причинени от запис. или при подготовката за асинхронни трансфери. Наблюдението се осъществява или в момента на отваряне. или в отговор на команда IOCTL. в зависимост от това на водача и му го изпълнява. Кодът тук е код, който обикновено се причинява от методи устройство чете или пише.

Този раздел предоставя кратък преглед на контролера смелостта на DMA за да разберете кода е показано тук. Ако искате да знаете повече, ние ще ви препоръчваме да прочетете и някои ръководства за оборудването, описващи PC архитектура. По-специално, ние не се занимаваме с въпроса за 8-битови трансфер на данни, вместо на 16-битов. Ако пишете драйвери на устройства за устройства дънна платка ISA за такива устройства, трябва да се намери необходимата информация в ръководството за оборудване.

Контролерът DMA е общ ресурс и може да доведе до объркване, ако тя се опита да се програмира едновременно с повече от един процесор. Поради тази причина, на контролера е защитена spinlock нарича dma_spin_lock. Водачите не трябва да манипулират тази ключалка директно, но да се направи това, са предвидени две функции за Вас:

неподписан дълго claim_dma_lock ();

Придобива заключите спин DMA. Тази функция също е блокиран прекъсване на местната процесор; Ето защо, върнатата стойност е набор от флагове, описващи предишното състояние прекъсване; той трябва да бъде предаден на следващата функция за възстановяване на прекъсване състояние, когато сте готови да работи с ключалката.

нищожен release_dma_lock (неподписани дълги знамена);

Връща DMA spinlock и възстановява предишната статут на прекъсването.

При използване на функции, описани по-късно, трябва да се проведе spinlock. Въпреки това, не го задръжте по време на самото I / O. Докато държите шофьор spinlock никога не трябва да спи.

невалидни set_dma_mode (неподписан Int канал, режим на овъгляване);

невалидни set_dma_addr (неподписан Int канал, неподписан Int адр);

нищожен set_dma_count (неподписана вътр канал, неподписан брой вътр);

Задава броя байтове, които се предават. брой аргумент е брой байтове, а също и за 16-битови канали; в този случай броят трябва да е равен.

В допълнение към тези функции, съществуват редица възможности за стопанисване, която трябва да се използва, когато се занимават с DMA устройства:

невалидни disable_dma (неподписан Int канал);

DMA канал може да бъде деактивиран от администратора. За да се предотврати повреди, преди контролерът е конфигуриран, каналът трябва да бъде забранено. (В противен случай тя може да се повреди, тъй като контролерът е програмиран използване на 8-битов предаването на данни и следователно, никой от горните функции не се извършва атомно).

невалидни enable_dma (неподписан Int канал);

Тази функция сигнализира на управлението, че каналът DMA съдържа валидни данни.

Int get_dma_residue (неподписан Int канал);

Понякога водачът трябва да знае, когато прехвърлянето DMA е завършена. Тази функция връща броя на байтовете, които все още не са прехвърлени. Връщане Стойност 0 след успешно предаване и непредсказуемо (но не и 0), докато контролера работи. Непредсказуемостта идва от необходимостта да се получи 16-битов останалата в две 8-битов вход работа.

невалидни clear_dma_ff (неподписан Int канал);

Тази функция изчиства тригер (тригер, регистър на данни) DMA. Задействането се използва за контрол на достъпа до 16-битови регистри. Регистрите са достъпни чрез две последователни експлоатация 8-битов, и да изберете ниско байт (когато изчистена) или висока байт (ако има такъв) се използва спусъка. След прехвърлянето на осем бита автоматично задейства промени състояние; преди да получите достъп DMA регистри програмист трябва да изчисти тригер (за да го настроите в известно състояние).

С помощта на тези функции, за да се подготви за драйвера на трансфер DMA може да приложи следната функция:

Int dad_dma_prepare (междинно канал, режим на междинно съединение, неподписан Int Buf, неподписан брой Int)

неподписани дълги знамена;

След това, следната функция се използва за проверка за успешното приключване на ДМА:

Int dad_dma_isdone (междинно канал)

неподписани дълги флагове = claim_dma_lock ();

връщане (остатък == 0);

Единственото нещо, което остава да направите, е да изберете борда на устройството. Този проблем зависи от устройството, и обикновено е да се четат или пишат множество I / O портове. Устройствата се различават драстично. Например, някои устройства се очаква да информира хардуера, че програмист колко голям DMA буфер, и на водача, понякога трябва да прочете ценностите, които са в устройството. За да конфигурирате вашата карта само ще бъде приятел в посока на оборудване.

Право да функционира щитоносна автомат, даден от уравненията:

Право да функционира Мур автомат, даден от уравненията:

Stack (роден на стека - стека ;. Прочетете стек) - абстрактен тип данни, който представлява списък с елементи, организирана въз основа на LIFO (английски lastin - firstout «миналата дойде - първо от" ..).

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

Кеш паметта, която е обикновено липсва в най-простите устройства за обработка. В по-сложни компютър има няколко нива на кеш, където по-горно ниво на кеша на процесора е винаги в кристала

Прекъсване (английски прекъсване.) - сигнал, който казва на процесора на настъпване на някое събитие. В този случай, изпълнението на текущата последователност от команди, е спряно и контрол се предава до прекъсване манипулатор, който реагира на и служи неговото събитие, а след това се връща контрола на прекъснат кода

В зависимост от източника на възникване на прекъсване сигнал се разделя на:

· AC или външен (хардуер) - събитията, които произхождат от външни източници (например, периферни устройства) и може да се появи по всяко произволно време: на сигнал от таймер, мрежова карта, или диск, интерфейс клавиатура, движение на мишката. Фактът на възникване на това прекъсване система се разглежда като заявка за прекъсване (Engl Interruptrequest, IRQ.);

· Софтуер (специален случай на вътрешно прекъсване) - предизвикани от изпълнението на специални инструкции в програмния код. Софтуер прекъсвания обикновено се използват за означаване на функциите на вградения софтуер (фърмуер), драйверите за устройствата и операционната система.

Директен достъп до паметта. трансфер процесор данни не участва. Тя изключен от системата, както и всички операции за обмен на данни са под контрола на специален контрол устройство - DMA контролер. Този режим се използва за високоскоростен IP, когато широчината на лентата на процесора не е достатъчно.

Автобусът за памет е предназначена за предаване на информация между IP и ОП и ОП и СР в режим DMA. Информация, предадена по шината на паметта със значително по-ниска скорост от автобуса процесор. Това се дължи на факта, че в автобуса памет се състои от по-малко линии за данни. Броят им се определя от ширината на пробата. Освен това, както е отбелязано по-горе, изпълнението на чипове памет винаги изостава скоростта на процесора, така че процесът на предаване на гумата на памет и процесор информация.

Ако сте открили грешка в текста, маркирайте думата и натиснете Shift + Enter

Подкрепете проекта - споделете линка, благодаря!