AVR-GCC Assembler OUT/STS

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 17 2 2025  23:58:34      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Oszilloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
AVR-GCC Assembler OUT/STS

    







BID = 394720

fabianschuiki

Gesprächig



Beiträge: 102
 

  


Hi,

Hab hier ein Problem:
Ich will den Timer1 meines Prozessors (ATmega48) anspringen lassen, nur passt dem GCC Assembler die Anweisung


Code :

out TCCR1A, temp


nicht:


Code :

main.S:61: Error: number must be less than 64


Er akzeptiert für OUT nur I/O Register deren Addresse kleienr als 64 ist, d.h. ich kann das SREG grade noch mit OUT ansteuern, wenn ich folgendes schreibe:


Code :

out _SRF_IO_ADDR(SREG)



Das SREG hat laut Datenblatt folgende Speicherzelle: 0x5F.
Also genau 0x3F (63), wenn man mit _SFR_IO_ADDR() die Adresse verschiebt (-0x20).

Soweit ich mich erinnern mag konnte ich in AVR-Studio problemlos


Code :

out TCCR1A, temp


schreiben.

Jetzt müsste ich theoretisch den Umweg über STS machen:


Code :

sts TCCR1A, temp

sts SREG, temp




Irgendwas stimmt da nicht! Hat jemand mit diesem Problem schonmal Bekanntschaft gemacht? Theoretisch müsste OUT doch alle Addressen von 0x00 bis 0xDF (Speicherzellen 0x20 bis 0xFF) akzeptieren, oder nicht?


Grüsse und schöne Weihnachten,
Fabian

BID = 394730

Benedikt

Inventar

Beiträge: 6241

 

  

Beim AVR Studio ging out TCCR1A, temp nur, weil du damals noch keinen mega48 hattest. Bei den älteren AVRs liegt TCCR1A auf einer Adresse <64.
OUT kann nur mit Adressen <64 arbeiten, es ist also alles in Ordnung mit deinem Assembler.

BID = 394751

Jornbyte

Moderator



Beiträge: 7211

Ja, es ist so, wie Benedikt schreibt. In ASM gibt es ein Macro das die Adressumstellung übernimmt.


Code :

.MACRO STORE     ;Arguments: Address, Register

.if @0>0x3F
sts @0, @1
.else
out @0, @1
.endif
.ENDMACRO

.MACRO LOAD ;Arguments: Register, Address
.if @1>0x3F
lds @0, @1
.else
in @0, @1
.endif
.ENDMACRO



_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.


Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 23 Beiträge im Durchschnitt pro Tag       heute wurden bisher 21 Beiträge verfasst
© x sparkkelsputz        Besucher : 183072215   Heute : 7447    Gestern : 18294    Online : 258        17.2.2025    23:58
2 Besucher in den letzten 60 Sekunden        alle 30.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0341010093689