User Manual

106
void I2CTWI_transmitBytes(uint8_t targetAdr,uint8_t *msg,uint8_t numberOfBytes)
Základem této funkce bude přenos maximálně 20 byte na specifikovanou adresu. Pro přenos
větších bloků dat můžete v hlavičkovém souboru zvětšit konstantu I2CTWI_BUFFER_SIZE.
Při zadání registru pro přenos dat můžete jednoduše použít první byte bufferu.
Používání těchto funkcí je skutečně jednoduc:
I2CTWI_transmit2Bytes(10, 2, 128);
I2CTWI_transmit2Bytes(10, 3, 14);
I2CTWI_transmit3Bytes(64, 12, 98, 120);
Předchozí příklad postupně přenese dvakrát dva byte do zařízení slave s adresou 10 a le tři
byte do slave s adresou 64. Další funkce transmitXBytes se používá podobným způsobem.
Další příklad:
uint8_t messageBuf[4];
messageBuf[0] = 2; // zde muzete specifikovat adresu registru
messageBuf[1] = 244; // data...
messageBuf[2] = 231;
messageBuf[3] = 123;
messageBuf[4] = 40;
I2CTWI_transmitBytes(10,&messageBuf[0],5);
Tímto způsobem můžete přes sběrnici I
2
C přest více byte (v tomto případě 5).
Výše popsané funkce nebudou blokovat průchod programu, dokud nebude sběrnice I
2
C
zaneprázdně. Zaneprázdnění sběrnice I
2
C způsobí, že funkce čeká, než se dokončí echny
přenosy. Proto vám kontrola dokončení před voláním funkce umožní provádět další činnost
během probíhajícího přenosu. Přenos dat pomocí sběrnice I
2
C je časově relativně roč
v porovnání s rychlosmikroprocesoru a kontrolou můžete uspořit spoustu času.
Následující makro signalizuje zda je TWI modul zaneprázdněn nebo ne:
I2CTWI_isBusy()
pokud je modul volný, mohou se přenášet nová data.
Příjem dat
Knihovna RP6Library poskytuje několik alternativ příjmu dat. Nejprve představíme r
blokoch funkcí, které byly navrženy analogicky k funkcím zápisu. Dále probereme funkce pro
příjem dat na pozadí.
Nejprve jednoduc bloková funkce pro čtení dat:
uint8_t I2CTWI_readByte(uint8_t targetAdr);
Tato funkce čte jeden byte ze zařízení slave. Tato funkce může být použita samostatně,
obvykle předm přenese číslo registru pomocí I2CTWI_transmitByte.
Pokud byste chtěli například číst registr 22 ze zařízení slave s adresou 10:
I2CTWI_transmitByte(10, 22);
uint8_t result = I2CTWI_readByte(10);