Forum: Compiler & IDEs Probleme mit UART init beim ATmega128


von Tomasz (Gast)


Lesenswert?

Hallo,

ich habe mit meiner UART_init-Routine compile-Probleme. Ich bekomme
unter avr-gcc (GCC) 3.4.1 folgende Meldung:

Assembling: uart.S
avr-gcc -c -mmcu=atmega128 -I. -x assembler-with-cpp
-Wa,-adhlns=uart.lst,-gstabs  uart.S -o uart.o
uart.S: Assembler messages:
uart.S:88: Error: number must be less than 64
make.exe: *** [uart.o] Error 1

Der entsprechende Code ist:

;          r25/r24
;void uart_init(u16 BaudRate)
.global uart_init
uart_init:
    out    UBRR0H, r25     // Das ist die Zeile 88
    out    UBRR0L, r24
    ldi    r25, (1 << RXCIE0) | (1<<RXEN0) | (1<<TXEN0)
    out    UCSR0B, r25
    sei
    ret

Aufrufen tue ich das im main.c mit "uart_init(UART_BAUD_SELECT_0);",
dabei hat UART_BAUD_SELECT_0 den Wert 7.

Was ist falsch dran? Wie kann ich es lösen (außer den UBRR0H Wert auf
default zu lassen)?

von Jens123 (Gast)


Lesenswert?

Wieso ASM???

das klappt doch auch prima in c?

von Volkmar (Gast)


Lesenswert?

Hallo Tomasz,

UBRR0H liegt nicht in dem Bereich (0-63), den Du mit out ansprechen
kannst. Habe lange nichts mehr mit ASM gemacht, aber mit STS sollte es
gehen.

Volkmar

von Tomasz (Gast)


Lesenswert?

Hi Volkmar,

mit STS geht's, danke!

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.