česky english Vítejte, dnes je čtvrtek 21. listopad 2024

Vývoj aplikací s moduly SQM4: PWM generátor − část 2

DPS 4/2015 | Články
Autor: Ing. Jan Kubizňák, Elnico

Úvod

Cílem tohoto několikadílného seriálu je seznámit čtenáře s možnostmi vývoje reálných aplikací s procesorovými moduly SQM4. V minulé části jsme si představili základní hardwarové a softwarové komponenty pro aplikaci PWM generátoru. V dnešním pokračování si popíšeme architekturu aplikace, jednotlivé softwarové moduly a grafické rozhraní.

Hierarchie softwarových komponent

Rozveďme úvodem hierarchii softwarových komponent (obr. 1). Jádrem celé aplikace je real-time operační systém Freescale MQX. Ten umožňuje plánování jednotlivých úloh v závislosti na jejich prioritách a poskytuje pro ně synchronizační a komunikační prostředky (semafory, eventy, zprávy). MQX navíc nabízí podporu pro TCP/IP protokol, souborové systémy v NAND paměti, USB disku či SD kartě a dostupná je i celá řada hardwarových ovladačů (např. komunikace po sběrnicích I2C, SPI či CAN). MQX je využitelný i s multicore procesory, ale o tom až v příštích dílech seriálu.

obr.1

Možnosti operačního systému rozšiřujeme knihovnami ESL a eGUI. Zatímco MQX poskytuje interface pro obsluhu hardware, ESL nabízí již okamžitě využitelné konfigurovatelné moduly. Vysvětleme si to např. na obsluze datového USB zařízení. MQX poskytuje funkce pro detekci přítomnosti zařízení, pro připojení a odpojení jeho souborového systému atd. ESL tuto MQX funkcionalitu využívá a zapouzdřuje ji do softwarového modulu, který nezávisle na aplikaci detekuje přítomnost USB MSD (Mass Storage Device) zařízení a podle toho také zpřístupňuje jeho souborový systém pro aplikaci. Obdobné moduly jsou implementovány např. pro SD kartu či Wi-Fi rozhraní.

Pro návrh grafického uživatelského rozhraní využijeme knihovnu eGUI. Ta poskytuje ovladače pro řadu LCD displejů či pro obsluhu touch screenu. Zároveň nabízí ucelený framework pro návrh vlastních uživatelských obrazovek využitím celé řady dostupných widgetů. Knihovnu je možné používat s operačním systémem MQX, ale i nezávisle.

Softwarové moduly

Celý program sestává ze softwarových modulů tří typů – ESL, eGUI a vlastních aplikačních. Z knihovny ESL využijeme následující:

  • appctrl: Poskytuje řídicí mechanismus pro start aplikace. Jedná se o úlohu, která spustí a inicializuje všechny ostatní definované úlohy v určeném pořadí.
  • usbhmsd: Detekuje přítomnost USB zařízení a dle toho připojuje či odpojuje jeho souborový systém a zpřístupňuje ho dále aplikaci.
  • log: Poskytuje interface pro logování informačních či chybových hlášení do konzole, na souborový systém (USB / SD, …) nebo do EEPROM.
  • keyboard: Pro události jednotlivých hardwarových kláves (press, release, hold) volá definované callbacky (v našem případě přímo eGUI).
  • spimem: Poskytuje rozhraní pro operace s paměťmi SPI EEPROM / FLASH.
  • td: Konfigurovatelné časové domény pro volání periodických událostí.

Možnosti knihovny eGUI rozšíříme návrhem vlastních specializovaných widgetů:

  • iconButton: Poskytuje více možností zobrazení oproti standardnímu eGUI tlačítku.
  • pwmSlider: Rozšiřuje klasický eGUI slider pro potřeby nastavování PWM.

Využitím standardních i nově definovaných widgetů následně navrhneme vlastní uživatelské obrazovky:

  • screenMain: Hlavní obrazovka aplikace sloužící k ovládání PWM výstupů využitím slider widgetů.
  • screenSettings: V nastavení aplikace může uživatel především přepínat mezi uloženými konfiguracemi PWM či zakládat nové.
  • screenKeyboard: Jednoduchá klávesnice pro nastavování přesných číselných hodnot.

Z vlastních aplikačních modulů je potřeba implementovat následující:

  • pwm: Rozhraní pro kontrolu PWM výstupů využitím FTM (FlexTimer) kanálů mikrokontroléru.
  • blinker: Rozhraní pro ovládání funkcionality „blikač“ PWM kanálů. Modul je implementován využitím časových domén td (ESL).
  • startup: Úloha sloužící k inicializaci „task-less“ modulů (ESL: keyboard, spimem, td; aplikace: pwm, blinker).
  • lcd: Realizuje uživatelské rozhraní eGUI, tj. vykresluje jednotlivé obrazovky, reaguje na aktivitu uživatele (touch screen, klávesnice).
  • eeprom: Čtení či zápis do paměti EEPROM probíhá po sběrnici SPI v této specializované úloze.
  • observer: Monitoruje stav HW v periodických intervalech.

Inicializace aplikace

Inicializace aplikace (diagram na obr. 2) je v režii úlohy appctrl, která je zároveň jedinou aplikační úlohou spouštěnou operačním systémem MQX automaticky. Ostatní úlohy jsou vytvářeny a inicializovány v následujícím pořadí:

  1. log (ESL),
  2. startup (aplikace),
  3. lcd (aplikace),
  4. usbhmsd (ESL),
  5. eeprom (aplikace),
  6. observer (aplikace).

obr. 2,3

Každá z výše uvedených úloh po své inicializaci zasílá signál zpět úloze appctrl a přechází do blokovaného stavu. Teprve v okamžiku, kdy jsou všechny úlohy inicializovány, provede appctrl jejich odblokování a tím celá aplikace přejde do režimu standardního běhu.

Standardní běh aplikace

Poté, co je celý program inicializován, přecházejí úlohy appctrl a startup do blokovaného stavu. Kontroly se ujímá úloha lcd (obr. 3), která:

  • nastavuje parametry modulů pwm a blinker dle aktuálních hodnot v uživatelském rozhraní,
  • modulu eeprom zasílá požadavky na vyčtení či uložení konfigurace zařízení,
  • v pravidelných intervalech detekuje stav modulu usbhmsd a tím získává informaci o připojených USB zařízeních,
  • periodicky vyčítá stav hardware od modulu observer a v případě nutnosti zobrazí na displeji varovnou hlášku,
  • zasílá zprávy o běhu aplikace i eventuální chybové hlášky do modulu log.

Grafická stránka aplikace

Popišme si nyní grafické uživatelské rozhraní aplikace PWM generátoru. Na obr. 4a je screenshot obrazovky pro nastavování PWM kanálů. To je realizováno pomocí sliderů, které uživatel může ovládat přes touchscreen či hardwarovou klávesnicí. Pro přesné nastavení hodnot lze případně aktivovat obrazovku klávesnice (obr. 4b), která je aktivována podržením prstu na zvoleném slideru.

obr. 4

Aktuální nastavení všech čtyř PWM kanálů lze ukládat do EEPROM a později znovu načítat (obr. 4c), přičemž uživatel má k dispozici 4 přepisovatelné konfigurace a 1 konfiguraci defaultní, ve které jsou všechny výstupy vypnuty. V rámci nastavení může uživatel také resetovat zařízení do továrního stavu, kalibrovat touch screen a kopírovat logy na datové USB zařízení (obr. 4d).

Příště

V příští části seriálu se budeme věnovat modulu SQM4-ZY7 s procesorem Zynq, který kombinuje výhody dvoujádrového procesoru a FPGA pole.