Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

AVR ATMEGA8 i2c moze ktos wyjasnic niejasnosc?

20 views
Skip to first unread message

roxy

unread,
Sep 25, 2009, 11:39:13 AM9/25/09
to
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.

http://www.eset.pl lub http://www.eset.com


Adam Dybkowski

unread,
Sep 25, 2009, 4:12:14 PM9/25/09
to
roxy pisze:

> 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.

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").

--
Adam Dybkowski
http://dybkowski.net/

Uwaga: przed wys�aniem do mnie maila usu� cyfry z adresu.

roxy

unread,
Sep 26, 2009, 9:17:54 AM9/26/09
to
> 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").
>
> --
> Adam Dybkowski
> http://dybkowski.net/
>

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) __________

roxy

unread,
Sep 26, 2009, 11:33:53 AM9/26/09
to

> 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????
>
> }
>

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;

Adam Dybkowski

unread,
Sep 27, 2009, 5:29:06 PM9/27/09
to
roxy pisze:

> A jaka sekwencjďż˝ rozkazow powinienem zakonczyc odbior ostatniego bajtu
> przez slave zakonczona transmisjďż˝ NACK

Co tu du�o t�umaczy� - zobacz po prostu, jak to jest zrobione w
sterownikach otwartych system�w operacyjnych, np. Nut/OS
(www.ethernut.de, najlepiej �ci�gn�� najnowsz� wersj� przez SVN), kod
znajdziesz po rozpakowaniu/instalacji �r�de� systemu w pliku
nut/arch/avr/dev/twif.c

--
Adam Dybkowski
http://dybkowski.net/

Uwaga: przed wys�aniem do mnie maila usu� cyfry z adresu.

0 new messages