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.
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.
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.
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.