Nabend zusammen
Ich finde gerade meinen Fehler bei denn Eisntellungen für die Timer
eines LM3s6965 (Cortex M3) nicht. Und zwar wollte ich denn Timer 2 als
16 Bit Singleshot verwenden und ahbe ihn wie folgt initialisiert:
1 | SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2);
|
2 | TIMER2_CFG_R= 0x04;
|
3 | TIMER2_TAMR_R = 1;
|
4 | TIMER2_TAPR_R = 200;
|
5 | TIMER2_TAILR_R = 40000;
|
Die erste Funktion stammt aus eienr Driverlib die dazu dient den Timer
zu aktivieren (Nur als Peripherie, er wird NICHT gestartet).
Nun folgt im späteren Verlauf des Codes folgender Teil:
1 | TIMER2_CTL_R |= 1; //Start Timer
|
2 | //blinky LED
|
3 | while(1)
|
4 | {
|
5 | GPIO_PORTF_DATA_R |= 0x01; //Set PF0 High
|
6 | icheck=1;
|
7 |
|
8 | while(icheck==1){ // Run until Timer 2 has finished
|
9 | icheck= TIMER2_CTL_R & 1;
|
10 | }
|
11 |
|
12 | GPIO_PORTF_DATA_R &= ~(0x01);
|
13 | }
|
Etwas weitere Erklärung:
Das erste Bit in TIMER2_CTL_R zeigt ob der Timer 2 gerade läuft oder
nicht. Laut Datenblatt wird dieses Bit im One Shot Modus auf 0 gesetzt
wenn der Controler einmal durchgelaufen ist und bleibt 0 bis es wieder
Manuell auf 1 gesetzt wird.
Das problem das ich nun habe ist, das der Timer nicht herunterzählt. Er
bleibt also bei 40000 stehen udn rührt sich nicht. Wenn ich jedoch
continious Mode eisntelle zählt er herunter.
Habe ich was grundlegendes vergessen? Denn irgendwie hänge ich gerade.