XMega128 und USART

OP #1215154
Lesenswert?
• ▲
▼
Moin,

ich versuche gerade die USART Schnittstelle eines XMega128A1 zum laufen 
zu bringen. Allerdings sendet der Controller einfach nicht das was ich 
will.

Ich probier es jetzt schon mit einem ganz einfachen Testprogramm:
1
int main (void) 
2
   {
3

4
   PORTE.DIR   = PIN3_bm;
5
   PORTE.OUT   = PIN3_bm;
6
  
7

8
   USARTE0.CTRLA = 0;
9
   USARTE0.CTRLB = 8; // senden einschalten
10
   USARTE0.CTRLC = 3; // 8 Bit
11
   USARTE0.BAUDCTRLB = 0;
12
   USARTE0.BAUDCTRLA = 12;
13

14

15

16
   USARTE0.DATA = 0xAA;
17
   USARTE0.DATA = 0xAA;
18

19
   for(;;)
20
      {
21
      } 
22
   }
und trotzdem wird nicht das gesendet, was eigentlich übertragen werden 
sollte. Hab ich hier irgendeine Feinheit übersehen oder was klappt 
nicht?

Senden tu ich wie man sieht 0xAA, am Terminal kommt 0x2A an. Und das 
Scop sieht sogar 0x95 und 0xF5.

Gruß Mike
Angehängte Dateien:
Gast #1215166
Lesenswert?
• ▲
▼
Du willst scheinbar 2 mal 0xaa versenden. Wartet da auch irgendjemand 
darauf, daß das 2te 0xaa ins Senderegister geschrieben werden darf, oder 
ist das da nicht erforderlich? Oedr verstehe ich da was falsch ?
OP #1215186
Lesenswert?
• ▲
▼
Das 2. mal 0xAA war einfach nur ein Test. Der Versuch nur ein 0xAA zu 
senden führt zu einem 0xF5 auf der Leitung.

Der XMega hat übrigens ein zweites Buffer Register, so daß es laut 
Datenblatt ohne Probleme möglich ist 2 Byte in die Register zu schieben 
und
so die Pause zwischen den Übertragungen zu elemenieren.

Normalerweise benutze ich auch lieber die Bitnamen, ich hab auch schon 
die ApNote von Atmel zur USART (incl. Beispielcode) probiert, aber das 
Ergebnis ist immer das gleiche. Deshalb was das hier der letzte Versuch 
um mögliche Fehler in den Headerdateien auszuschließen.
OP #1215242
Lesenswert?
• ▲
▼
So, habe mein Problem mitlerweile selber lösen können.

Hauptproblem war eine alte Version von HTerm, die gerne das erste 
empfangene Bit ignoriert bzw auf Null gesetzt hat.

Zwietens habe ich
1
   PORTE.DIR   = PIN3_bm;
2
   PORTE.OUT   = PIN3_bm;
noch die Abfolge der beiden Zeilen getauscht. Danach konnte auch das 
Scope die Daten richig dekodieren. Und das zwei Zeichen direkt 
hintereinander schreiben funktioniert tatsächlich ohne Probleme.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren