Search
Cílem je dostat se z procesoru na periferní zařízení. K řešení úkolů můžete použít následující šablonu:
#define t0 $8 #define t1 $9 #define t2 $10 #define s0 $16 #define s1 $17 #define s2 $18 .globl start .set noat .set noreorder .ent start start: // Zde je místo pro Váš vlastní kód... nop .end start
Pracujte v simulátoru Mips.exe. Osmibitový I/O port je mapován do paměti od adresy 0xBF900000.
s1
pole: .word 1, 2, 4, 8, 16, 32, 65, 48, 66, 51, 54, 65, 80, 79, 1, 2, 3
K vývojovému kitu MZ_APO je připojený grafický displej s lokálním řadičem, který se stará o obnovování obrazu na TFT LCD display s rozměry 480 x 320 bodů.
Řadič přijímá příkazy zapisované na 16-bitovou bránu mapovanou do fyzického paměťového prostoru na adresu 0x43c00008 (PARLCD_REG_BASE_PHYS+PARLCD_REG_CMD_o).
Většina příkazů pak vyžaduje pro provedení vlastní operace zapsání dat. Data je potřeba zapsat na adresu 0x43c0000c (PARLCD_REG_BASE_PHYS+PARLCD_REG_DATA_o).
Příklad, jak zpřístupnit určitý rozsah fyzických adres pro práci z programu napsaného v jazyce C naleznete v prvním cvičení. Příklady použití mapování v aplikacích naleznete v adresářích
/opt/apo/binrep/mzapo_binrep
/opt/apo/lcd/mzapo_lcdtest
Kontrolér displeje vyžaduje konfiguraci množství parametrů pro nastavení parametrů volbu propojení vlastního LCD (“skla”) a pro nastavení napěťových úrovní a časování aby byl obraz stabilní a kontrastní.
Tuto funkci však není nutné z vašich programů provádět, protože počáteční nastavení provede již aplikace pro zobrazení IP adresy na displeji.
Pro zobrazení grafického výstupu tedy stačí vyslat příkaz 0x2c, který je následovaný požadovanými barvami jednotlivých bodů zadávaných ve formátu RGB 565 postupně řádek po řádku.
Požadovaný grafický výstup je možné připravovat přímo během vysílání dat na display (takto jsou implementované předložené testovací programy), ale pro přípravu složitějšího výstupu je mnohem vhodnější vykreslovat objekty to bloku paměti (frame-buffer) a poté vyslat dokončený obsah na display.
uint16_t *fb = (uint16_t*)malloc(sizeof(uint16_t) * width * height)
Úkoly
Pro zdatnější je pak možné přidat nastavování barvy obdélníku s využitím rotačních voličů. Případně je možné voliči měnit polohu objektů nebo jejich velikost. Režim je možné přepínat například stlačením voliče.
Kompletní popis příkazů, kterými je možné konfigurovat řadič displeje naleznete v souboru
/opt/apo/zynq/doc/mz_apo/components/HX8357-C.pdf
Existuje mnoho možností jak definovat glyfy (grafické podoby) jednotlivých znaků, číslic, symbolů. Pokročilejší metody využívající popis glyfu křivkami umožňují zobrazit znak o libovolné velikosti. Jednodušší řešení přímo definuje podobu písmene informací, které body mají být nastaveny na barvu textu. Ostatní jsou ponechány s původní barvou nebo jsou vyplněné barvou pozadí.
Příkladem definice glyfů přímo binárně v matici 14×16 bodů může být následující soubor
https://github.com/ghaerr/microwindows/blob/master/src/fonts/winFreeSystem14x16.c
z projektu Microwindows.
Pole winFreeSystem14x16_bits definuje nastavení jednotlivých bitů v matici. Typ prvků pole MWIMAGEBITS odpovídá typu uint16_t. Nejvíce významný bit (MSB, bit 15) odpovídá nejlevějšímu bodu znaku/symbolu. Postupně následují další body v řádce. Nejméně významné bity pak většinou nejsou využité, znaky fontu 14×16 jsou užší než 16 bodů. Další položka pole odpovídá dalšímu řádku.
Pole winFreeSystem14x16_offset není pro daný font používané, protože výška každého znaku/symbolu je 16 bodů, to je 16 16-bitových čísel. Přitom první grafická representace odpovídá v kódování ASCII znaku mezera (0x20, 32 dekadicky). Pole winFreeSystem14x16_width definuje šířku každého znaku v bodech. Další informace a parametry již nejsou pro implementaci jednoduchého zobrazování textů podstatné.
Soubory s dalšími definicemi fontů v různé velkosti naleznete v adresáři
/opt/apo/lcd/fonts
počítačů v laboratoři.
Největší velikost obsahuje jen číslice. Některé fonty obsahují i několik úseků z kódové tabulky Unicode a pokrývají tak kompletně potřeby českého jazyka, Ruštiny i některé arabské jazyky. Základ aplikace s již definovanými hlavičkovými soubory pro použití fontů naleznete v adresáři
/opt/apo/mzapo_template
Aplikace je též dostupná z fakultního serveru GIT https://gitlab.fel.cvut.cz/b35apo/mzapo_template.
Datový typ použitý pro definice fontů naleznete v souboru font_types.h.