RTV forum PL | NewsGroups PL

Jak działa generowanie sygnału potwierdzenia ACK w ATMEGA8 dla I2C?

AVR ATMEGA8 i2c moze ktos wyjasnic niejasnosc?

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak działa generowanie sygnału potwierdzenia ACK w ATMEGA8 dla I2C?

roxy
Guest

Fri Sep 25, 2009 4:39 pm   



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
Guest

Fri Sep 25, 2009 9:12 pm   



roxy pisze:

Quote:
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
Guest

Sat Sep 26, 2009 2:17 pm   



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

Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.

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

roxy
Guest

Sat Sep 26, 2009 4:33 pm   



Quote:
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;
}



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

Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.

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

Adam Dybkowski
Guest

Sun Sep 27, 2009 10:29 pm   



roxy pisze:

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

elektroda NewsGroups Forum Index - Elektronika Polska - Jak działa generowanie sygnału potwierdzenia ACK w ATMEGA8 dla I2C?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map