Forum: Mikrocontroller und Digitale Elektronik Atmega32U4 sts statt out


von Thomas Frosch (Gast)


Lesenswert?

Hi Leute.

Habe vor kurzem ein Programm von einem Atmega32 auf einen Atmega32U4 
migriert.
Es ging um ein Programm bei dem Zeiten sehr kritisch sind und ich an 
manchen stellen mit inline assembler arbeiten muss, um eine bestimmte 
Laufzeit einzuprägen, also Compiler unabhängig machen muss.

Leider habe ich gemerkt, dass der Atmega32U4 bei Zugriffen auf die 
"peripherie" Register (also sowas wie PORTD) mit sts statt wie beim 
Atmega32 mit out schreibt. sts braucht zwei statt einem Takt.

Was ist der Vorteil für eine solche Architektur? Also was bezweckte 
Atmel mit dieser Entscheidung? Dass alle Register im gleichen Adressraum 
liegen?

In der Instruction Set Summary des Atmega32U4 Datenblattes gibt es den 
Befehl out immer noch. Habe es noch nicht ausprobiert aber kann ich ihn 
dann also trotzdem benutzen? Wenn ja muss ich dann die gleiche 
Registernummer angeben?

Warum entscheidet der Compiler sts statt out zu nehmen?

von spess53 (Gast)


Lesenswert?

Hi

>Was ist der Vorteil für eine solche Architektur? Also was bezweckte
>Atmel mit dieser Entscheidung? Dass alle Register im gleichen Adressraum
>liegen?

Liegen sie sowieso. Alle IO-Register sind mit sts ansprechbar. Der 
Unterschied ist, das out nur einen begrenzten Adressbereich (0...$3F) 
ansprechen kann. Das entspricht den Adressen im IO-Raum von $20...$5F. 
Höhere Adressen können also nur mit sts/lds angesprochen werden.

>sts braucht zwei statt einem Takt.

Nein. Hat zwei statt ein Word Länge.

MfG Spess

von Thomas Frosch (Gast)


Lesenswert?

Das hab ich im Datenblatt gefunden:

When using the I/O specific commands IN and OUT, the I/O addresses $00 - 
$3F must be used. When addressing I/O regis-
ters as data space using LD and ST instructions, $20 must be added to 
these addresses. The ATmega16U4/ATmega32U4 is
a complex microcontroller with more peripheral units than can be 
supported within the 64 location reserved in Opcode for
the IN and OUT instructions. For the Extended I/O space from $60 - $1FF 
in SRAM, only the ST/STS/STD and LD/LDS/LDD
instructions can be used.


spess53 schrieb:
>>sts braucht zwei statt einem Takt.
>
>
>
> Nein. Hat zwei statt ein Word Länge.

Du hast recht, das erklärt auch warum doppelt so lang gebraucht wird.

Bei mir ging es um das UDR1 Register, dass ich als SPI Register 
verwende. Dieses liegt bei $CE, also nicht im unteren Adressraum. Zuvor 
habe ich das SPDR Register benutzt welches im Adressraum $00 - $3F 
liegt. Also geht es damit nicht... Schade...

Danke für die schnelle Antwort.

von spess53 (Gast)


Lesenswert?

Hi

>>sts braucht zwei statt einem Takt.
>Nein. Hat zwei statt ein Word Länge.

Korrektur :  STS Cycles: 2
             LDS Cycles: 1

MfG Spess

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.