A beágyazott grafikai alkalmazások megalkotásának egy népszerű módja a rendszer felszerelése egy belső vagy külső grafikus vezérlővel. Ezzel kapcsolatban az a probléma, hogy többletköltséggel és tervezési többletfeladatokkal jár, és a legtöbb esetben egy egyszerű grafikus felhasználói interfész létrehozásához nincs szükség dedikált grafikus vezérlő tudására.
Egy lehetséges alternatíva erre a feladatra a mikrokontroller-perifériák alkalmazása útján egy virtuális grafikus vezérlő létrehozása, amely úgy végzi el a grafikai renderelési feladatokat, hogy nem emészt fel jelentős mennyiségű CPU-időt (jellemzően 5% alatt).
Általánosságban a grafikus vezérlő nélküli grafikai alrendszernek egy képkockányi grafikai információt a megjelenítőre bizonyos időközönként kell elküldenie. Ez a képfrissítési sebesség manapság általában 60 Hz, ez tehát azt jelenti, hogy ennek a frekvenciának megfelelő időközönként a rendszernek képkockaadatokat kell küldenie az LCD-re. Elsőre úgy tűnhet, hogy az ilyen gyakoriságú képfrissítés felemésztheti a mikrokontroller CPU-idejét, azonban ez nem így van az olyan fejlett mikrovezérlők esetében, mint a Microchip PIC32-sorozatú eszközei, amelyek adatátvitel céljára DMA, vagyis közvetlen memória-hozzáférést (Direct Memory Access) biztosító perifériával rendelkeznek. Ha a DMA végzi a képpontadatok továbbítását, ez 5%-nál is kevesebb CPU-terhelést jelent olyan alkalmazásban, ahol virtuális grafikus vezérlő működik.
A DMA periféria egyik memóriahelyről a másikra úgy tud adatot átvinni, hogy nem veszi igénybe a CPU erőforrásait. Dedikált grafikus vezérlőt nélkülöző rendszer esetén a DMA beállítható úgy, hogy egyszerre csak egysornyi képkockaadatot továbbítson a párhuzamos mesterporton (PMP – Parallel Master Port) keresztül. Minden egyes sor több képpontból áll, a DMA pedig a képkocka-puffer egy részét továbbítja egy átvitel alkalmával. A PMP vagy időzítés-megszakítási szolgáltatáskérés ekkor triggereli a következő DMA-átvitelt, egész addig, amíg a teljes képsor átvitelre nem kerül. A nem maradandó megszakítású eszközöknél az időzítő áramkör használható fel arra, hogy a DMA részére triggerforrásként szolgáljon. A külső buszinterfésszel (EBI – External Bus Interface) rendelkező eszközöknél a modul pixelórajel-forrásként használható. Egy ilyen órajelforrással nagyobb sebességű pixelórajel érhető el, mint a PMP esetében, noha az EBI ugyanazokkal a kivezetésekkel gazdálkodik, mint a PMP.
Adatátvitel közben a PMP vagy EBI olvasási vagy írási jelet kapuzik minden képpontátvitel után. Az olvasás/írás kapujelek a fizikai kijelző pixelórajeleként viselkednek. Minden egyes sornyi pixeladat átvitele után a CPU-t megszakítja a DMA és bizonyos időzítési jelek (mint például a HSYNC, VSYNC, adatengedélyezés), amelyek szükségesek az LCD panelek tartalmának frissítéséhez. Ez a folyamat mindaddig ismétlődik, amíg a teljes képkocka kirajzolásra nem kerül. A képkocka adattartalma egy felejtő típusú memóriába kerül, így a képi információ jellegét tekintve dinamikus.
Ebben az összeállításban statikus memória (SRAM) tölti be a puffer szerepét, és központi szerepet játszik a vezérlő nélküli grafikus rendszer felépítésében. A rendszer konfigurálható belső és külső SRAM-mal is (lásd 1. és 2. ábrák).
TFT LCD-panelek
Bár a dedikált vezérlő nélküli grafikai alrendszert úgy alkották meg, hogy TFT LCD-panelekkel működjön elsősorban, némi csekély változtatások árán rábírható a CSTN vagy MSTN üvegek támogatására is. Az adatsorok a pixelszín-információkból állnak. A legtöbb LCD-panel 8–24 színes adatsorral rendelkezik, az LCD-panel által támogatott színmélységtől függően. Ezek az adatsorok látják el az LCD-panelt nyers színadatokkal minden egyes pixelre nézve.
A HSYNC, VSYNC, DEN és PCLK órajelek a pixeladatokat a grafikus képkockával és az LCD-panellel szinkronizálják. A szinkronsorok mondják meg az LCD-panelnek, hogy az aktuális adatok a sor (HSYNC) vagy képkocka (VSYNC) elején vagy végén vannak-e. A DEN mondja meg az LCD-panelnek, ha érvényes pixeladatok érkeznek az LCD-panelre – erre néhány TFT LCD-paneltípus esetében szükség van, mert az LCD-panel konfigurálása a megfelelő pixelhelyekkel időszükséglettel rendelkezik. Egyszerre egysornyi adat elküldése történik, addig, amíg a teljes képkocka kirajzolásra nem kerül. A PCLK jel szolgáltatja a teljes rendszer számára az órajelet. Egyimpulzusnyi PCLK frissíti az LCD-panelt, minden további órajelvonalat a megfelelő képkimenet elérése érdekében a pixelórához kell szinkronizálni. A HSYNC, ill. VSYNC jeleket nem támogató LCD-panelek ugyanúgy kompatibilisek a grafikus vezérlő nélküli összeállítással.
A Microchip-féle Low-Cost Controllerless Graphics PICtail Plus kiegészítő panel (LCC grafikus kártya) arra készült, hogy bemutassa és széles körben elterjessze ezt a megoldást. Ennek jegyében számos, jelenleg is futó PIC32 induló fejlesztői készlettel is kompatibilis. Az LCC szoftvermeghajtója hathatós segítséget nyújt az adott időzítési paraméterekkel (pl. impulzusszélesség) operáló szinkronizálásban. Amint ezek az értékek bekerülnek az LCC grafikus meghajtóba, az LCD megjeleníti a képkockát.
A 3. ábrán az látható, hogy mi történik a PIC32 mikrokontrolleren belül a képkocka képernyőre küldése során. A DMA és a PMP blokkok mutatják, hogy a DMA és az adatbuszon a CPU-val osztozó PMP perifériák milyen műveleteket végeznek. A CPU blokkban a grafikai rendereléshez szükséges feladatok listája látható. A DMA megszakításszolgáltatási rutin (ISR – Interrupt Service Routine) az egyetlen olyan kód, amelyet meg kell írni a DMA és PMP perifériák konfigurálásán felül ahhoz, hogy a képernyőre grafikai információ legyen küldhető.
Új képpontok renderelése
Az új képpontok renderelése a pufferbe ugyanolyan fontos, akárcsak a kijelző frissítése. Ezt a feladatot a CPU látja, ami írást végez a kijelzőtartalomért felelős pufferbe. Ha a képkocka tartalmát külső áramkör tárolja, a DMA átvitel felfüggesztésre kerül arra az időre, amíg a képkockát frissíti a rendszer. Erre azért van szükség, mert mindössze egyetlen PMP periféria adott, amelyet megosztva használ a rendszer a virtuális grafikus vezérlő vagy DMA átvitel céljára. Ez a módszer nem befolyásolja a kijelzőfrissítés sebességét. A képpontfrissítések mennyiségét ellenőrzés alatt kell tartani annak érdekében, hogy megakadályozzuk a frissítési sebesség túlzott változásait, máskülönben ennek hatása az emberi szem számára érzékelhető és zavaró lesz. Erre a feladatra egy pixelszám-számláló hivatott a virtuális grafikus vezérlőn belül, amelynek tárolt értéke minden egyes pixelírással frissül, illetve minden DMA megszakítás alkalmával nullázódik.
Az EBI periféria bevezetésével a képfrissítéshez szükséges felfüggesztési idő jelentősen rövidül. Ha az írást az EBI végzi, kevesebb adatot kell tárolni és lehívni, mivel a PMP regiszterek már nem kerülnek az olvasás és írás céljára megosztásra. Az EBI modul továbbá a külső SRAM-mal folytatott kommunikáció szempontjából is hatékonyabb perifériának bizonyul.
Szoftver
A belső SRAM-mal kialakított rendszer pixelórajellel szinkron PMP-írási kapujellel operál. Az LCC grafikus kártyán az első és második jumpersort ennek a konfigurációnak megfelelően kell beállítani. Ebben az összeállításban az elérhető színmélység 8 bit/pixel, külső SRAM pedig nem használt. A mikrokontrollerben lévő SRAM folyamatosan írja a PMP-be a pixelértékeket.
A 8 bit/pixel színmélységnél a 332 RGB színformátum használt, amely három színértéket jelent a piros és zöld, illetve kettőt a kék színre nézve. Ez egy széles körben használt színformátum, mivel a piros az emberi szem számára könnyebben érzékelhető és értelmezhető, mint a kék.
A külső SRAM-os módszernél a rendszer pixelórajellel szinkron PMP-olvasási kapujellel működik. Az LCC grafikus kártyán a második és harmadik jumpersort ennek a konfigurációnak megfelelően kell beállítani. Ebben az összeállításban az elérhető színmélység 16 bit/pixel, a folyamatosan kiolvasott képkockát pedig külső SRAM tárolja. A 16 bit/pixel színmélységnél az 565 RGB színformátum használt, amely öt színértéket jelent a piros és kék, illetve hatot a zöld színre nézve.
Mindkét esetben, ha több mint 16 színes sorral rendelkező LCD-t illesztünk a rendszerhez, a kihasználatlan színes sorok az utolsó színbit legmagasabb helyiértékű bitjéhez lesznek kötve. Ez lehetővé teszi, hogy a fehértől a feketéig teljes színskála álljon rendelkezésre.
Összefoglalás
A cikkből láthattuk, hogyan lehet mikrokontrolleres perifériákkal implementálni olyan virtuális grafikus vezérlőt, amely csekély mértékben támaszkodik a CPU erőforrásaira, és minden tekintetben megfelel egy alacsony anyagköltségű, dedikált grafikus vezérlő nélküli rendszerrel szemben támasztott követelményeknek.