We wcześniejszym wątku "I2C - Nie czuję TWI_start() rozdz. 5.9.1 z "niebieskiej" " nie mogłem zrozumieć tego kawałka
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W pierwszej chwili wydaje się , że jak wpisałem 1 do TWINT-a w pierwszej linijce, to druga jest niepotrzebna, bo program zawsze ją obejdzie. Tak jak np. w poniższym kawałku, while(...) też jest niepotrzebne.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Dodatkowo przy opisie TWI_start() na str 279 nie mogłem zrozumieć zdania z pdfu dokumentacji ATMELA32
Cytuj:
Wyzerowanie (bitu TWIN - dop. autora) polega na ustawieniu tego bitu na 1
Dla mnie to brzmiało tak jak np "zgaszenie lampki polega na jej zapaleniu" itd.
W końcu zacząłem szperać w literaturze i doszedłem do wniosku że że ten tekst
Cytuj:
Wyzerowanie (bitu TWIN - dop. autora) polega na ustawieniu tego bitu na 1
jest skrótem czegoś takiego.
Słońce zaświeciło i wszystko stało się jasne i logiczne!Cytuj:
- wartością początkową TWIN w rejestrze TWCR jest 0
- wpisanie 1 do TWIN powoduje, że zostaje zapoczątkowany ciąg zdarzeń określony przez wpisanie pozostałych jedynek do TWEN i i TWSTA -->zostanie przeprowadzona akcja startu I2C.Najważniejsze - Na początku następnej instrukcji tj while(...) bit TWINT zostanie wyzerowany! I to jest to że "wpisanie 1 do TWINT-a powoduje jego wyzerowanie!"
- Gdy ponownie TWINT = 1 to oznacza , że proces startu został przeprowadzony prawidłowo! Program przejdzie while(...) i będzie robił swoje
Proszę zauważyć,że teraz TWINT=1. Chcąc zapoczątkować inną akcję np
TWI_write(znak) należy ponownie wpisać 1 do TWINT-a (chociaż jest w nim 1!). Znowu rozpocznie się ciąg zdarzeń który wpisze znak do czegoś tam. Też z TWINT-a zrobi się 0 i ponownie 1, gdy znak zostanie gdzieś wpisany.