Forum: Mikrocontroller und Digitale Elektronik Timerprobleme bei ASF USB (xmega)


von Benni (Gast)


Lesenswert?

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?

von Basti (Gast)


Lesenswert?

Schalt einfach den Takt zum Timer ein... die ASF schaltet immer alle 
Takte weg, zum Stromsparen....

von Benni (Gast)


Lesenswert?

Basti schrieb:
> Schalt einfach den Takt zum Timer ein... die ASF schaltet immer alle
> Takte weg, zum Stromsparen....

Ich wusste gar nicht, dass man den Takt für einzelne Komponenten 
deaktivieren kann. Das Internet hilft mir da leider auch nicht viel 
weiter.

Kannst Du mir eine Quelle nennen, wie ich die Takte wieder hinzuschalte?

von Benjamin P. (drank)


Lesenswert?

So, jetzt mit Account.

Ich habe es gefunden. Vielen Dank für den Tipp.

Ich habe den Takt für TCC0 mit diesem Befehl aktiviert.
1
//Takt für Timer TCCO aktivieren
2
sysclk_enable_peripheral_clock(&TCC0);

Für den Compiler musste ich noch folgendes in meinen Header einbinden.
1
#include <sysclk.h>

Ich hoffe die ASF überrascht mich nicht mit weiteren solcher tollen 
Tricks, denn außer für USB nutze ich die nicht.

Grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.