Hi, warum ist denn z.B. beim ATmega16 das URSEL-Bit notwendig? Wieso kann man UCSRC nicht wie jedes andere Register auslesen und schreiben? mfg PoWl
Ich zitiere: > When the function writes to the UCSRC Register, > the URSEL bit (MSB) must be set due to the sharing > of I/O location by UBRRH and UCSRC. UBRRH und UCSRC haben dieselbe Adresse :) . Durch das Bit sagt man ihm, was man beim Schreiben an diese tatsächlich ändern möchte. Und weiter: > The UBRRH Register shares the same I/O location as the UCSRC Register. > Therefore some special consideration must be taken when accessing > this I/O location. > When doing a write access of this I/O location, the high bit of the > value written, the USART Register Select (URSEL) bit, controls which > one of the two registers that will be written. If URSEL is zero during > a write operation, the UBRRH value will be updated. If URSEL is one, > the UCSRC setting will be updated. Siehe Datenblatt "USART -> Accessing UBRRH/ UCSRC Registers" Seite 162.
OK, danke, ich meinte jetzt aber eher, was die AVR-Entwickler dazu getrieben hat diesen zusätzlichen Umstand einzuführen. Gabs da ein Problem?
Schau mal im Datenblatt auf Seite 331. Die I/O Locations liegen zwischen 0x20 und 0x5F, ab 0x60 beginnt der "richtige" SRAM. Scheinbar sind aber alle belegt. Deswegen dieser Umweg. Bei neueren AVRs können die I/O Locations auch über 0x5F hinausgehen, aber wahrscheinlich wollten sie die Kompatibilität zu anderen Atmegas aus der Reihe erhöhen. Bitte melden, wenn ich Schmarrn erzähle, das hab ich mir grad so zusammengereimt...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.