Mikrocontroller

OP (Firma: Techniker) #3419949
Lesenswert?

Hallo zusammen,

hoffe bin hier richtig :)

Ich mache momentan meine Abschlussarbeit.
Dabei geht es darum meinen Mikrocontroller (atxmega128A1) über USART
mit dem Computer zu verbinden. Dazu soll ich den Port D mappen damit ich 
diesen Port als serielle Schnittstelle verwenden kann.

Nun meine Fragen:
- Was genau ist Portmapping?
- Wie programmiere ich diesen Portmapping?

Programmiert wird das ganze mit Atmel Studio in C.
Habe schon im Internet geschaut und nichts hilfreiches gefunden,
daher würde ich mich über hilfreiche Antworten freuen.
Danke schon mal im vorraus.

PS: Bin im Internet auf diese befehle gestoßen:
PORTCFG_VIRTMAP0_PORTC_gc;
PORTCFG.VMAP0;
PORTCFG_VIRTMAP0_PORTD_gc;
PORTCFG.VMAP1;

PORTCFG.VMAP1;
PVIRT0.DIR = 0xFF;

weiß aber nicht was mit anfangen.
OP (Firma: Techniker) #3419984
Lesenswert?

Hallo Hans,

danke für die schnelle Antwort.

Dies ist nur ein Bruchteil von meiner gesamten Arbeit.
Ich muss zwei Motoren ansteuern die ihre Koordinaten über USART vom PC
bekommen. Ich habe bereits die Motoransteuerung sowie die Sende- und 
Empfangsroutine, nur hänge ich mittlerweile seit fast zwei Wochen an dem 
Portmapping und kann daher mein komplettes Programm nicht testen.

hoffe daher mir kann da jemand weiterhelfen :)
Gast #3420006
Lesenswert?

Flo King schrieb:
> Ja habe ich. Aus dem Datenblatt (von Atmel) habe ich die oben
> genannten Befehle.
> Habe schon mehrmals probiert es mit diesen Befehlen zu programmieren.

ich sehen keine Befehle.

Ich sehe maximal Register denen man einen Wert zuweisen kann, und welche 
Werte welche Auswirkung haben steht im Datenblatt.
(Firma: s@Td) #3420070
Lesenswert?

Durch das Portmapping kannst du dir einen Virtuellen Port zusammenbauen.
Z.B. ist das sinnvoll wenn du ein paralleln 8bit Input hast aber keinen
ganzen Port mehr frei. Dann setzt du dir den Virtuellen Port aus zwei 
anderen Ports zusammen und brauchst dann nur einen Befehl um den Ausgang 
zu setzen.

Wenn du das nicht brauchst würde ich ganz einfach bei den normalen Ports 
bleiben:

( PORTA.DIR | DIRSET | DIRCLR | DIRTGL )
( PORTA.OUT | OUTSET | OUTCLR | OUTTGL )
( PORTA.IN )
OP (Firma: Techniker) #3420097
Lesenswert?

Hallo Mikro Controller,

Danke für deine Antwort, das heißt also ich kann auf dem Port D dann
virtuell die TX und RX Pins von Port C (USB-Stecker) für die serielle 
Übertragung festlegen.
OK habe ich vestanden :) und dann kann ich diesen virtuellen Port wie
jeden anderen Port ansteuern?
#3420135
Lesenswert?

Hallo Flo,
du kannst einen PortA oder PortB etc auf Vports mappen,
damit ist dein I/O Zugriff schneller.
Hier ein Codeschnipsel, sollte selbsterkärend sein.
//PORTC wird als Virtueller Port definiert
PORTCFG.VPCTRLA |= PORTCFG_VP02MAP_PORTC_gc;
//Der Virtuelle Port0 wird als Ausgang definiert
VPORT0.DIR = PIN0_bm;

Dann z.B. mit
VPORT0.OUT = 0x00;
den PortC auf 0 setzen, einzelne Bits geht natürlich auch.

Ein Bit-Zugriff mittels VPORT ist wirklich eine SBI oder CBI Anweisung,
wenn du einen normalen Port Zugriff verwendest, sind es drei einzelne 
Befehle.

Grüße,
Kai
(Firma: s@Td) #3420144
Lesenswert?

Flo King schrieb:
> Danke für deine Antwort, das heißt also ich kann auf dem Port D dann
> virtuell die TX und RX Pins von Port C (USB-Stecker) für die serielle
> Übertragung festlegen.

Nein, das gilt nur für den IO Port. Ich bin mir nicht sicher ob es noch 
andere Einstellungen gibt wo man richtig multiplexen kann (jede Hardware 
an jeden Pin). Der Viruelle Port ist aber nur ein IO Port.

Wenn du dir dieses DB anschaust: ATxmega64A1/128A1 Preliminary
Da gibt es ein Unterpunkt Pinout and Pin Functions.

Du schaust dir an an welchen Pins die serielle Verbindung hängt.
Z.B. an PD6,7 dann siehst du im DB, dass du USART_D_1 benutzen musst.

Wenn die Serielle an anderen Pins hängt an denen kein USART angegeben 
ist sieht es soweit ich weiß eher schlecht aus.
(Firma: TravelRec.) Persönliche Seite #3420289
Lesenswert?

Flo King schrieb:
> Dazu soll ich den Port D mappen damit ich
> diesen Port als serielle Schnittstelle verwenden kann.

Die UART zu initialisieren hat nicht wirklich etwas mit "Port-Mapping" 
zu tun, schon gar nicht mit virtuellen Ports. Es werden hier lediglich 
die Pins der UART auf die betreffenden Portpins geschaltet und somit die 
Standard-I/Os überschrieben. Das war schon bei den Tinys und Megas so, 
nur dass bei den XMEGAs noch Funktionen dazugekommen sind. Um alle 
informationen für den XMEGA zu erhalten, benötigt man immer das 
Familien-Manual und das Datenblatt des betreffenden Controllers. Dann 
muss man nur noch lesen können ;-)

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