Koleżankom i Kolegom Radioamatorom, Krótkofalowcom,
Konstruktorom i Waszym Rodzinom – w tych trudnych czasach –
po dotkliwej awarii naszego forum
Pogodnego czasu po Bożym Narodzeniu,
Dosiego Nowego Roku
oraz Radosnych Trzech Króli

Życzy Zespół Home Made

Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
ATxMega128 i TWI - problemy... cd
#9
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. /.
73 Adam
Odpowiedz


Wiadomości w tym wątku
ATxMega128 i TWI - problemy... cd - przez SP2GNB - 11-12-2016, 21:53

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości