logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Mega8 - USART: Problem z konfiguracją rejestru UCSRC w AtmelStudio 6

walek33 09 Lip 2014 23:56 1053 7
  • #1 13782781
    walek33
    Poziom 29  
    Witam. Pocę się przy pisaniu w AtmelStudio 6. Mam problem z konfiguracją wspomnianego USART-a. Używam, a przynajmniej próbuję tym kodem:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    W wielu różnych źródłach uznawany jest za prawidłowy. Przy debugowaniu zastanawia mnie całkowity brak reakcji rejestru UCSRC na zmiany, które moim zdaniem powinny nastąpić po przejściu przez przedostatni wiersz (nawiasu nie liczę).
    Zmiany pojawiają się po podziale rzeczonej linii na dwie.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Ale podział powoduje zapisanie zarówno UCRSC jak i UBRRH tymi samymi wartościami. Czy może mnie ktoś oświecić na czym polega mój (z całą pewnością) błąd? Będę bardzo wdzięczny.
  • Pomocny post
    #2 13783062
    gaskoin
    Poziom 38  
    Nie dziwota, że nie ma zmiany, skoro to są wartości domyślne tego rejestru. Polecam czytać datasheet.
  • Pomocny post
    #3 13783188
    perlon
    Poziom 20  
    Dodam tylko że
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    to nie to samo co
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    ponieważ w pierwszym przypadku bit URSEL po drugim wierszu zostanie wyzerowany
  • #4 13786128
    walek33
    Poziom 29  
    :arrow:gaskoin
    Czytałem i zgadzam się z Tobą, że są to wartości domyślne. Ale zastanawia mnie to, że przy debugowaniu, po uruchomieniu programu nie widać ich w rejestrze. Stąd próba ustawienia wartości, która jak wspomniałem nie przynosi żadnej (widocznej w AtmelStudio) zmiany rejestru. Zresztą wspomniany datasheet sugeruje właśnie ten sposób inicjalizacji USART-a. Kod jest żywcem z niego zerżnięty. ;)
  • #5 13787703
    gaskoin
    Poziom 38  
    Wiem, że to z datasheeta. Zaleca się mimo wszystko taką konfigurację, mimo, że nic ona nie zmienia, ponieważ zwiększa to czytelność tego, co się napisze. Ktoś może czytać potem kod i myśleć "WTF? Jak to działa skoro gościu nic nie skonfigurował". Poza tym nie wiadomo co tam producent zmieni w przyszłej rewizji.
  • #6 13796842
    walek33
    Poziom 29  
    A nie orientujesz się może czemu te dwa nieszczęśniki są wygaszone po starcie debuggera? UCRSA->UDRE jest domyślnie ustawiony na 1 i to widać. Dziś próbowałem ustawić parzystość UPM1 i UPM0 na jedynki. Domyślnie parzystość jest zablokowana, czyli bity mają wartość 0. Też brak widzialnych w debuggerze zmian. Czy go trzeba jakoś specjalnie skonfigurować?
  • #7 13796874
    gaskoin
    Poziom 38  
    Ale debugujesz fizyczny układ czy symulator ?
  • #8 13796910
    walek33
    Poziom 29  
    Symulacja w AtmelStudio

    Dodane:
    Po kilku nerwowych zabiegach postanowiłem sprawdzić rzeczony rejestr (UCSRC) za pomocą:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Zostałem przez powyższą funkcję mile zaskoczony. Zwróciła wartość 0x86 przy:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    i 0xB6 dla:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    co oznacza prawidłowy zapis wartości rejestru przy konfiguracji. Drażni mnie jednak brak podglądu w czasie debugowania. Nie pokazuje także wartości zapisywanej do UDR-a.
REKLAMA