piątek, 1 kwietnia 2011

Pułapki AVR: Rejestry pod tym samym adresem


Autor: Dondu

Artykuł jest fragmentem cyklu: Pułapki mikrokontrolerów AVR

Każdy rejestr ma swój adres w przestrzeni adresowej mikrokontrolera. Możesz to zobaczyć w tabeli Register Summary w datasheet Twojego AVR-a.

Ale są wyjątki ! Takim wyjątkiem są rejestry UCSRCUBRRH. Znajdują się one bowiem pod jednym i tym samym adresem 0x20:



Na tę pułapkę nadział się prawie każdy początkujący:

davidpi
ATMega 8 USART Prędkość wysyłania, czemu tak wolno? ... Z jaką ja prędkością to w końcu wysyłam?? Czy na pewno 9600bps czy może coś pokręciłem?


Jak to możliwe, że dwa rejsetry są pod tym samym adresem?
Oczywiście bez pewnego tricku, nie może być dwóch rejestrów pod jednym adresem. Zauważ, że oba rejestry mają wspólny jeden bit URSEL, który jest najstarszym bitem (bit 7) obu rejestrów:


Na czym polega trick?
Rolą bitu URSEL jest przełączanie pomiędzy rejestrami UBRRH i UCSRC w czasie ich zapisu lub odczytu adresu 0x20. Jeżeli:
  • URSEL = 0 - operujesz na rejestrze UBRRH
  • URSEL = 1 - operujesz na rejestrze UCSRC

Dokładny opis jak posługiwać się tymi rejestrami w językach C oraz assembler znajdziesz w datasheet w dziale: Accessing UBRRH/UCSRC Registers. 

davidpi
Oki. Już rozumiem o co chodzi z tym bitem URSEL. Musi być ustawiony gdy wpisujemy do UCSRC. Gdy URSEL=0, to wpisujemy do UBRRH. Dzięki za pomoc



Zobacz pozostałe pułapki AVR


1 komentarz: