39
39
#define EDGE_FALL (2)
40
40
#define EDGE_BOTH (3)
41
41
42
- #define CHANNEL_NUM (7 )
42
+ #define CHANNEL_NUM (4 )
43
43
44
- static uint32_t channel_ids [CHANNEL_NUM ] = {0 , 0 , 0 , 0 , 0 , 0 , 0 };
45
- static uint32_t channel_gpio [CHANNEL_NUM ] = {0 , 0 , 0 , 0 , 0 , 0 , 0 };
46
- static uint32_t channel_pin [CHANNEL_NUM ] = {0 , 0 , 0 , 0 , 0 , 0 , 0 };
44
+ static uint32_t channel_ids [CHANNEL_NUM ] = {0 , 0 , 0 , 0 };
45
+ static uint32_t channel_gpio [CHANNEL_NUM ] = {0 , 0 , 0 , 0 };
46
+ static uint32_t channel_pin [CHANNEL_NUM ] = {0 , 0 , 0 , 0 };
47
47
48
48
static gpio_irq_handler irq_handler ;
49
49
50
50
static void handle_interrupt_in (uint32_t irq_index ) {
51
51
// Retrieve the gpio and pin that generate the irq
52
52
GPIO_TypeDef * gpio = (GPIO_TypeDef * )(channel_gpio [irq_index ]);
53
53
uint32_t pin = (uint32_t )(1 << channel_pin [irq_index ]);
54
-
54
+
55
55
// Clear interrupt flag
56
56
if (EXTI_GetITStatus (pin ) != RESET )
57
57
{
@@ -70,13 +70,10 @@ static void handle_interrupt_in(uint32_t irq_index) {
70
70
}
71
71
72
72
// The irq_index is passed to the function
73
- static void gpio_irq0 (void ) {handle_interrupt_in (0 );} // EXTI line 0
74
- static void gpio_irq1 (void ) {handle_interrupt_in (1 );} // EXTI line 1
75
- static void gpio_irq2 (void ) {handle_interrupt_in (2 );} // EXTI line 2
76
- static void gpio_irq3 (void ) {handle_interrupt_in (3 );} // EXTI line 3
77
- static void gpio_irq4 (void ) {handle_interrupt_in (4 );} // EXTI line 4
78
- static void gpio_irq5 (void ) {handle_interrupt_in (5 );} // EXTI lines 5 to 9
79
- static void gpio_irq6 (void ) {handle_interrupt_in (6 );} // EXTI lines 10 to 15
73
+ static void gpio_irq0 (void ) {handle_interrupt_in (0 );}
74
+ static void gpio_irq1 (void ) {handle_interrupt_in (1 );}
75
+ static void gpio_irq2 (void ) {handle_interrupt_in (2 );}
76
+ static void gpio_irq3 (void ) {handle_interrupt_in (3 );}
80
77
81
78
extern uint32_t Set_GPIO_Clock (uint32_t port_idx );
82
79
@@ -91,53 +88,29 @@ int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32
91
88
uint32_t pin_index = STM_PIN (pin );
92
89
93
90
// Select irq number and interrupt routine
94
- switch (pin_index ) {
95
- case 0 :
96
- irq_n = EXTI0_IRQn ;
91
+ switch (pin ) {
92
+ case PC_13 : // User button
93
+ irq_n = EXTI15_10_IRQn ;
97
94
vector = (uint32_t )& gpio_irq0 ;
98
95
irq_index = 0 ;
99
96
break ;
100
- case 1 :
101
- irq_n = EXTI1_IRQn ;
97
+ case PB_3 :
98
+ irq_n = EXTI3_IRQn ;
102
99
vector = (uint32_t )& gpio_irq1 ;
103
100
irq_index = 1 ;
104
101
break ;
105
- case 2 :
106
- irq_n = EXTI2_IRQn ;
102
+ case PB_4 :
103
+ irq_n = EXTI4_IRQn ;
107
104
vector = (uint32_t )& gpio_irq2 ;
108
105
irq_index = 2 ;
109
106
break ;
110
- case 3 :
111
- irq_n = EXTI3_IRQn ;
107
+ case PB_5 :
108
+ irq_n = EXTI9_5_IRQn ;
112
109
vector = (uint32_t )& gpio_irq3 ;
113
110
irq_index = 3 ;
114
111
break ;
115
- case 4 :
116
- irq_n = EXTI4_IRQn ;
117
- vector = (uint32_t )& gpio_irq4 ;
118
- irq_index = 4 ;
119
- break ;
120
- case 5 :
121
- case 6 :
122
- case 7 :
123
- case 8 :
124
- case 9 :
125
- irq_n = EXTI9_5_IRQn ;
126
- vector = (uint32_t )& gpio_irq5 ;
127
- irq_index = 5 ;
128
- break ;
129
- case 10 :
130
- case 11 :
131
- case 12 :
132
- case 13 :
133
- case 14 :
134
- case 15 :
135
- irq_n = EXTI15_10_IRQn ;
136
- vector = (uint32_t )& gpio_irq6 ;
137
- irq_index = 6 ;
138
- break ;
139
112
default :
140
- error ("InterruptIn error: pin not supported.\n " );
113
+ error ("This pin is not supported with InterruptIn. " );
141
114
return -1 ;
142
115
}
143
116
0 commit comments