Forum: Compiler & IDEs Frage zu io*.h / Bereich ADC


von Lutz Müller (Gast)


Lesenswert?

Hallo,

zu den io*.h habe ich mal eine Frage: Die werden ja nicht direkt
eingebunden, sondern durch die <avr/io.h>. Bei einigen MCU´s wird das
Auslesen von ADCL und ADCH ja anscheinend über ein 16-bit-Register
gemacht, welches manchmal ADC und manchmal ADCW heißt. Soll was mit
Verwechslungsgefahren in Assembler (ADd with Carry) zu tun haben. Auch
gut. Die Frage ist die: In den io*.h steht z.B. #define
ADCW  _SFR_IO16(0x04). Mit Unterstrich nur für Compilerhersteller etc.
hab´ich auch schon rausgefunden, nur wo kann ich was zum rechten Teil
_SFR_IO16(0x04) rausfinden; was es bedeutet? Wo sind diese
"Geheimnisse" aufgeschlüsselt? Die avr-libc hat sich total
ausgeschwiegen. War nicht leicht, wenigstens die io*.h als Quelle zu
finden.

Danke und Gruß

Lutz

von Jörg Wunsch (Gast)


Lesenswert?

Hmm, wenn Du Dir die Doku zu den special function registers ansiehst,
solltest Du alles finden.

Ist in der Tat bißchen unglücklich, daß es noch Files gibt, in denen
ADC als word-Register benutzt wird.  Damit funktioniert halt aufgrund
des ,,dummen'' Präprozessors dann legaler Assemblercode wie

ADD R18,R24
ADC R19,R25

nicht mehr.  Für AT43U35x, ATCAN128 und ATmega169 gibt's leider nur
die ADC-Definition.  Bei ATmega128, ATmega32, ATmega64, ATmega8,
ATmega8535, ATmega{4,8,16}8, ATtiny13 und ATtiny26 gibt's zumindest
beide (so daß man sich für ADCW entscheiden kann), aber das löst
natürlich das oben beschriebene Problem nicht.

Wenn Du Lust hast, kannst Du das gern mal auf der avr-libc
Entwicklerliste weiterdiskutieren, den Knoten sollten wir in der Tat
auflösen, d. h. künftig nur noch ADCW, aber irgendwie brauchen wir
eine Übergangsstrategie.

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.