Zobrazování bmp souborů na TFT displeji

Pro aplikace řízené jednočipem bývá zpravidla cokoli spojené s grafikou docela svízelnou záležitostí. Důvodem může být nízký výpočetní výkon (v desítkách MHz), případně absence grafického výpočetního jádra. Zpravidla veškerou obsluhu vykreslování musí provádět sám jednočip, což se neobejde bez ne zrovna zanedbatelné výpočetní režie. Malým příkladem může být zde popisovaná aplikace.

Na videu je popis zapojení s jednočipem ARM ATSAM3X8E. Neodehrává se zde nic, z pohledu obsluhy klasického PC, závrtaného, z pohledu programátora jednočipů však ano. Jsou zde implementovány funkce, které najdou pro aplikace stavěné na jednočipech opravdu široké uplatnění.

Funkce pro práci s kartou SD

Aby mohl program běžící v jednočipu vůbec pracovat s většími daty, případně s větším množstvím dat, je nutné připojit nějaké solidní datové úložiště. Nejlevnějším, nejdostupnějším a zaroveň takovým, které lze spravovat i na PC je bezpochyby SD karta, která má implementování i komunikační rozhraní SPI. Knihovna rutin pro obsluhu této karty obsahuje funkce pro inicializaci, čtení a zápis po blocích (blok je standardně 512byte) a take čtení a zápis po více blocích.

 

Implementace souborového systému FAT32

Ano, je to tak. Aby bylo možné jednoduše na kartu nakopírovat obrázky a následně je zobrazit, musí je být na této kartě jednočip schopen vůbec najít. K tomu byl použit souborový systém FAT32. V knihovně pro tento souborový systém jsou dostupné rutiny, pomoci kterých je provedeno nalezení souboru dle zadaného jména (případně soubor nalezen není a obslužný program je na to upozorněn). Následně jsou data náležící k příslušnému souboru přenášena do bufferu v jednočipu a dále zpracována.
 

Knihovny pro práci s řadičem displeje

Aby jsme plody práce mohli i pozorovat, je samozřejmě nutností zobrazení dat. To se odehrává na TFT displeji o rozlišení 320x240pixelů. Z knihovny pro obsluhu grafického displeje jsou pak využívány pouze rutiny pro inicializaci displeje, pro nastavení vykreslovací oblasti a rutina pro vykreslení pixelu v označené paměti v zadané barvě. Požadovaná barva pixelu je zde předána jako 16 -ti bitové číslo, kde horních pět bitů přísluší hodnotě kanálu R, následuje šest bitů kanálu G a posledních pět bitů přísluší kanálu B.