Forum: Mikrocontroller und Digitale Elektronik megaAVR0 - Was ist die VPORT Besonderheit?


von Veit D. (devil-elec)


Lesenswert?

Hallo

Ich habe ein Verständnisproblem was die Vports besonders macht. Also was 
man mit denen mehr/anders machen kann als mit den regulären Ports.

"Writing to the Virtual PORT registers has the same effect as writing to 
the regular registers, but allows for
memory-specific instructions, such as bit-manipulation instructions, 
which are not valid for the extended
I/O memory space where the regular PORT registers reside."

Man kann doch in den regulären Ports die Bits ändern wie man lustig ist. 
Wenn ich diese irgendwie manipuliere findet die Rechnerei/Bit schubsen 
doch im Speicher statt und erst das Ergbnis wird wieder in den regulären 
Port geschrieben. Worauf bezieht sich obige Aussage der besonderen 
Manipulationsfähigkeit mit Vports?

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


Lesenswert?

Veit D. schrieb:
> Also was man mit denen mehr/anders machen kann als mit den regulären
> Ports.

Dass sie im unteren Adressbereich liegen, in dem IN, OUT, SBI und CBI 
funktionieren.

von S. Landolt (Gast)


Lesenswert?

in/out/cbi/sbi vs. lds/sts.

von S. Landolt (Gast)


Lesenswert?

PS:
So benötigt zum Beispiel in nur einen Takt und ist also dreimal 
schneller als das lds mit seinen drei Takten.

von Veit D. (devil-elec)


Lesenswert?

Vielen Dank.

von c-hater (Gast)


Lesenswert?

S. Landolt schrieb:

> So benötigt zum Beispiel in nur einen Takt und ist also dreimal
> schneller als das lds mit seinen drei Takten.

Wieso dauert lds/sts eigentlich neuerdings drei Takte? bei den 
klassischen Mega waren's normalerweise zwei, nur beim Zugriff auf 
externen RAM waren's (mindestens) drei.

Vermutlich eine (eher unerwünschte) Erbschaft vom XMega-Core?

von S. Landolt (Gast)


Lesenswert?

Woher sollte ich das wissen, ist nun mal so.

von S. Landolt (Gast)


Lesenswert?

PS:
Auch bei den AVR128DA, bei diesen bin ich vor kurzem drüber gestolpert.

von S. Landolt (Gast)


Lesenswert?

> Wieso dauert lds/sts eigentlich neuerdings drei Takte?
Nee, nur lds; sts benötigt wie früher zwei.

von c-hater (Gast)


Lesenswert?

S. Landolt schrieb:

> Nee, nur lds; sts benötigt wie früher zwei.

Da wurde also ein 16Bit-Buffer für den Prefetch und ein wenig Logik 
eingespart. Schon zu XMega-Zeiten. Und diese damalige Fehlentscheidung 
wird jetzt an die neuen Generationen vererbt.

Nicht wirklich schön.

Naja, ein Teil des Nachteils wird ja durch die potentiell höheren 
Taktfrequenzen geschluckt. Muß man halt im Einzelfall sehen, ob's 
insgesamt noch passt oder zumindest passend gemacht werden kann.

von S. Landolt (Gast)


Lesenswert?

Dafür ist z.B. das st flotter geworden.

von Peter D. (peda)


Lesenswert?

Veit D. schrieb:
> Ich habe ein Verständnisproblem was die Vports besonders macht.

Nichts.
Ist wohl nur Werbegeschwurbel.
Die Ports waren schon in den classic AVRs bitweise setzbar. Nur bei den 
großen ist im unteren IO-Bereich kein Platz mehr, z.B. für Port H, J, K, 
L im ATmega2561.

Neu ist an den megaAVR0 nur, daß die Ports noch zusätzlich in den 
Memorybereich gespiegelt sind. Welchen Nutzwert das haben soll, 
erschließt sich mir nicht.

von Falk B. (falk)


Lesenswert?

Peter D. schrieb:
> Neu ist an den megaAVR0 nur, daß die Ports noch zusätzlich in den
> Memorybereich gespiegelt sind. Welchen Nutzwert das haben soll,
> erschließt sich mir nicht.

Dann solltest du mal ein paar Antworten lesen.

Beitrag "Re: megaAVR0 - Was ist die VPORT Besonderheit?"

von Peter D. (peda)


Lesenswert?

Falk B. schrieb:
> Dann solltest du mal ein paar Antworten lesen.
>
> Beitrag "Re: megaAVR0 - Was ist die VPORT Besonderheit?"

Eine Begründung für das zusätzlich Mapping in dem MEM-Bereich finde ich 
dort aber nicht.
Da steht auch nur, daß sie das können, was bereits die classic ATmega 
konnten:
"Dass sie im unteren Adressbereich liegen, in dem IN, OUT, SBI und CBI
funktionieren."

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Peter D. schrieb:
> Eine Begründung für das zusätzlich Mapping in dem MEM-Bereich finde ich
> dort aber nicht.

Die neuen IO-Ports belegen deutlich mehr Adressen als zuvor, sodaß diese 
den kleinen unteren Adressbereich "verstopfen" könnten.

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


Lesenswert?

Peter D. schrieb:
> Da steht auch nur, daß sie das können, was bereits die classic ATmega
> konnten:

Der Unterschied: bei Xmega und Mega0 können nur noch die Vports das, 
alle anderen sind zu groß und zu weit weg. Damit nun nicht die Situation 
entsteht wie in den von dir genannten ATmegas, bei denen du auf den 
"oberen" PIOs gar keine Chance mehr hast auf die schnellen IO-Befehle, 
hat man das beim Xmega flexibel gemacht: standardmäßig liegt keine 
einzige PIO mehr im "günstigen" Bereich, aber dafür eben die Vports, die 
du als Alias auf eine beliebige, dir in deinem Kontext wichtige PIO 
mappen kannst.

Dass die Vports auch über MMIO noch erreichbar sind, ist einfach nur ein 
Artefakt der Architektur: IO-Ports waren beim AVR ja grundsätzlich auch 
alternativ über MMIO erreichbar.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

habe mich heute nochmal mit Ports befasst.  :-)

Man hat mit den vielen Registern viel mehr Möglichkeiten zur Auswahl. Ob 
das immer sinnvoll ist waage ich auch langsam zu bezweifeln, da sich 
manche Möglichkeiten überschneiden und keinen Vorteil bieten. Aber was 
solls, die Register sind nun einmal da. Dafür kann man schön mit den 
Offsets zur Base rechnen.

"langsam" takten auf 4MHz Niveau kann man mittels
OUTSET/OUTCLR oder OUTGL oder IN.
Effekt ist bei allen der Gleiche.
Nimmt man die VPORTS mittels OUT (0/1) oder IN
ist man wieder auf 8MHz Speed.
Alles mit Clock 16MHz.

Cool finde ich das SlewRate Feature was in allen Fällen funktioniert.
Ich messe 10-12ns Rise/Falltime. Einstellung gilt immer für den 
kompletten Port. PORTx_PORTCTRL = PORT_SRL_bm;

von S. Landolt (Gast)


Lesenswert?

>  VPORTS mittels OUT (0/1) oder IN ... 8MHz
Und auch bei cbi und sbi mit einem Takt, früher waren es zwei.
Wie man überhaupt das Instruction-Set-Manual genauer anschauen sollte 
(z.B. rcall mit zwei Takten statt drei).

von Peter S. (cbscpe)


Lesenswert?

Da die Core Independant Peripherals wesentlich mehr Adressen brauchen 
gibt es die VPORTs damit man für die GPIO auf allen Ports die 
Instruktionen benutzen kann die nur die untersten 32 bytes ansprechen 
können. Die wurden sogar noch etwas aufgepeppt (mich hat schon immer 
gestört das cbi/sbi 2 Cyklen brauchen). Das steht so auch im Datenblatt. 
Ich muss ehrlich sagen ich bin von den neuen Atmega und AVR-DA 
begeistert. Wenn sie jetzt noch die Hardwarebugs ausbügeln würden wäre 
es noch besser.

von Wilhelm M. (wimalopaan)


Lesenswert?

Wichtiger ist m.E. an der Sache, dass man Atomarität bekommt. (BTW: man 
hat jetzt ja auch immer 4 GPIOR in dem Bereich),

Wenn die jetzt noch eine atomares swap() zweier Bytes in den Core 
einbauen würden ...

von Peter S. (cbscpe)


Lesenswert?

eor rq,rp
eor rp,rq
eor rq,rp

reicht völlig so oft kommt das nicht vor

von Wilhelm M. (wimalopaan)


Lesenswert?

Peter S. schrieb:
> eor rq,rp
> eor rp,rq
> eor rq,rp
>
> reicht völlig so oft kommt das nicht vor

... ähm, und wo ist das jetzt atomar????

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.