Forum: Mikrocontroller und Digitale Elektronik Atmega128: Problem bei USAR-Schnittstelleninitialisierung


von Bernd (Gast)


Lesenswert?

Ich möchte bei einem atmega128 eine der beiden seriellen Schnittstellen
initialisieren. Ich komme aber nichtmal bis zum Einstellen der
Baudrate. Ich habe sie in r16 und r17 gespeichert und wie folgt
initialisiert:

; Baudrate einstellen
        out UBRR1L, r16
        out UBRR1H, r17

Der Assembler (AVR-Simulator von ARVStudio4) bringt aber immer den
Fehler: "Illigal argument type or count".

Ich hab auch schonmal versucht direkt die Adressen für UBRR1L und
UBRR1H einzugeben ($98 und $99 wenn ich mich nicht irre). Aber der
Fehler tritt generell ab allen Adressen gößer $3F auf. Für kleinere
Adressen funktionniert die Zuweisung.
Kann mir jemand weiterhelfen?

P.S.
Weis jemand wie ich eine 7-Bitübertragung ohne Parität mit einem
Startbit und 2 Stopbits initialisiere. Ich komm da mit dem Datenblatt
nicht so ganz klar...

von Andi K. (Gast)


Lesenswert?

Die Befehle OUT und IN gehen nur in den gemapten I/O-Bereich von 0x00
bis 0x3F (0x20 bis 0x5F).
Zugriff auf die Reister oberhalb der Marke 0x5F geht nur mit LDS statt
IN und STS statt OUT.

Z. B.:
        STS UBRR1L, r16
        STS UBRR1H, r17

Eine Umrechnung der Adresse (+0x20) ist nicht erforderlich da für die
"hohen" Register über 0x5F die ware Adresse definiert ist.

MfG
Andi

von Andi K. (Gast)


Lesenswert?

Ach ja, um sich damit nicht herumschlagen zu müssen, kann man das mit
Macros gut handeln:

.macro OUTI    ;OUT immediate Byte
  ldi  r16,@1  ;OUTI Adresse,Wert (8 Bit)
  .if @0>0x3F
    sts  @0,r16
  .else
    out  @0,r16
  .endif
.endm

.macro OUTR      ;OUT Byte von Register
  .if @0>0x3F    ;OUTR Adresse,Register
    sts  @0,@1
  .else
    out  @0,@1
  .endif
.endm

;Und noch was zum einlesen:
.macro INR      ;IN Byte in Register
  .if @0>0x3F    ;IN Register,Adresse
    lds  @0,@1
  .else
    in  @0,@1
  .endif
.endm

Bei festen Werten nimmt man einfach OUTI Adresse,Wert und bei in einem
Register berechneten Wert OUTR Adresse,RN (register r0 bis r31).

MfG
Andi

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
Noch kein Account? Hier anmelden.