Witam wszystkich
Mój wątek dotyczy obsługi przerwania TWINT
Proszę o pomoc w zrozumieniu jego obsługi. Konkretnie chodzi mi o np. funkcja TWI_start
i poniższy zapis
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W opisie do funkcji (zamieszczonym w niebieskiej książce str. 280) przedstawiona linijka jest opisana jako „… czekamy w pętli while() aż zostanie ponownie ustawiona flaga TWINT co będzie oznaczało iż układ startowy poprawnie wykonał sekwencję startu”
Po lekturze PDF-ów zrozumiałem że bit TWINT w rejestrze TWCR ustawiany jest na 0 po wykonaniu np. sekwencji startu.
Linijkę wyżej ustawiliśmy 1<<TWINT ok. odblokowaliśmy przerwanie.
Więc
TWCR & (1<<TWINT) = 1 logiczna negacja 1 => otrzymujemy !1=0
Powyższy warunek w funkcji while() jest niespełniony, jak rozumiem ten fragment kodu nie zostanie wykonany, program przejdzie do wykonywania dalszych poleceń np. wysyłania adresu (funkcja TWI_write_buf()). A przecież ma czekać na TWINT=0, jeśli ma czekać to powinien wejść do pustej funkcji while().
tymczasem wejdzie do niej dopiero gdy zakończy wykonywanie zadania, TWINT=0
Jeśli w pętli while() mamy czekać na zakończenie wykonywania aktualnej sekwencji to nie bardzo rozumiem w jaki sposób?
Bardzo proszę o rozjaśnienie tego zagadnienia.
Z góry dziękuję za pomoc
pozdrawiam wszystkich grupowiczów.
A. G.