AVR ATMEGA8 i2c moze ktos wyjasnic niejasnosc?

Sep 25, 2009 4 Replies

Mam pytanie: czy na zamieszczonym ponizej fragmencie programu zasada generowania sygnalu potwierdzenia ACK jest taka ze po odebraniu wlasnego adresu uklad sleve generuje ACK po napotkaniu polecenia:



"TWCR|=(1<<TWEA)|(1<<TWINT); // potwierdza to wygenerowaniem do mastera syg ACK"



czy mo¿e zasada jest taka ¿e slave odbiera swoj adres automatycznie generuje ACK a dzialanie polecenia: "TWCR|=(1<<TWEA)|(1<<TWINT); // potwierdza to wygenerowaniem do mastera syg ACK" jest takie aby po odebraniu nastepnego bajtu (ktory przychodzi po adresie) wygenerowaæ ACK.



sadze ze jasno sie wyrazilem.


Oto fragment funkcji obslugi przerwan od twi ISR(TWI_vect) { switch (TW_STATUS) // sprawdzam status twi po zgloszeniu przerwania { case TW_BUS_ERROR: // blad na magistrali TWI - nieprawidlowy sygnal stopu/startu { TWCR|=(1<<TWSTO)|(1<<TWINT); // jezeli wystapil blad na mag. twi to ustaw SCL i SDA w HIZ



break; } case TW_SR_SLA_ACK: // slave zostal wywolany przez odbior wlasnego adresu { TWCR|=(1<<TWEA)|(1<<TWINT); // potwierdza to wygenerowaniem do mastera syg ACK break; } ..... . ...... ...



} //end switch



}



__________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur wirusow 4457 (20090925) __________



Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.



formatting link
lub
formatting link


roxy pisze:

To drugie. Bit TWEA służy do włączenia (1) / wyłączenia (0) automatycznej generacji ACKów przy pracy ATmegi w trybie slave.

Zapisanie jedynki do bitu TWINT natomiast zeruje stan tego bitu czyli potwierdza przyjęcie przerwania ("The TWINT Flag must be cleared by software by writing a logic one to it").

A jaka sekwencj± rozkazow powinienem zakonczyc odbior ostatniego bajtu przez slave zakonczona transmisj± NACK

np. case TW_SR_DATA_NACK: { buf[5]=TWDR; TWCR|= ;// iteraz co wpisac do TWCR aby bylo poprawnie????

}

__________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur wirusow 4459 (20090926) __________

Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.

formatting link
lub
formatting link

Jeszcze jedno pytanie. Co wpisac do rejestrru TWCR gdy po sprawdzeniu statusu TWSR zostanie wykonany fragment :

case TW_BUS_ERROR: // blad na magistrali TWI - nieprawidlowy sygnal stopu/startu { .... n=twi_recive_buf[0]=0; TWCR=??? // co tu wlasciwie ma byæ??? break; }

__________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur wirusow 4459 (20090926) __________

Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.

formatting link
lub
formatting link

roxy pisze:

Co tu dużo tłumaczyć - zobacz po prostu, jak to jest zrobione w sterownikach otwartych systemów operacyjnych, np. Nut/OS

formatting link
najlepiej ściągnąć najnowszą wersję przez SVN), kod znajdziesz po rozpakowaniu/instalacji źródeł systemu w pliku nut/arch/avr/dev/twif.c

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required