Xmega und externer Quarz läuft nicht

Gast #2761247
Lesenswert?

Liebe Comunity,

ich habe (wie auch andere hier schon vor mir) Probleme einen externen 
Quarz am ATXmega zum laufen zu kriegen. Zur Umgebung:
Selbstentwickelte Platine mit ATXmega32A4U. Daran Angeschlossen ein 
16MHz Quarz mit 10pF Lastkapazität. Verbindungen sind alle geprüft. Also 
schliese ich erstmal die Hardware aus.

Ich habe ein kleines Testprogramm geschrieben das per Interrupt im 
Sekundentakt 2 Ausgänge toggelt. Es läuft auch aber mit einer Zeit von 
ca. 8sec. Daraus schließe ich das der Xmega anstatt auf 16MHz extern auf 
den 2MHz intern läuft.
1
/*
2
 * Mainteil_example.c
3
 *
4
 * Created: 18.07.2012 19:42:08
5
 *  Author: Johannes
6
 */ 
7

8

9
#include <avr/io.h>
10
#include <util/delay.h>
11
#include <avr/interrupt.h>
12

13
void Clock_init(void)
14
{
15
  OSC_XOSCCTRL = OSC_FRQRANGE_12TO16_gc | OSC_XOSCSEL_XTAL_256CLK_gc;    //Set 12-16MHz Crystal with 16k Clk-Cycles Startuptime
16
  OSC.CTRL |= OSC_XOSCEN_bm;                        //Select XTAL as Oscilator Input
17
  while(!(OSC.STATUS & OSC_XOSCRDY_bm));                  //wait for Stable Clock
18
  CCP = CCP_IOREG_gc;                            //Set write protectin
19
  CLK.CTRL = CLK_SCLKSEL_XOSC_gc;                      //Route Osc on Clock-tree
20

21
}
22

23
int main(void)
24
{
25
  
26
PORTE.DIR |= (1 << PIN2) | (1 << PIN3); //Set Pin 2 & 3 on Port E as OUT
27
PORTE.OUT |= (1 << PIN2);        //Pin 2 High treiben
28
PORTE.OUT &= ~(1 << PIN3);        //Pin 3 Low treiben
29

30
TCE0.CTRLA = TC_CLKSEL_DIV1024_gc;    //Aktiviere 16-Bit Timer 0 auf Port E mit Preescaler 1024
31
TCE0.CTRLB = 0x00;            //Mode = Normal Operation
32
TCE0.INTCTRLA = 0x03;          //Set Overflow Interrupt
33
TCE0.PER = 0xC2F6;            //Set Overflowpoint according to one second : 65536-Clk/Prescaler
34

35

36
sei();                  //Enable Interrupts
37
PMIC.CTRL |= PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;        //Accept all Interruptlevels
38

39
    while(1)
40
    {
41
        //TODO:: Please write your application code 
42
    }
43
}
44

45
ISR(TCE0_OVF_vect)            //Interrupt Routine for Overflow on TCE0
46
{
47
  PORTE.OUTTGL = (1 << PIN2);      //Toggle Pin2
48
  PORTE.OUTTGL = (1 << PIN3);      //Toggle Pin3
49
}

Kann bitte sich mal jemand den angefügten Code anschauen, ins besondere 
die Initialisierung von CLK und OSC.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren