Guten Abend,
ich weiß das es dazu jede Menge Beiträge gibt, aber ich finde den Fehler
einfach nicht. Vl siehts ja einer von Euch direkt.
Ich versuche mit einem möglichst einfachen Programm das USARTE0 auf dem
XMega256 zum laufen zu bringen. Hier die Initialisierung:
init_USART:
ldi temp, 0b00001000
sts PORTE_DIRSET, temp
sts PORTE_OUTSET, temp
lsr temp
sts PORTE_DIRCLR, temp
ldi temp, 0
sts USARTE0_CTRLA, temp
ldi temp, 0b00011000
sts USARTE0_CTRLB, temp
ldi temp, 0b00000011
sts USARTE0_CTRLC, temp
ldi temp, 0b11100101
sts USARTE0_BAUDCTRLA, temp
ldi temp, 0b10111100
sts USARTE0_BAUDCTRLB, temp
ret
In der ISR eines timers versuch ich dann alle paar hundert ms mit diesem
code
TD1_OVERFLOW:
lds temp, USARTE0_STATUS
sbrs temp, USART_DREIF_bp
rjmp TD1_OVERFLOW
lds temp, 'A'
sts USARTE0_DATA, temp
reti
ein Zeichen an den PC (hterm) zu senden. Das gnaze geht noch über einen
FT232 und einen ADUM1201. Wenn ich RXD und TXD direkt vor dem AVR (also
hinter Koppler und USB) verbinde, bekomme ich mit hterm alle gesendeten
Zeichen korrekt zurück - der Teil ist also wohl ok. Lasse ich den AVR
dann aber Senden wie oben beschrieben, bekomm ich die falschen Zeichen
im Terminal. Das Problem liegt vermutlich bei meinem Program (Baudrate?)
- ich seh aber nicht wo. Die Baudrate habe ich (unter anderem) mit
diesem: (http://prototalk.net/forums/showthread.php?t=188) tool
berechnet, im Fall oben 1200 Baud.
Der AVR läuft im Moment auf dem 2MHz RC_Oszillator, aber auch 16 oder 32
MHz aus dem 16MHz Quarz abgeleitet haben keine Besserung gebracht.
Vielen Dank für Eure Hilfe!
Nicolas
Servus, Nicolas schrieb: > ich weiß das es dazu jede Menge Beiträge gibt, aber ich finde den Fehler > einfach nicht ich kann nur schwer deinen Code lesen. Bitte mehr kommentieren! zB Beispiel: ; USARTE0 - PE3 (TXD0) as output Leider bin ich kein Assembler-Spezialist aber ich empfehle dir mal auf diese Seit http://ax-hpage.de/xplain.html zu schauen. - Atxmegas in Assembler - gut beschrieben - Beispielcode (USART und Vieles mehr) weiter viel Spaß wünscht XMEGA
Hallo, danke für den Tipp, XMEGA - da kann ich sicher auch was abschauen. Den Fehler hab ich gefunden: Anstelle von lds temp, 'A' muss es ldi temp, 'A' heißen. Dann sendet man nämlich auch das 'A' und nicht was auch immer an der Speicheradresse 'A' steht. Arg!!! Viele Grüße Nicolas
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.