@@ -38,7 +38,8 @@ static gpio_irq_handler irq_handler;
38
38
static GPIO_Type * const gpio_addrs [] = GPIO_BASE_PTRS ;
39
39
40
40
/* Array of PORT IRQ number. */
41
- static const IRQn_Type gpio_irqs [] = GPIO_COMBINED_IRQS ;
41
+ static const IRQn_Type gpio_low_irqs [] = GPIO_COMBINED_LOW_IRQS ;
42
+ static const IRQn_Type gpio_high_irqs [] = GPIO_COMBINED_HIGH_IRQS ;
42
43
43
44
static void handle_interrupt_in (PortName port , int ch_base )
44
45
{
@@ -117,8 +118,6 @@ void gpio5_irq(void)
117
118
118
119
int gpio_irq_init (gpio_irq_t * obj , PinName pin , gpio_irq_handler handler , uint32_t id )
119
120
{
120
- uint32_t int_index ;
121
-
122
121
if (pin == NC ) {
123
122
return -1 ;
124
123
}
@@ -156,14 +155,14 @@ int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32
156
155
break ;
157
156
}
158
157
159
- int_index = 2 * obj -> port ;
160
158
if (obj -> pin > 15 ) {
161
- int_index -= 1 ;
159
+ NVIC_SetVector (gpio_high_irqs [obj -> port ], vector );
160
+ NVIC_EnableIRQ (gpio_high_irqs [obj -> port ]);
161
+ } else {
162
+ NVIC_SetVector (gpio_low_irqs [obj -> port ], vector );
163
+ NVIC_EnableIRQ (gpio_low_irqs [obj -> port ]);
162
164
}
163
165
164
- NVIC_SetVector (gpio_irqs [int_index ], vector );
165
- NVIC_EnableIRQ (gpio_irqs [int_index ]);
166
-
167
166
obj -> ch = ch_base + obj -> pin ;
168
167
channel_ids [obj -> ch ] = id ;
169
168
@@ -243,12 +242,20 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable)
243
242
244
243
void gpio_irq_enable (gpio_irq_t * obj )
245
244
{
246
- NVIC_EnableIRQ (gpio_irqs [obj -> port ]);
245
+ if (obj -> pin > 15 ) {
246
+ NVIC_EnableIRQ (gpio_high_irqs [obj -> port ]);
247
+ } else {
248
+ NVIC_EnableIRQ (gpio_low_irqs [obj -> port ]);
249
+ }
247
250
}
248
251
249
252
void gpio_irq_disable (gpio_irq_t * obj )
250
253
{
251
- NVIC_DisableIRQ (gpio_irqs [obj -> port ]);
254
+ if (obj -> pin > 15 ) {
255
+ NVIC_DisableIRQ (gpio_high_irqs [obj -> port ]);
256
+ } else {
257
+ NVIC_DisableIRQ (gpio_low_irqs [obj -> port ]);
258
+ }
252
259
}
253
260
254
261
#endif
0 commit comments