-
1. Data: 2009-09-25 15:39:13
Temat: AVR ATMEGA8 i2c moze ktos wyjasnic niejasnosc?
Od: "roxy" <k...@o...pl>
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
-
2. Data: 2009-09-25 20:12:14
Temat: Re: AVR ATMEGA8 i2c moze ktos wyjasnic niejasnosc?
Od: Adam Dybkowski <a...@4...pl>
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.
-
3. Data: 2009-09-26 13:17:54
Temat: Re: AVR ATMEGA8 i2c moze ktos wyjasnic niejasnosc?
Od: "roxy" <k...@o...pl>
> 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
-
4. Data: 2009-09-26 15:33:53
Temat: Re: AVR ATMEGA8 i2c moze ktos wyjasnic niejasnosc?
Od: "roxy" <k...@o...pl>
> 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
-
5. Data: 2009-09-27 21:29:06
Temat: Re: AVR ATMEGA8 i2c moze ktos wyjasnic niejasnosc?
Od: Adam Dybkowski <a...@4...pl>
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.