Xmega Programmierung in ASM

Gast #1432597
Lesenswert?

Hallo

Dies hier ist mein erstes Testprogramm mit dem Xmega128A1. Meine 
Entwicklungsumgebung ist die Experimentierplatine hier aus diesem Forum 
von Michael G.

Sinn des Progrämmchens ist die PORTS A..D in der alt gewohnten Weise 
(wie im ATmega/ATtiny) anzusprechen.

Hoffentlich hilft es anderen Ensteigern in der Welt der Xmegas weiter. 
Wer ebenfalls kleine Testprogramme für die Nutzung der Periferie des 
Xmega's in ASSEMBLER (und ich meine nur in ASM!!!) hat, kann sie gerne 
hierher posten.

Steffen H.
Angehängte Dateien:
Gast #1434101
Lesenswert?

Es sollte ja auch für diejenigen sein die schon mit den Megas oder Tinys 
gearbeitet haben, um einen schnelleren Einstieg in die Welt der Xmegas 
zu bekommen. Ich persönlich hatte jedenfalls so meine Probleme mit den 
vielen Registern der I/O Ports (jeder Port mit 21 Stück an der Zahl).

@Markus
Welche tollen Register sollen das sein? Wie kann man denn sonst so 
einfach ein einzelnes Bit im Port ändern?

Ohne Frage hat man mit dem Xmega wahnsinnig viele Möglichkeiten. Kann 
aber auch manchmal sehr verwirren. Super finde ich auch das Tongeln der 
Pins..
(Firma: Embedit Mikrocontrollertechnik) #1434202
Lesenswert?

Steffen H. schrieb:
> @Markus
> Welche tollen Register sollen das sein? Wie kann man denn sonst so
> einfach ein einzelnes Bit im Port ändern?

OUTSET, OUTCLR, OUTTGL. Gleiches gibts auch für DDR. Hab ich schonmal 
drüber geschrieben.

http://blog.elektronik-projekt.de/2009/08/xmega-weitere-eindrucke-der-atxmega32a4/

So lange man nur einzelne Bits zu setzten hat hat man vielleicht keinen 
Vorteil. Aber sobald man zwei Bits setzen will spart man Befehle
(Firma: Embedit Mikrocontrollertechnik) #1446344
Lesenswert?

Steffen H. schrieb:
> Also mit sbi oder cbi kann ich auch mehrere Bits mittels "|" Operator
> gleichzeitig setzen.
>
> z.B.
> sbi PORTB, Bit1 | Bit3 | Bit6

Würde mich interessieren, wie das gehen soll. Bei dem sbi Befehl sind im 
Opcode nur 3 Bit für die Bitposition reserviert. Wenn der Assembler 
sowas erlaubt macht er sicher eine entsprechende Anzahl an Befehlen 
daraus.

Aber sbi kann immer nur EIN Bit setzen
Gast #1627936
Lesenswert?

So, hab die PLL mal getestet. Das Ergebnis ist ernüchternd. Laut 
Datasheet kann man ja angeblich bis auf 200Mhz gehen. Ich bekomm sie 
gerade mal bis auf 48Mhz..

Hat schon mal jemand mehr als 48Mhz rausholen können?
Gast #1642872
Lesenswert?

Hab es geschafft ein 320x240 16bit TFT anzusteuern. Das TFT kommt ohne 
Vsync und Hsync aus. Daten laufen im Format 16bit Farbwert (555) über 
PortC und PortE direkt ans Display. Event_Ch0 steuert den Zugriff auf 
das SDRAM welches am EBI im 3PORT-Mode hängt und die Pixeldaten liefert. 
Der Event_Ch0 wird aus DCLK und DTMG gebildet. Dazu hab ich ein NAND 
(74LVC00) mit 1A->DCLK und 1B->DTMG paralell angeschlossen. Der Ausgang 
des Gatters geht an PortD.2

Falls diesen Beitrag Benedikt liest, hat er sicherlich noch einige 
Verbesserungsvorschläge. Am liebsten hätt ich die Datenleitungen des 
TFT´s natürlich lieber am EBI hängen. Allerdings hab ich noch keine 
Ahnung WIE!?

Als Testboard verwende ich das von Michael G. (Nur falls jemand 
überlegt, wie denn nun der SDRAM angeschlossen ist)

TFT-Steuerleitungen:  TFT-Daten:        (NAND-Eingänge) (NAND-Ausgang)
DCLK-> an PortD.0     PORT_C   Port_E    1A->PortD.0     1Y->PortD.2
DTGM->PortD.4         0->R1    0->G4     1B->PortD.4
                      1->R2    1->G5
                      2->R3    2->B1
                      3->R4    3->B2
                      4->R5    4->B3
                      5->G1    5->B4
                      6->G2    6->B5
                      7->G3    7->NC

Gruß
Steffen H.
Angehängte Dateien:
(Firma: TravelRec.) Persönliche Seite #1650542
Lesenswert?

Steffen H. schrieb:
> So, hab die PLL mal getestet. Das Ergebnis ist ernüchternd. Laut
> Datasheet kann man ja angeblich bis auf 200Mhz gehen. Ich bekomm sie
> gerade mal bis auf 48Mhz..
>
> Hat schon mal jemand mehr als 48Mhz rausholen können?

Die PLL kann 200Mhz, die CPU aber nicht. Da mußt Du dann einen 
Preschaler hinter die PLL schalten, daß Du unter 40MHz bleibst. Über 
40MHz wird ein XMega instabil, abhängig von Spannung und Temperatur.

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