Xmega und externer Quarz läuft nicht

Gast #2761247
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.