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?
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.