STM32F4 Disc. FreeRTOS und EXTI

OP #2827267
Lesenswert?

Hallo Zusammen,
Ich bastele grade an FreeRTOS mit FreeRTOS_EC zusatz.  Jetzt habe ich 
ganz seltsames Problem.  Egal welchen Ports ich benutze  feuern nicht 
alle EXTI. Z.B. im unten angegebenen angegeben abschnitt sind auf GPIOC 
die  Pins GPIO_Pin_11; GPIO_Pin_12; GPIO_Pin_13; GPIO_Pin_14 als Eingang 
mit Interrupt Konfiguriert. Feuern allerdings nur 11 und 12.


Ich stehe echt auf dem Schlauch! Ich weiß auch nicht ob es was mit 
FreeRTOS zu tun hat oder mit meiner Blödheit (das letzte ist 
wahrscheinlicher).

über jeden Tipp werde ich mich  freuen!
Denis

p.S
Quellcode
1
void init_exti()
2
{
3

4
      GPIO_InitTypeDef GPIO_InitStructure;
5
      EXTI_InitTypeDef EXTI_InitStructure;
6
      NVIC_InitTypeDef NVIC_InitStructure;
7

8
      /// Enable the BUTTON Clock
9
      RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOC, ENABLE);
10

11
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
12

13

14

15
      /// Configure Button pin as input
16
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
17
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
18
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
19
      GPIO_Init(GPIOC, &GPIO_InitStructure);
20

21
     //Anbindung mit Interruptgenerator
22

23
        /// Connect Button EXTI Line to Button GPIO Pin
24
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource11);
25
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource12);
26

27

28
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource13);
29
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource14);
30
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource15);
31

32

33
        // Configure Button EXTI line
34
        EXTI_InitStructure.EXTI_Line =  EXTI_Line11;
35
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
36
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
37
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
38
        EXTI_Init(&EXTI_InitStructure);
39

40
        // Configure Button EXTI line
41
        EXTI_InitStructure.EXTI_Line =  EXTI_Line12;
42
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
43
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
44
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
45
        EXTI_Init(&EXTI_InitStructure);
46

47
        // Configure Button EXTI line
48
        EXTI_InitStructure.EXTI_Line =  EXTI_Line13;
49
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
50
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
51
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
52

53
        // Configure Button EXTI line
54
        EXTI_InitStructure.EXTI_Line =  EXTI_Line14;
55
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
56
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
57
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
58

59
        // Configure Button EXTI line
60
        EXTI_InitStructure.EXTI_Line =  EXTI_Line15;
61
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
62
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
63
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
64

65

66
        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
67
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
68
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
69
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
70

71
        NVIC_Init(&NVIC_InitStructure);
72

73

74
}
75

76

77

78

79
void EXTI15_10_IRQHandler()
80
{
81
  GPIOE->BSRRL=0xFFFF;
82

83

84
    //Manü Links / Wert--
85
      if (EXTI->PR & (1<<10)) {                        // EXTI13 interrupt pending?
86
      EXTI_ClearITPendingBit(EXTI_Line10);         // clear pending interrupt
87
      GPIOE->BSRRL=0xFFFF;
88

89
     }
90

91
    //Manü Links / Wert++
92
      if (EXTI->PR & (1<<11)) {                        // EXTI13 interrupt pending?
93
       EXTI_ClearITPendingBit(EXTI_Line11);                          // clear pending interrupt
94
       GPIOE->BSRRL=0x00FF;
95

96

97
     }
98

99

100
     if (EXTI->PR & (1<<12)) {                        // EXTI13 interrupt pending?
101
       EXTI_ClearITPendingBit(EXTI_Line12);                          // clear pending interrupt
102
       GPIOE->BSRRL=0xFFFF;
103
     }
104

105
     if (EXTI->PR & (1<<13)) {                        // EXTI13 interrupt pending?
106
      EXTI_ClearITPendingBit(EXTI_Line13);             // clear pending interrupt
107
       GPIOE->BSRRL=0xFFFF;
108

109
     }
110

111
     if (EXTI->PR & (1<<14)) {                        // EXTI13 interrupt pending?
112
      EXTI_ClearITPendingBit(EXTI_Line13);             // clear pending interrupt
113
       GPIOE->BSRRL=0xFFFF;
114

115
     }
116

117
     if (EXTI->PR & (1<<14)) {                        // EXTI13 interrupt pending?
118
      EXTI_ClearITPendingBit(EXTI_Line13);             // clear pending interrupt
119
       GPIOE->BSRRL=0xFFFF;
120

121
     }
122
     
123

124

125
     //EXTI_GetITStatus()
126

127

128

129

130
}

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