Forum: Mikrocontroller und Digitale Elektronik STM8 Timer4 interrupt


von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Hallo,
ich habe gerade Probleme dabei, bei einem STM8L152C6, den Timer 4 dazu 
zu bringen, anzulaufen, geschweige den, einen Interrupt zu erzeugen.

Die Clock läuft intern mit 16Mhz, da ich (mittlerweile) davon eine 
korrektes UART-Debugging ableiten konnte, gehe ich mal davon aus, dass 
das in Ordnung ist.

Ich kann erfolgreich einen Interrupt vom ADC erzeugen lassen.

Initialisieren ich den Timer 4 und lasse mir TIM4->CNTR auf der UART 
ausgeben, so bekomme ich kontinuierlich 0x00.

Der Code selbst ist aus einem Beispiel von ST:
1
void TIM4_Init (void) {
2
    CLK->PCKENR |= 0x04;             // TIM4 clock enable
3
4
    TIM4->ARR = 0x80;                // init timer 4 1ms interrupts
5
    TIM4->PSCR= 7;                   // prescaled by 2^7
6
    TIM4->EGR = 1;                   // kommt so nicht aus dem ST Beispiel, wird aber in der peripheral libray so "gemacht"
7
8
    TIM4->IER = 1;
9
    TIM4->CR1 |= 1;
10
}

Ich habe schon validiert, dass die Funktion aufgerufen wird. Ich schalte 
in dem interrupt handler eine LED an, diese geht aber nie an.

Hat von euch noch jemand eine Idee?

mfg und mit Dank im Voraus,
Torsten

P.S.: Was mir gerade noch einfällt: Ich arbeite mit dem SDCC

: Bearbeitet durch User
von Daniel R. (daro6)


Lesenswert?

Torsten Robitzki schrieb:
> TIM4->PSCR= 7;

Ich glaube da musst du 128 reinschreiben (das 2^x macht der nicht von 
alleine). Wahrscheinlich hast du deswegen die LED nicht gesehen...

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Oh, ich glaube, ich habe den Fehler gefunden. Ich habe den flashen 
header verwendet, der definiert dem timer4 so, dass ein Register in der 
struct nicht vorkommt, und somit alle darauf folgenden Elemente um ein 
Byte verschoben sind :-( Böser Fehler!!!

Danke an alle für's Lesen und Helfen!

mfg Torsten

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.