W celu uproszczenia zapisu zdefiniowałem nowy typ u8, zawsze to mniej pisania niż uint8_t lub niejednoznaczny uint.
Kod:
///////////////////////////////////////////////////////////////////////////////////////////////////
// TWI write buffor
// addr - adres ukladu, *buffer - wskaznik do bufora danych, length - ilosc bajtow
void twic_write_buf(u8 addr, u8 *buffer, u8 length)
{
u8 i;
//nadaj adres slave
TWIC.MASTER.ADDR = addr; //adres ukladu + WR,
//generuje START
while(!(TWIC.MASTER.STATUS&TWI_MASTER_WIF_bm)); //wait for WIF
//petla wysylania bajtow do slave
for (i=0;i<length;i++)
{
twic_result=twic_test_result(); //wez status operacji
if (twic_result!=TWI_ACK) return; //ACK idz dalej,
TWIC.MASTER.DATA = *buffer++; //wskaznik do bufora danych
while(!(TWIC.MASTER.STATUS&TWI_MASTER_WIF_bm)); //wait for WIF
};
//zakonczenie wysylania danych do slave
TWIC.MASTER.CTRLC=TWI_MASTER_CMD_STOP_gc; //rozkaz STOP dla TWI
twic_result=TWI_OK; //poprawna operacja
}
Na bazie tych trzech funkcji możemy napisać obsługę dowolnego układu z innterfejsem I2C /PCF8574, 24c512, Si570, itd. /.