Čeština / English
Login

Firmware / Knihovna libfitkit

Autor: Karel Slaný ()

Abstrakt: Popis knihovny libfitkit zajišťující nezbytné funkce pro provoz FITkitu. Mezi základní fuknce patří programování FPGA, komunikace s terminálem skrze seriovou linku, komunikace s FLASH pamětí, komponentami uvnitř FPGA apod.

Update: 22.3.2009

1. Knihovna libfitkit

Knihovna libfitkit zastřešuje základní funkce pro použití MCU a komunikaci MCU s komponentami na FITKitu nebo PC. Podrobnou dokumentaci knihovny libfitkit v systému doxygen najdete zde.

Dále knihovna poskytuje platformu pro použití FITKitu a základní rozhraní:

  • Komunikaci s terminálem přes USB a UART MCU - V knihovně je implementovaná komunikace přes sériové rozhraní, které je připojeno přímo na port B čipu FT2232C (COM s vyšší hodnotou). Nad sériovou komunikací je implementován jednoduchý příkazový interpret, do kterého lze zadávat příkazy pro MCU, které knihovna zpracuje. Pokud se jedná o příkaz knihovny, knihovna daný příkaz vykoná. V opačném případě se příkaz zadaný do příkazového řádku pošle funkci USER_CMD_Decode, kterou si uživatel musí nadefinovat.

  • Konfigurace FPGA - Základní úkol knihovny je nahrávání konfigurace do FPGA. Po inicializaci knihovny se konfigurace FPGA uložená ve FLASH paměti automaticky nahraje do FPGA. Knihovna dále umožňuje pomocí příkazů nahrávat konfiguraci z PC přímo do FPGA, z PC do FLASH paměti a z FLASH paměti do FPGA. Přesný popis možnosti nahrávání konfigurace pro FPGA najdete v dokumentu Programování a bootování FITkitu.

  • Podpora SPI rozhraní - Rozhraní slouží ke komunikaci s FLASH pamětí, FPGA a na FITkitu 2.0 ke konfiguraci zvukového kodeku.

2. Použití knihovny libfitkit

Použití knihovny libfitkit je poměrně jednoduché. Při použití knihovny je nutné v programu pro MCU definovat kromě hlavní funkce main ještě další tři funkce, které samotná knihovna volá.

  • int main(void)

    Základní funkce programu. V této funkci je nutné zinicializovat komponenty knihovny voláním fukce initialize_hardware() a zadefinovat hlavní smyčku programu, ve které se bude volat obsluha terminálu, tedy funkce terminal_idle().

  • void fpga_initialized(void)

    Funkce se zavolá vždy po dokončení nahrávání konfigurace a resetu FPGA.

  • void print_user_help(void)

    Funkce se zavolá po výpisu systémové nápovědy. Tzn. vždy po přijetí příkazu HELP z terminálu. Je připravena pro výpis nápovědy pro uživatelsky definované příkazy, která se vypíše bezprostředně za systémovou nápovědou.

  • unsigned char decode_user_cmd(char *cmd_ucase, char *cmd)

    Funkce volaná při dekódováni uživatelských příkazů. Pokud přijatý příkaz z terminálu není definovaný v knihovně libfitkit, zavolá se tato funkce. Parametr cmd_ucase slouží k porovnání příkazu, celý obsah parametru je vždy velmými písmeny. Parametr cmd ukazuje na přijatý řetězec v nezměněné formě. V této funkci tak můžete obsloužit vlastní příkazy. Pokud je příchozí příkaz obsloužen, je nutné vrátit hodnotu USER_COMMAND, pokud ne tak CMD_UNKNOWN.

3. Popis zajímavých funkcí a maker libfitkit

Knihovna libfitkit obsahuje spoustu funkcí a maker, které lze při navrhování programu pro MCU využít. Některé příklady jsou vypsány níže. Mezi těmito funkcemi a makry lze najít vypisování textů na terminál, inicializační funkce a některé užitečné proměnné. Ty bývají základem všech programů pro MCU na FITkitu.

  • void term_send_char(char Uchar)

    Vypíše znak na terminál.

  • void term_send_str(char *ptrStr)

    Vypíše řetězec na terminál.

  • term_send_str_crlf(ptrStr)

    Vypíše řetězec s odřádkováním na terminál.

  • void term_send_num(long int iNum)

    Vypiše celé číslo na terminál.

  • void term_snd_real(long intn, long desn)

    Vypiše desetinné číslo na terminál.

  • void term_send_hex(long int iNum)

    Vypíše 16-bitové číslo v šesnáctkové soustavě.

  • strcmpN(a, b)

    Makro k porovnání N prvních znaků ve dvou řetězcích.

  • WDG_init()

    Inicializace watchdog časovače. Aby watchdog pracoval musi byt při překladu libfitkit definovan WDG_ENABLE.

  • WDG_reset()

    Watchdog, musí být voláno každých nejvíce 8.9 ms, jinak dojde k resetu MCU.

  • WDG_stop()

    Zastavi watchdog.

  • void terminal_idle(void)

    Obsluha terminálu.

  • int initialize_hardware(void)

    Počáteční inicializace MCU a knihovny libfitkit.

  • void delay_ms(unsigned long msecs)

    Čekání po určitou dobu. Parametr msecs je milisekundách.

  • extern unsigned char CMDStr[MAX_COMMAND_LEN+1]

    Sdílená proměnná obsahující aktuální přijatý text z terminálu.

  • extern unsigned char CMDUStr[MAX_COMMAND_LEN+1]

    Sdílená proměnná obsahující aktuální přijatý text z terminálu zarovnaný na velká písmena.

  • extern volatile unsigned char CMDStrLen

    Sdílená proměnná osahující délku aktuálního příjatého textu z terminálu.

Zobrazeno: 2697x Naposledy: 19.11.2017 08:48:19