User Manual
103
Pole a proměnné se obecně nazývají:
I2CTWI_readRegisters, I2CTWI_writeRegisters a I2CTWI_genCallCMD
Registry pro čtení se nazývají I2CTWI_readRegisters a registry pro zápis
I2CTWI_writeRegisters. Do proměnné I2CTWI_genCallCMD se ukládá většina zbývajících
přijatých příkazů General Call. Výměna dat v režimu slave kompletně pracuje s těmito registry.
V případě, že máte data dostupná na sběrnici vložíte je do pole I2CTWI_readRegisters. Master
nyní může tato data číst přes adresu příslušného místa v poli (shodnou s číslem registru). Pro
příklad, pokud master musí přečíst data snímače ze slave, má slave nejprve vložit informaci do
předem určené pozice v poli I2CTWI_readRegisters. Pak může master číst data přenesením
čísla registru a následuje čtení vlastní informace. Číslo registru se automaticky zvýší, což
umožňuje, aby master četl několik registrů v jediném průběhu.
Podobný postup se bude provádět při zápisu dat. Master na začátku vyšle číslo registru a pak
začne přenášet data. Analogicky se, stejně jako při čtení, automaticky zvýší adresa registr. To
masteru umožňuje zápis do několika registrů v jediném průběhu. Celá obsluha režimu slave
běží, díky přerušení, na pozadí.
Pokud se při zápisu používají data současně s adresou, nemusí být datová struktura
konsistentní. Pokud se čtou data z jednoho registru, může mezitím master přepsat další data
svázaná s tímto registrem. Lepší způsob obsluhy těchto přenosů je přechodné uložení adresy
umístění. Čtení dat může také vést k nejednoznačnosti souvisejících proměnných (tj. dolního a
horního byte u 16-bitových proměnných).
I2CTWI_readBusy a I2CTWI_writeBusy
Obsluha přerušení nastaví proměnnou I2CTWI_writeBuisy na TRUE – a to se může použít ke
kontrole přístupu zápisu do těchto dat. Pokud je proměnná nastavena na FALSE, můžeme data
přenášet z registrů do dočasných proměnných a použít je pro další zpracování.
Tuto situaci demonstruje následující ukázkový program a příklad “slave” na CD – je zde
příkazový registr, který zařízení master používá k přenosu příkazů do slave (tj. “začni se
pohybovat dopředu, rychlostí 100”). Hlavní smyčka zařízení typu slave trvale vyhodnocuje
registr 0 dokud je proměnná I2CTWI_busy nastavena na FALSE. Po příchodu master příkazu
do registru 0 bude následovat přenos dat z registru 0 a registrů 1 až 6 do dočasných
proměnných, které se mohou později vyhodnotit. Parametr obvykle závisí na obsahu příkazové
proměnné. Parametr 1 může například popisovat hodnotu rychlosti pohybového příkazu a
parametr 2 směr. Ostatní parametry mohou být v tomto parametru ignorovány.
Proměnná I2CTWI_readBusy funguje podobně – nastaví se, jakmile se přečte registr a
umožňuje kontrolu připravenosti zápisu registrů a chrání před nejednoznačným čtením. Aktuální
implementace nemůže zaručit konsistenci na 100%, protože se během zápisu do registrů může
zrušit TWI přerušení, což může způsobit další komplikace...