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:
Code:
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/p...ts/doc8045.pdf) probiert, ohne erfolg.
Übrigens, meine CPU Clock ist so initialisiert, sollte so ca das maximum sein welches möglich ist:
Code:
/******************************************************************
* 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
Lesezeichen