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