Forum: Mikrocontroller und Digitale Elektronik Atxmega 128a1


von Erik (Gast)


Angehängte Dateien:

Lesenswert?

Hallo alle zusammen
Ich versuche eine bibliothek(Ansteuerung) für nokia 5110 zu schreiben 
für Atxmega 128a1.Dafür habe ich  bibliothek von atmega8 genommen und 
versuche die umzuschreiben.Ständig kriege ich folgende 
Fehlermeldung:siehe Anhang

kann mir jemand sagen wie man dieser fehler lösen kann?

Für jeder Hilfe würde ich dankbar.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Erik schrieb:
> kann mir jemand sagen wie man dieser fehler lösen kann?

Indem du den Code wirklich portierst.

Das fängt doch schon damit an, dass ein ATxmega eben nun einmal
kein Register namens DDRB hat, sondern dass man dort mit PORTB.DIR
und dergleichen arbeiten muss.

p.s.: Wenn du das überflüssige Semikolon hinter dem #define für
den LCD-Port wegnimmst, könnten sich ja vielleicht erstmal die
Syntaxfehler in Luft auflösen …

: Bearbeitet durch Moderator
von Erik (Gast)


Lesenswert?

Danke fürs Antwort!

Soll ich auch statt PB1, PIN1_bp schreiben muss?

von Erik (Gast)


Angehängte Dateien:

Lesenswert?

Wenn so ist dann sieht er kein LCD_PORT

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Erik schrieb:
> Soll ich auch statt PB1, PIN1_bp schreiben muss?

Du musst erstmal das Datenblatt eines ATxmega lesen und verstehen.

Mit trial&error portiert man den Code von alten MegaAVR auf Xmega
keineswegs.

von Erik (Gast)


Lesenswert?

Wiso Antwortest du wenn du selber nicht weist?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Erik schrieb:
> Wiso Antwortest du wenn du selber nicht weist?

So wird das nichts. Wie Jörg schon sagte, ist die Syntax zwischen den 
ATMega und dem XMega deutlich geändert worden, so das es z.B. kein DDR 
Register mehr gibt, sondern PORT.DIRSET und PORT.DIRCLR.

Man schreibt auch nicht mehr (1<<PB2), sondern PIN2_bm, wie z.B. so:
1
  PORTF.DIRSET   = PIN3_bm;   // Pin 3 (TXD0) as output.
2
  PORTF.DIRCLR   = PIN2_bm;   // Pin 2 (RXD0) as input.
Du wirst den Grossteil des Codes umschreiben müssen, und evtl. an deiner 
Kommunikation arbeiten müssen, denn sonst werden dir hier nicht viele 
Leute weiterhelfen.

: Bearbeitet durch User
von Erik (Gast)


Lesenswert?

Matthias Sch. schrieb:
> Erik schrieb:
>> Wiso Antwortest du wenn du selber nicht weist?
>
> So wird das nichts. Wie Jörg schon sagte, ist die Syntax zwischen den
> ATMega und dem XMega deutlich geändert worden, so das es z.B. kein DDR
> Register mehr gibt, sondern PORT.DIRSET und PORT.DIRCLR.
>
> Man schreibt auch nicht mehr (1<<PB2), sondern PIN2_bm, wie z.B. so:
> PORTF.DIRSET   = PIN3_bm;   // Pin 3 (TXD0) as output.
>   PORTF.DIRCLR   = PIN2_bm;   // Pin 2 (RXD0) as input.
> Du wirst den Grossteil des Codes umschreiben müssen, und evtl. an deiner
> Kommunikation arbeiten müssen, denn sonst werden dir hier nicht viele
> Leute weiterhelfen.

Danke dir fürs Antwort!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Erik schrieb:
> Wiso Antwortest du wenn du selber nicht weist?

Weil du mich nicht damit beauftragt hast, die Portierung für dich zu
erledigen, sondern den Eindruck erweckst, dass du das selbst tun willst.
Dafür solltest du dich aber zumindest bemühen, die Unterschiede zwischen
beiden Architekturen so weit zu verstehen, dass du wenigstens einen
Anfang einer Portierung machen kannst.  Im Moment ist es mein 
Eindruck,
dass du schlicht und ergreifend rein gar nichts hast, was irgendwie den
Namen „Portierung“ verdienen würde.

Klar kann das auch jemand anders für dich tun, aber dann solltest du
1.) exakt danach fragen und 2.) lernst du dann dabei nichts für die
Zukunft.  Beim nächsten Mal müsstest du also wieder jemanden finden,
der es für dich tut (und dabei ist es egal, ob das nächste Mal wieder
Code von einem MegaAVR auf einen Xmega zu portieren ist oder welcher
von einem ARM auf einen anderen mit anderen Peripherals).

Matthias Sch. schrieb:
> so das es z.B. kein DDR Register mehr gibt

Gibt's auch noch, heißt dort “DIR”.  Kann man benutzen, wenn man die
Datenrichtung der Pins eines ganzen Ports auf einmal festlegen will.
Meist will man aber an einer Stelle eher einzelne Pins festlegen, da
sind DIRSET und DIRCLR handlicher.

: Bearbeitet durch Moderator
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.