Hallo Forum,
ich programmiere gerade etwas mit einem XMega128A1 und habe folgendes Programm:
Code:
/*
* XMega.c
*
* Created: 22.03.2012 19:42:07
* Author: Daniel
*/
#include <avr/io.h>
int main(void)
{
// Taktquelle konfigurieren
OSC.CTRL |= 0x02; // 32MHz-Enable Bit setzen
while(!(OSC.STATUS & OSC_RC32MRDY_bm)); // Sobald der Takt stabil ist wird das RC32MRDY Bit gesetzt
CCP = 0xD8; // I/O Protektion aktivieren
CLK.CTRL = 0x01; // 32MHz als Taktquelle auswählen
// PLL konfigurieren
OSC_PLLCTRL = 0x82; // PLL Multiplikator auf x2 setzen und PLL Input Clock auf 32MHz setzen
OSC.CTRL |= 0x10; // PLL-Enable Bit setzen
while(!(OSC.STATUS & OSC_PLLRDY_bm)) // Warten bis PLL bereit ist
// I/O konfiguration
PORTB.DIR = 0xff; // Port B auf Ausgang stellen
while(1)
{
PORTB.OUT ^= (1<<PIN0);
}
}
Der Sinn des Programmes besteht darin, den Takt auf 32Mhz zu setzen und dann diesen Takt für die interne PLL zu nutzen.
Im Hauptprogramm wird dann ein Pin getoggled, damit ich am Oszi eine Veränderung sehen kann.
Allerdings zeigt das Oszi immer 2,35MHz an, egal auf was ich den PLL Multiplikator setze.
Wo steckt mein Fehler?
Danke für die Hilfe!
Lesezeichen