Gast
#2748100
Moin, Set: Xmega64D3 + Atmel Studio 6 + GCC + AVR ONE! Ich benutze den internen 32Mhz Oszillator + automatische Kalibrierung. Das funktioniert auch ganz gut wenn man sich erstmal an dieses fürchterliche neue Tool (Studio 6) angepasst hat. Die Registerbenennung ist erst beim zweiten Blick genial, die automatische Kalibrierung ist aber richtig nett. 3 Uarts, 3 Baudraten und kein Bedarf an einem externen Taktgeber. Nun jage ich allerdings einen etwas bizarren Fehler und habe die Kompileroptimierung ausgestellt um diese Fehlerquelle auszuschliessen. Problem: Taktregister für 3 cycle freigeben, beschreiben, nächstes freigeben etc.pp. bis alle geschützten Register gesetzt sind. In endlos While darauf warten das 2Mhz und 32Mhz stabil sind und erst dann umschalten weil die Hardware das sonst ignoriert. Mit 'Size' optimierung läuft das wie erwartet. Schalte ich die Optimierung jedoch aus, funktioniert das nicht. Die Schleife wird durchlaufen, es bleibt aber beim 2Mhz Systemtakt. (code siehe unten) Keine Compilerwarnung, kein Fehler, es geht einfach nur nicht. (Alle IRQs sind zu dem Zeitpunkt deaktiviert) Kann mir das jemand erklären ? mkn Code: // 2Mhz CLK is standard CLK after Reset. CPU_CCP = 0xd8; // release register protection for 4 cycles OSC_CTRL = 0x07; // CPU_CCP = 0xd8; // release register protection OSC_DFLLCTRL = 0x00; // reference for 32Mhz CLK-Calibration is 32,786 Khz oscillator CPU_CCP = 0xd8; // release register protection for 4 cycles DFLLRC32M_CTRL = 0x01; // Enable Auto-Calibration for 32Mhz Oscillator CPU_CCP = 0xd8; // release register protection for 4 cycles CLK_PSCTRL = 0x00; // No Prescaler while (!(OSC_STATUS & 0x06)) {} // Wait till both oscillators are stable CPU_CCP = 0xd8; // release register protection for 4 cycles CLK_CTRL = 0x01; // CLK source = internal 32Mhz Oscillator CPU_CCP = 0xd8; // release register protection for 4 cycles OSC_CTRL = 0x06; // 2Mhz CLK is useless now, disable it CPU_CCP = 0xd8; // release register protection for 4 cycles CLK_LOCK = 0x01; // CLK and prescaler are protected from accidental write