Timerflag richtig auslesen / zurücksetzen

Gast #2616667
Lesenswert?

Hallo,

ich hab ne Frage zu meinem Programmcode. In der Interrupt-Routine setze 
ich das Interruptflag und in der main while(1) Schleife frage ich ab, ob 
dieses Flag gesetzt wurde oder nicht und setz das Flag ggf. zurück auf 
Null.

Ist dieses Zurücksetzen so richtig, oder muss ich hierfür die Interrupts 
kurzzeitig ausschalten?
1
void TIM1_UP_IRQHandler (void) 
2
{
3
  unsigned int state = 0x00; 
4

5
  if ((TIM1->SR & 0x0001) != 0) 
6
  { // check interrupt source   
7

8
    state = GPIOE->IDR; 
9
    if(state & (1 << 13))  
10
    {
11
      interrupt = 1; //set interrupt-flag   
12

13
    }
14
    
15
     TIM1->SR &= ~(1<<0);  // clear UIF flag    
16
  }
17
}
18

19

20
unsigned char TIMR_GetInState(void)
21
{
22
  if(interrupt)
23
  {
24
    interrupt = 0; 
25
    return (1);
26
  }  
27
  return(0); 
28
}
29

30

31
int main(void)
32
{
33
        
34

35
        while(1)
36
  {
37
  
38
     if(TIMR_GetInState())
39
                {
40
                   //do something
41
                } 
42
  } 
43

44
}
Als Prozessor setze ich einen STM32F103ZE ein.


Gruß
Lars
Gast #2616726
Lesenswert?

Delta Oschi schrieb:
> Es gibt doch sicher irgendwo Beispielcode zu diesem Controller, zB eine
> Appnote des Herstellers, eine Webseite ? Was steht im Datenblatt ?

Der Code funktioniert so schon, aber es kann ja sein, dass man es etwas 
anders programmieren würde, weil man z.B. verhindern muss, dass auf das 
Flag gleichzeitig von der ISR und der main-Routine zugegriffen werden 
kann.
Gast #2616771
Lesenswert?

Lars schrieb:
> muss ich hierfür die Interrupts
> kurzzeitig ausschalten?

Nein, das ist nicht notwendig. Egal an welcher Stelle die ISR das 
Hauptprogramm (und damit die Abfrage-Funktion) unterbricht kommt es 
nicht zu einer widersprüchlicher oder undefinierten Ablauffolge oder 
Zuweisungen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren