Witam
Wysyłam z Terminala Braya do atmegi8 tekst "abcd", atmega odbiera te znaki i wysyła mi je powrotnie do terminala, częśc konfiguracji prędkości/bitów stopu mam za sobą.
Chcę dopiero po zakończonej transmisji do atmegi (po odebraniu ostatniego znaku) wysłać do terminala tekst typu: "Atmega odpowiada 'abcd' ".
Znalazłem w nocie katalogowej, że ustawiając:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
możemy wywołać przerwanie o wektorze USART_RXC_vect, które przechwytuje znak po znaku, (wrzucam je do tablicy i inkrementuje indeks tablicy). Wpisując w tej funkcji przerwania kod wysyłający "Atmega odpowiada..." dostaję 4x odpowiedź z każdą literą po kolei tzn.
odpowiadam a odpowiadam b odpowiadam c odpowiadam d
1. Rozumiem, że przerwanie wykonuje się po odebraniu każdego znaku stąd dostaję poczwórną odpowiedź z każdym znakiem po kolei? Innego wyjaśnienia nie widzę.
2. Zatem jaki macie skuteczny sposób na ustawienie sprzętowej flagi po zakończonym odbiorze całej ramki danych? Próbowałem też wywoływać przerwanie, kiedy bufor UDRE jest pusty, ale w pętli zapchałem terminal samym "odpowiadam" - dane się skończyły, a przerwanie wykonywało się ciągle.
3.Czy ustawienie flagi programowej i na niej operowanie jest też dobrym rozwiązaniem?
Widzę w nocie tutaj zależność między RXCIE w UCSRB oraz RXC w UCSRA, że ustawienie obu tych bitów w rejestrach wywołuje przerwanie po zakończonym odbiorze znaków lecz ustawiając jedynie RXCIE przerwanie się wykonuje, nie widzę efektu ustawienia bitu RXC w UCSRA
Nie proszę o gotowy kod, jedynie proszę o rozwianie moich wątpliwości oraz podpowiedź co muszę ustawić, by odpowiedź do Terminala została wysłana po zakończonej całkowitej transmisji.
Za wszelką pomoc będe wdzięczny.
Pozdrawiam
Mikołaj