Lernhilfe Simulation Zähler mit AVRStudio

Gast #259184
Lesenswert?

Hallo

Als Anfänger in der Programmierung von Mikrocontrollern habe ich
versucht im AVR-Studio Version 4.11 einen interrupt gesteuerten
Timer/Zähler zu simulieren. Okay, vielleicht mit einem für Beginner
nicht gerade idealen device (Atmega48). Trotzdem folgende Frage:

Damit der Overflow Interrupt für Timer0 ausgelöst wird muss ich unter
anderem das im TIMSK0 Register existierende Timer Interrupt Overflow
Flag (TOIE0) setzen.

Dies erfolgt bei mir mit den folgenden Anweisungen:

 ldi r16, 0b00000001  ;
 out TIMSK0 ,r16      ; Timer Interrupt Maske setzen

Beim Comilieren gibt mir aber das AVR-Studio folgende Meldung aus:

error: Operand 1 out of range: 0x6e

wobei 0x6e die Adresse des TIMSK0 Registers ist.

Ich verstehe aber nicht wieso? Kann mir jemand einen Tipp geben? Was
mache ich falsch?
Angehängte Dateien:
Gast #259185
Lesenswert?

Auszug aus der Include Datai:
; ***** I/O REGISTER DEFINITIONS
*****************************************
; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions

TIMSK0 beinhaltet die Speicherposition und nicht die I/O-Port Adresse
Schau einfach im Datenblatt nach was die I/0-Port Adresse ist und
verwende diese, oder rechne den Versatz aus, und ziehe den Wert von
TIMSK0 ab.
#259186
Lesenswert?

Schau mal im Datenblatt unter Register Summary nach, welche I/O-Register
im normalen I/O-Bereich liegen und welche im extendet-I/O-Bereich.
Die Register im extendet-I/O-Bereich lassen sich nur wie SRAM
ansprechen.

Der Mega48 ist in dieser Beziehung besonders unvorteilhaft konstruiert.
Sein Konstrukteur war dabei wohl besoffen...

...
Gast #259192
Lesenswert?

Hallo Hannes,
war mir noch gar nicht aufgefallen, der TIMSK0 ist tatsächlich über
IN/OUT nicht mehr erreichbar.

The ATmega48/88/168 is a complex microcontroller with more peripheral
units than can be supported within the 64 locations reserved in the
Opcode for the IN and OUT instructions. For the Extended I/O space from
0x60 - 0xFF in SRAM, only the ST/STS/STD and LD/LDS/LDD instructions can
be used.

Unser TIMSK0 liegt auf 0x6e und kann somit nur über die Befehle
ST/STS/STD und LD/LDS/LDD erreicht werden.
#259194
Lesenswert?

Aber nur scheinbar... (man schaut halt weg und bemerkt es nicht mehr)

Denn die Zugriffe auf extendet-I/O kosten mehr Flash und mehr
Rechenzeit. Das mag jetzt haarspalterisch erscheinen, kann sich aber
bemerkbar machen. Das Unsinnige daran ist aber die Tatsache, dass im
normalen I/O-Bereich jede Menge Adressen unbenutzt sind, die mit IN/OUT
oder sogar mit CBI/SBI erreichbar sind.

Ich sehe das daher als eine Einschränkung, die bei vernünftigem Design
nicht nötig wäre. Es macht die Programme unnötig groß und langsam.

...
Gast #259195
Lesenswert?

wenn man zeitkritische routinen braucht, die hier beim avr das genannte
nicht erreichen sollte man einen anderen chipsatz nehmen um das ziel zu
erreichen.
ich glaube kaum das atmel hier bei diesen die herstellungsverfahren
ändert.

mfg pebisoft

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