Hallo,
ich habe auf meinem ATxmega128A3U mit Hilfe des ASF ein USB HID Generic
Device implementiert, welches auch dank der von Atmel zur Verfügung
gestellten DLL super funktioniert.
Leider bekomme ich jetzt keinen Timer mehr zum laufen.
Selbst diese triviale Lösung in der main() läuft nicht.
1 | //PB2 als Output
|
2 | PORTB.DIR |= PIN2_bm;
|
3 |
|
4 | //Timmer konfigurieren
|
5 | TCE0.PER = 0xffff;
|
6 | TCE0.CTRLA = TC_CLKSEL_DIV256_gc;
|
7 |
|
8 | while(1)
|
9 | {
|
10 | if(TCE0.CNT == 1) PORTB.OUTTGL |= PIN2_bm;
|
11 | }
|
Wenn ich dieses Prog alleine, ohne die gesamte ASF-Geschichte auf den µC
flashe, dann läuft es. Dann läuft der µC auch mit dem 2 MHz Takt
(default).
Ein Takt wird auch generiert, denn USB läuft (48 MHz) und wenn ich den
Sys Takt auf einen Pin lege, erhalte ich 24 MHz, so wie programmiert.
1 | //! Configuration using On-Chip RC oscillator at 48MHz
|
2 | //! The RC oscillator is calibrated via USB Start Of Frame
|
3 | //! Clk USB = 48MHz (used by USB)
|
4 | //! Clk sys = 24MHz
|
5 | //! Clk cpu/per = 24MHz
|
6 | #define CONFIG_USBCLK_SOURCE USBCLK_SRC_RCOSC
|
7 | #define CONFIG_OSC_RC32_CAL 48000000UL
|
8 |
|
9 | #define CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC OSC_ID_USBSOF
|
10 |
|
11 | #define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_RC32MHZ
|
12 | #define CONFIG_SYSCLK_PSADIV SYSCLK_PSADIV_2
|
13 | #define CONFIG_SYSCLK_PSBCDIV SYSCLK_PSBCDIV_1_1
|
Muss man den Takt für die Timer noch anderweitig freigeben, oder
festlegen? Davon ist in jeglichen AppNotes nämlich nicht die Rede.
Leider ist die Clock-Implementierung bereits bei der USB-ASF dabei und
recht unübersichtlich.
Habt ihr bereits ähnliche Erfahrungen gemacht, oder eine Idee zur
Problemlösung?