A szabályozó és DMA - a DMA-rendszer

A regisztráció után, a nagy részét vezető művelet konfigurálva megfelelő működéséhez a DMA vezérlő. Ez a feladat nem triviális, de szerencsére a kernel exportálja szükséges összes funkciót egy tipikus vezető.







Pilóta, be kell állítani a DMA vezérlő sem, ha olvasni vagy okozott írni. vagy ha készül aszinkron átvitelekhez. Ez utóbbi a feladatot akár a megnyitásakor. vagy utasításra reagálva ioctl. attól függően, hogy a vezető és a politika végrehajtásakor. A kód itt van egy kód, amely általában az okozza módszerekkel készülék írni és olvasni.

Ez a rész egy rövid áttekintést nyújt a DMA vezérlő belek számára, hogy megértsék a kód segítségével. Ha szeretne többet megtudni, mi lenne kérem Önt, hogy olvassa és egyes berendezések kézikönyvek leíró PC architektúra. Különösen azt nem foglalkozik azzal a kérdéssel, hogy 8 bites adatátvitelt helyett 16 bites. Ha írsz eszközmeghajtók az alaplap ISA eszközök az ilyen eszközök esetében meg kell találni a megfelelő információt a berendezés használati utasítása.

A DMA vezérlő egy közös erőforrás, és zavart okozhat, ha megpróbálta programozható egyidejűleg egynél több processzor. Emiatt a vezérlő védi spinlock úgynevezett dma_spin_lock. A járművezetők nem manipulálják a zár közvetlenül, hanem az, hogy ez a két funkció áll rendelkezésre az Ön számára:

előjel nélküli hosszú hiba claim_dma_lock ();

Szerez egy spin zár DMA. Ez a funkció blokkolja interrupt a helyi processzor; Ezért a visszatérési érték egy sor zászlók leírja az előző megszakítási állapotban; azt át kell adni a következő funkcióra, hogy visszaállítsa a megszakítási állapotban, amikor befejezte a munkát a zárat.

void release_dma_lock (unsigned long flags);

Visszaadja a DMA spinlock és visszaállítja az előző állapotát a megszakítás.

Ha funkciók később ismertetett kell állapítani spinlock. Azonban ne tartsa a tulajdonképpeni I / O Miközben a spinlock vezető soha nem alszik.

void set_dma_mode (unsigned int csatorna, char mód);

void set_dma_addr (unsigned int csatorna, unsigned int addr);

void set_dma_count (unsigned int csatorna, unsigned int count);

Meghatározza a bájtok számát kell továbbítani. száma érv bájtok számát, valamint a 16 bites csatornán; ebben az esetben a számot kell lennie.

Amellett, hogy ezek a funkciók, számos lehetőséget kínál a takarítás, hogy kell használni, ha foglalkoznak DMA eszközzel:

void disable_dma (unsigned int csatorna);

DMA csatornát letiltható a vezérlő által. Annak megakadályozása érdekében hibák, mielőtt a vezérlő úgy van konfigurálva, a csatorna le kell tiltani. (Ellenkező esetben megsérülhet, mivel a vezérlő programozása a 8-bites adatátvitel, és ennek következtében, sem a fenti funkciók nem végeztek atomically).

void enable_dma (unsigned int csatorna);







Ez a funkció tájékoztatja a vezérlővel, hogy a DMA-csatorna tartalmaz érvényes adatokat.

int get_dma_residue (unsigned int csatorna);

Előfordul, hogy a járművezetőnek meg kell tudni, hogy mikor a DMA átvitel befejeződött. Ez a függvény a bájtok számát, amelyek még nem kerültek át. Visszatérési érték 0. sikeres adás és kiszámíthatatlan (de nem 0), míg a vezérlő működik. Kiszámíthatatlanság származik, hogy szükség van, hogy megkapjuk a 16-bites fennmaradó két 8 bites bemeneti művelet.

void clear_dma_ff (unsigned int csatorna);

Ez a funkció törli a flip-flop (flip-flop, a adatregiszter) DMA. A trigger segítségével szabályozható a hozzáférés a 16 bites regiszterek. A regiszterek keresztül elérhető két egymást követő 8 bites működése során, és válassza ki a low byte (ha törli) vagy a felső bájt (ha van) alkalmazzuk a ravaszt. Átadását követően a nyolc bit automatikusan elindítja állapota megváltozik; hozzáférés előtt a DMA regiszterek programozó kell törölje a flip-flop (úgy beállítani, hogy egy ismert állapotba).

Ezen függvények használatával, hogy felkészüljenek a DMA átviteli vezető végre a következő függvényt:

int dad_dma_prepare (int csatorna, int mód, unsigned int buf, unsigned int count)

unsigned long flags;

Ezután a következő függvényt használjuk, hogy ellenőrizze a sikeres DMA:

int dad_dma_isdone (int csatorna)

előjel nélküli hosszú hiba flags = claim_dma_lock ();

visszatérési (maradék == 0);

Az egyetlen dolog, ami maradt, az, hogy a készülék konfigurálását fórumon. Ez a probléma a készüléktől függ, és általában az, hogy írni vagy olvasni több I / O portok. Az eszközök nagyban különböznek. Például, egyes készülékek várhatóan tájékoztatja a hardver, hogy egy programozó, hogy milyen nagy DMA buffer, és a sofőr néha olvasni az értékeket, amelyek a készülék. Állítsd be a kártyán csak barátja a berendezés irányba.

Törvény működő Mealy automatát által megadott egyenletek:

Törvény működő Moore automata által adott egyenletek:

Stack (született stack - verem ;. Read stack) - egy absztrakt adattípus, amely képviseli az elemek listáját, a szervezett alapján a LIFO (angol lastin - firstout «utolsó jöjjön - first out” ..).

Cache - köztes puffer gyors hozzáférést, amelyek tartalma lehet kérni a legnagyobb valószínűséggel. Elérése adatok a cache gyorsabb, mint az eredeti mintája adatokat a lassabb memóriát, vagy egy távoli forrásból, de a térfogata jelentősen korlátozott, összehasonlítva a tároló bemeneti adatok.

A cache memória, amely általában hiányzik a legegyszerűbb feldolgozó eszközök. A kifinomultabb számítógépnek több cache szinten, ahol a felső szintű cache a processzor mindig a kristály

Megszakítás (angol interrupt.) - a jel, ami megmondja a processzor bekövetkezte esetén. Ebben az esetben a végrehajtás a jelenlegi parancssort felfüggesztésre kerül, és vezérlés átkerül egy megszakítás-kezelőre, hogy reagál, és arra szolgál, hogy egy eseményt, majd visszaadja a vezérlést a megszakított kód

Attól függően, hogy a forrás előfordulása a megszakítási van osztva:

· AC vagy külső (hardver) - az események, amelyek származhatnak külső forrásból (például perifériás eszközök), és előfordulhat bármilyen tetszőleges időpontban: a jelet az időzítő, hálózati kártya, vagy egy lemezmeghajtó, a billentyűzet interfész, az egér mozgását. Az a tény, előfordulási ez a megszakítás rendszer kezelni megszakítás kérés (Engl Interruptrequest, IRQ.);

· Szoftver (egy speciális esete a belső interrupt) - által kiváltott végrehajtását egy speciális utasítást a program kódját. Szoftver megszakítások általában használják utal a funkciók a beépített szoftver (firmware), eszközmeghajtók és az operációs rendszer.

Közvetlen memória-hozzáférés. Processzor adatátvitel nem vesz részt. Ez leválasztják a rendszerről, és az összes adatcsere művelet szabályozása alatt egy speciális vezérlőberendezés - DMA vezérlő. Ez az üzemmód a nagy sebességű IP, amikor a processzor sávszélesség nem elég.

A memória busz tervezték között az információ továbbítását IP és OP OP és a CP a DMA módot. Keresztül továbbított információ a memória busz lényegében alacsonyabb sebességen processzor buszon. Ez annak a ténynek köszönhető, hogy a memória busz, amely kevesebb adatot vonalak. Számuk határozza meg a minta szélessége. Ezen kívül, mint említettük, a teljesítmény a memória chipek mindig elmarad a processzor sebessége, így a folyamat továbbításának gumiabroncs memória és a processzor információt.

Ha megtalálta a hibát a szövegben, jelölje ki a szót, és nyomja meg a Shift + Enter