Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2017:microzed-lcd

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2017:microzed-lcd [2018/01/15 00:18]
Tomáš Matějka
2017:microzed-lcd [2018/01/15 05:32] (aktuální)
Tomáš Matějka
Řádek 3: Řádek 3:
  
 ====== Úvod ====== ====== Úvod ======
-Cílem projektu bylo seznámit se s vývojovými nástroji pro SoC Zynq a s embedded Linuxem, který je pro implemetaci použit. Aktuální stav projektu splňuje pouze první část zadání, tedy vypisování textu na LCD. Dotykové ovládání není funční kvůli prozatím ​neoběvené chybě periferie ​vytvořené v prgramovatelné logice Zynqu (FPG) pro řízení LCD.+Cílem projektu bylo seznámit se s vývojovými nástroji pro SoC Zynq a s embedded Linuxem, který je pro implemetaci použit. Aktuální stav projektu splňuje pouze první část zadání, tedy vypisování textu na LCD. Dotykové ovládání není funční kvůli prozatím ​nedokončené periferii ​vytvořené v prgramovatelné logice Zynqu (FPG) pro řízení LCD.
  
 ====== Použitý HW ====== ====== Použitý HW ======
 Pro realizaci byl použit SOM [[http://​zedboard.org/​product/​microzed|MicroZed]] společnosti Avnet doplněný o[[http://​zedboard.org/​product/​microzed-io-carrier-card|I/​O nosnou desku]]. Jádrem MicroZedu je Zynq-7000 SoC společnosti Xilinx, který ve společném pouzdře představuje kombinaci FPGA s dvoujádrovým proceseromem ARM Cortex A9. Dále je MicroZed doplněn o USB, Ethernet, QSPI flash paměť, DDR3 RAM (1 GB), slot na microSD kartu apod. Pro realizaci byl použit SOM [[http://​zedboard.org/​product/​microzed|MicroZed]] společnosti Avnet doplněný o[[http://​zedboard.org/​product/​microzed-io-carrier-card|I/​O nosnou desku]]. Jádrem MicroZedu je Zynq-7000 SoC společnosti Xilinx, který ve společném pouzdře představuje kombinaci FPGA s dvoujádrovým proceseromem ARM Cortex A9. Dále je MicroZed doplněn o USB, Ethernet, QSPI flash paměť, DDR3 RAM (1 GB), slot na microSD kartu apod.
  
-Jko displej byl použit 7 palcový TFT LCD [[http://​www.buydisplay.com/​default/​7-inch-lcd-module-capacitive-touch-screen-panel-i2c-spi-serial| ER-TFTM070-5 ]] s rozlišením 800x480 pixelů, 16 bit barevnou hloubkou a doplněný o rezistiní doykový panel. ​Dysplej ​disponuje grafickým kontrolérem [[https://​cdn-shop.adafruit.com/​datasheets/​RA8875_DS_V12_Eng.pdf|RA8875]] a pro komunikaci je použito 16 bit paralelní rozhraní. Funkční zapojená testovací sestava je znázorněna na následujícím obrázku:+Jko displej byl použit 7 palcový TFT LCD [[http://​www.buydisplay.com/​default/​7-inch-lcd-module-capacitive-touch-screen-panel-i2c-spi-serial| ER-TFTM070-5 ]] s rozlišením 800x480 pixelů, 16 bit barevnou hloubkou a doplněný o rezistiní doykový panel. ​Displej ​disponuje grafickým kontrolérem [[https://​cdn-shop.adafruit.com/​datasheets/​RA8875_DS_V12_Eng.pdf|RA8875]] a pro komunikaci je použito 16 bit paralelní rozhraní. Funkční zapojená testovací sestava je znázorněna na následujícím obrázku:
  {{ :​2017:​microzed-lcd:​uvodni_fotka.jpg?​400 }}  {{ :​2017:​microzed-lcd:​uvodni_fotka.jpg?​400 }}
  
 ===== Komunikace s LCD ===== ===== Komunikace s LCD =====
-Komunikace probíhá po 16 bit standartizovaném paralelním rozhraní pod označením 8080. RA8875 zahrnuje i kontrolér pro rezistivní panel. Komunikace po sběrnici je obousměrná (three-state),​ pozice z dotykového panelu jsou tak vyčítány po stejné sběrnici, jako jsou zapisována obrazová data. Následující tabulka znázorňuje zapojení a popis pinů LCD displeje:+Komunikace probíhá po 16 bit standartizovaném paralelním rozhraní pod označením 8080. RA8875 zahrnuje i kontrolér pro rezistivní panel. Komunikace po sběrnici je obousměrná (three-state),​ pozice z dotykového panelu jsou tak vyčítány po stejné sběrnici, jako jsou zapisována obrazová data.
  
 +Na následujícím obrázku je znázorněno zapojení LCD displeje:
 +
 +
 +{{ :​2017:​microzed-lcd:​zapojeni_sbernice.png?​400 |}}
 +
 +//Obrázek převzat z: http://​www.buydisplay.com/​download/​interfacing/​ER-TFTM070-5_Interfacing.pdf .//
 +====== Použité SW nástorje ======
 +
 +  * [[https://​www.xilinx.com/​products/​design-tools/​vivado.html|Vivado Design Suite]] - Vývojové prostředí pro tvorbu a syntézu programovatelné logiky (FPGA).
 +
 +  * [[https://​www.xilinx.com/​products/​design-tools/​embedded-software/​sdk.html|XSDK]] (Xilinx Software Development Kit) - Vývojové prostředí využívané pro tvorbu a debuggování aplikace pro Linux.
 +
 +  * [[http://​www.wiki.xilinx.com/​PetaLinux|PetaLinux]]- Nástroj pro kompletní konfiguraci a sestavení embedded Linux systému a import hardwarového popisu.
 +
 + ​====== Ovládání displeje ======
 +
 +Pro demonstraci funkčnosti displeje byla vytvořena jednoduchá demonstrační aplikace, která umožňuje vypisování textu a vykreslování pixelů na zvolenou pozici v nekolika předvolených barvách. Aplikace využívá předpřipravené fonty v EEPROM paměti kontroléru RA8875. ​
 +
 +V programovatelné logické čísi (PL části) byla vytvořena jednoduchá periferie pro namapování jednotlivých externích signálů (pinů) paralelního komunikačního rozhraní LCD do definovaného adresního prostoru v paměti s využitím interní AXI sběrnice. Po spuštění demonstrační aplikace nejprve namapuje periferii do virtuálního adresního prostoru tak, aby bylo možné k periferii přistupovat z uživatelského prostoru Linuxu bez nutnosti driveru:
 +<code c>  ​
 +static const unsigned IO_REG0_ADR = 0x43C00000; //physical address of periphery
 +
 +unsigned page_size = sysconf(_SC_PAGESIZE); ​ //Get  the number of bytes in a memory page
 +
 +// Open /dev/mem file - memory
 +fd = open ("/​dev/​mem",​ O_RDWR);
 +if (fd < 1) {
 + perror("​Cannot open /​dev/​mem"​);​
 + exit(-1);
 +}
 +
 +// maps HW peripheries into the virtual memory
 +if ((io_reg0 = mmap(NULL, page_size, PROT_READ|PROT_WRITE,​ MAP_SHARED, fd, IO_REG0_ADR)) == MAP_FAILED) {
 + perror("​cannot map io_reg0"​);​
 + exit(-1);
 +}
 +</​code> ​
 +Následně jsou jednotlivé piny paralelní sběrnice LCD řízeny zápisem 32 bit hodnoty na přidělenou virtuální adrasu:
 +
 +<code c>  ​
 +//LCD interface outputs
 +#define MASK_DATA_W 0x0000ffff ​ //data bus
 +#define MASK_RD_W 0x00010000 ​ //redad signal
 +#define MASK_WR_W 0x00020000 ​ //write signal
 +#define MASK_CS_W 0x00040000 ​ //chip select
 +#define MASK_RS_W 0x00080000 ​ //​data/​instruction selection
 +#define MASK_BL_CONT_W  ​       0x00100000 ​ //backlight control
 +
 +void LCD_WriteCmd (uint8_t cmd) //function for write instruction to RA8875
 +{
 +
 +    *((unsigned *)(io_reg0 )) |= MASK_RD_W;
 +    *((unsigned *)(io_reg0 )) &= (~ MASK_CS_W);
 +    *((unsigned *)(io_reg0 )) |= MASK_RS_W;
 +    *((unsigned *)(io_reg0 )) &= ((~MASK_DATA_W) | cmd ); //write cmd
 +    *((unsigned *)(io_reg0 )) &= (~ MASK_WR_W);
 +    *((unsigned *)(io_reg0 )) |= MASK_WR_W;
 +    *((unsigned *)(io_reg0 )) |= MASK_DATA_W; ​ //set data to 0xfffffff
 +    *((unsigned *)(io_reg0 )) &= (~ MASK_RS_W);
 +
 +    return;
 +}
 +
 +void LCD_WriteData (uint16_t data) //function for write data to RA8875
 +{
 +    *((unsigned *)(io_reg0 )) |= MASK_RD_W;
 +    *((unsigned *)(io_reg0 )) &= (~ MASK_CS_W);
 +    *((unsigned *)(io_reg0 )) &= (~ MASK_RS_W);
 +    *((unsigned *)(io_reg0 )) &= ((~MASK_DATA_W) | data ); //write data
 +    *((unsigned *)(io_reg0 )) &= (~ MASK_WR_W);
 +    *((unsigned *)(io_reg0 )) |= MASK_WR_W;
 +    *((unsigned *)(io_reg0 )) |= MASK_CS_W;
 +    *((unsigned *)(io_reg0 )) |= MASK_DATA_W; ​ //set data to 0xfffffff
 +    ​
 +    return;
 +}
 +</​code>​
 +Latence způsobená AXI sběrnicí je přibližně 200 ns, tomu odpovídá časový interval mezi změnami stavů logických úrovní (ověřeno měřením).
 +
 +Pro inicializaci displeje využití fontů a dlších funkcionalit kountroléru RA8875 byla vytvořena knihovna "​lcd"​. Většina funkcí byla převzata a poupravena z demonstračního kódu zveřejněného výrobcem ​ http://​www.buydisplay.com/​download/​democode/​ER-TFTM070-5_16-bit-8080_DemoCode.txt .
 +
 +===== Demonstrační video =====
 +{{ youtube>​R2cyjB2f9ew?​medium }}
 + 
 +
 +
 +----
 +
 +Veškeré zdrojové kódy jsou ke stažení zde: {{ :​2017:​microzed-lcd:​microzed_lcd.zip |}}.
 +
 +                ​
2017/microzed-lcd.1515971931.txt.gz · Poslední úprava: 2018/01/15 00:18 autor: Tomáš Matějka