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