Also erstmal Danke vorab an alle und: der Grund, warum überhaupt nichts
ins Register geschrieben wurde, auch nicht das Enable-Bit aus der
vierten Zeile, ist anscheinend der Optimierungsgrad des Compilers. Wenn
ich (zum Debuggen) die Optimierung auf (-O0) setze, funktioniert da
überhaupt nichts. Mit Level (-O3) geht das. Etwas.
Harald K. schrieb:
> Volltextsuche im Dateisystem, dort, wo auch immer der Compiler/die
> Toolchain installiert ist?
>
>
1 | > cd wohin/auch/immer
|
2 | > findstr /s /c:"ccp_write_io" *.c
|
Da gibt es bei mir nur Header und html-Dokus. Ohne sinnvollen Inhalt.
Aber ich nehme die jetzt einfach so hin.
Georg M. schrieb:
> Die zweite Zeile wird einfach durch die vierte Zeile überschrieben.
>
1 | > _PROTECTED_WRITE(CLKCTRL.MCLKCTRLB, CLKCTRL_PDIV_2X_gc | CLKCTRL_PEN_bm);
|
Das stimmt, und es zeigt sich ein Neues Problem: Selbst, wenn ich
(CLKCTRL_PDIV_2X_gc | CLKCTRL_PEN_bm) direkt als Zahl ins Register
schreibe, steht trotzdem nachher was anderes drin.
1 | CCP = CCP_IOREG_gc;
|
2 | CLKCTRL.MCLKCTRLB = 0b00000011; // führt aus irgendeinem Grund zu 0b00010001
|
Unabhängig von der Methode. Ob ich nun (CLKCTRL_PDIV_2X_gc |
CLKCTRL_PEN_bm) ver-odere oder wie oben in vier Zeilen Beides getrennt
setze - aber mit |=, es kommt immer das gleiche falsche Ergebnis heraus.
So langsam wird mein Post unübersichtlich, aber wenn ich im Debugger
Zeile für Zeile voranschreite (mit Step-Into), ist alles richtig. Egal
ob in Form von zwei oder vier Zeilen. Wenn der Code aber normal
durchlaufen wird, dann kommt das Falsche Ergebnis heraus. Keine Ahnung,
was ich davon halten soll.
Im Moment funktioniert zumindest diese Methode:
1 | ccp_write_io( (void *)&CLKCTRL.MCLKCTRLB, CLKCTRL_PDIV_2X_gc | CLKCTRL_PEN_bm);
|
"_PROTECTED_WRITE()" kennt mein Atmel Studio nicht, genausowenig wie
"CPU.CCP". Zudem wird "_PROTECTED_WRITE()" auf der Webseite nicht näher
beschrieben. Oder aber, es funktioniert nur mit XMEGAs und nicht mit
ATtinys.