SDK poskytuje funkce, které vás nechají přistupovat přímok vlastnostem hardware na Picu. Jsou to velmi jednoduché obaly (wrappers) kolem základních mechanismů práce s hardwarem — paměťově mapované registry (memory-mapped registers). Můžete si myslet, že obcházení SDK a programování přímo před přístup k hardware je efektivnější a lepší, ale není. SDK je tak tenký obal nad hardware, že je velmi málo případů, kdy ušetříte nějaké zlomky mikrosekund přímým přístupem k hardwaru. Jediný důvod proč se učit jak používat paměťově mapované registry spočívá v tom, když narazíte na situaci, kde SDK neposkytuje funkci, která by dělato to, co potřebujete. V tomto článku se podíváme, jak používat přímo hardware pomocí jednoduchým programů.

Registry

N2které jiné procesory používají speciální způsoby připojování zařízení, avšak Pico procesor používá běžnější způsob, paměťově mapované registry. Tak každé zařízení je reprezentováno množinou oblastí v paměti neboli "registry", které je mohou řídit. Každý bit v registru určuje nejakou vlastnost zařízení nebo způsob jak vlastnost nastavit. Skupina registrů může být vyjádřena typem short int, které nastavují hodnoty nebo režimy práce.

Jak přistupovat k registru? Jednoduše, buď do registru uložíme hodnotu (zápis) anebo obsah registru uložíme do nějaké proměnné (čtení). To není v Céčku žádná novinka. Rozdíl je jen v tom, že neodkazujeme na adresu paměti poskytovanou systémem, ale přímo na pevnou adresu, kterou najdeme v dokumentaci. Můžete používat ukazatel, ale takový, který je inicializován konstantou nebo literálem. Například, podíváme-li se do dokumentace, tak najdeme, že GPIO registry sedí na adrese 0x40014000. Konkrétní registr je pak definován offsetem k této základní adrese.

Tabulka 1. Příklad tabulky GPIO registrů
Offset Jméno registru Popis

0x000

GPIO0_STATUS

stav GPIO0

0x004

GPIO0_CTRL

řízení GPIO0 včetně funcí select a overrides

0x008

GPIO1_STATUS

stav GPIO1

0x00c

GPIO1_CTRL

řízení GPIO1 včetně funcí select a overrides

a tak dále až dolů

0x0ec

GPIO29_CTRL

řízení GPI29 včetně funcí select a overrides

Je vidět, že pro každou GPIO linku (od GP0 až po GP29) máme dva registry, jeden stavový registr a jeden řídící.

Single-Cycle IO Block

SDK funkce pro nastavení

Příklad č.1 — události

Příklad č. 2 PAD — Pull, Drive a Schmitt

Hlubinné potápění

Zdroje a odkazy