PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : XMega mit periodischem Timer Interrupt



Superhirn
02.02.2012, 19:05
Hallo,

Ich möchte mit einem ATXmega32 und dem neuen AVRStudio einen periodischen Timer-Interrupt aufrufen. Hab auch schon alle AppNotes durchgekaut usw.

Initialisiert wird der timer so:

TCC0.PER = 65000;
TCC0.INTCTRLA = TC_OVFINTLVL_HI_gc;
TCC0.CTRLA = TC_CLKSEL_DIV1024_gc;

PMIC.CTRL |= PMIC_HILVLEN_bm |PMIC_MEDLVLEN_bm|PMIC_LOLVLEN_bm;
sei();


Der Timer-Interrupt "ISR (TCC0_OVF_vect){}" wird jedoch unabhängig welchen Divider oder welche Period ich eingestellt habe mit 106kHz aufgerufen.

Habs auch mit den Funktionen aus der App-Note AVR1306 (http://www.atmel.com/dyn/resources/prod_documents/doc8045.pdf) probiert, ohne erfolg.

Übrigens, meine CPU Clock ist so initialisiert, sollte so ca das maximum sein welches möglich ist:

/************************************************** ****************
* System Clock 32MHz (XOSC Quarz 16MHz, PLL Faktor 2)
* http://www.mikrocontroller.net/topic/156466
************************************************** ****************/

/* Nach dem Reset ist die Quelle des Systemtaktes der interne
2MHz RC-Oszillator (System Clock Selection: RC2MHz)
*/

// Oszillator XOSC konfigurieren (12..16MHz, 256 clocks startup time)
CLKSYS_XOSC_Config( OSC_FRQRANGE_12TO16_gc,
false,
OSC_XOSCSEL_XTAL_256CLK_gc );

// Oszillator XOSC enable
CLKSYS_Enable( OSC_XOSCEN_bm );

// Warten bis der Oszillator bereit ist
do {} while ( CLKSYS_IsReady( OSC_XOSCRDY_bm ) == 0 );

// PLL source ist XOSC, Multiplikator x8
CLKSYS_PLL_Config( OSC_PLLSRC_XOSC_gc, 16 );

// Enable PLL
CLKSYS_Enable( OSC_PLLEN_bm );

// Prescalers konfigurieren
CLKSYS_Prescalers_Config( CLK_PSADIV_4_gc, CLK_PSBCDIV_1_2_gc );

// Warten bis PLL locked
do {} while ( CLKSYS_IsReady( OSC_PLLRDY_bm ) == 0 );

// Main Clock Source ist Ausgang von PLL
CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_PLL_gc );


Grüße,

Thomas

Superhirn
19.02.2012, 17:35
hat niemand eine ahnung?