W jaki sposób w trakcie działania programu na uC zmienić prędkość transmisji - Baud Rate? Napotkałem następujący problem, na który nie znalazłem niestety odpowiedzi. Transmisja ma przebiegać UARTem między PC a uC (ATmega32). Aplikacja uC ma mieć możliwość zmiany Baud Rate w czasie pracy.
Załóżmy, że chcąc połączyć się z PC z BR 115200:
1. Łączę się najpierw z uC z BR 19200.
2. Wysyłam komunikat o zmianie BR.
3. uC konfiguruje UART.
4. PC się rozłącza i ponownie łączy z BR 115200.
Problemem jest punkt 3. Próbowałem wykonać zmianę prędkości na uC w taki sposób:
1. Wyłączenie przerwań po odebraniu komunikatu o zmianie BR.
2. Ustawienie rejestrów BR w UART.
3. Uruchomienie przerwań i inicjacja UART.
Niestety po ponownym połączeniu PC z prędkością BR 115200 przy transmisji uC się wiesza albo wpada gdzieś w pętlę.
Program na PC napisany jest w C#, wysyłanie komunikatu o zmianie transmisji działa prawidło. Fragment kodu odpowiedzialny za tą transmisję:
Program uC (pisany w C) rozpoznaje komunikat i przechodzi do odpowiedniej sekwencji. A oto, co próbuję w niej zrobić:
Do komunikacji UART wykorzystuję bibliotekę Pana Jespera Hansena, którą można znaleźć tutaj.
Kwarc oczywiście okrągły dla UART - 11.0592 MHz.
Załóżmy, że chcąc połączyć się z PC z BR 115200:
1. Łączę się najpierw z uC z BR 19200.
2. Wysyłam komunikat o zmianie BR.
3. uC konfiguruje UART.
4. PC się rozłącza i ponownie łączy z BR 115200.
Problemem jest punkt 3. Próbowałem wykonać zmianę prędkości na uC w taki sposób:
1. Wyłączenie przerwań po odebraniu komunikatu o zmianie BR.
2. Ustawienie rejestrów BR w UART.
3. Uruchomienie przerwań i inicjacja UART.
Niestety po ponownym połączeniu PC z prędkością BR 115200 przy transmisji uC się wiesza albo wpada gdzieś w pętlę.
Program na PC napisany jest w C#, wysyłanie komunikatu o zmianie transmisji działa prawidło. Fragment kodu odpowiedzialny za tą transmisję:
Kod: C#
Program uC (pisany w C) rozpoznaje komunikat i przechodzi do odpowiedniej sekwencji. A oto, co próbuję w niej zrobić:
Kod: C / C++
Do komunikacji UART wykorzystuję bibliotekę Pana Jespera Hansena, którą można znaleźć tutaj.
Kwarc oczywiście okrągły dla UART - 11.0592 MHz.