@@ -32,10 +32,12 @@ static inline void handle_interrupt_in(uint32_t channel) {
32
32
// the level of the pin as if it were just a normal input...
33
33
34
34
// Get the number of the pin being used and the port typedef
35
- uint8_t pin_number = (pin_names [channel ] & (0x0f << 8 )) >> 8 ;
35
+ uint32_t pin = (pin_names [channel ] & (0x0f << 8 )) >> 8 ;
36
36
LPC_GPIO_TypeDef * port_reg = ((LPC_GPIO_TypeDef * ) (LPC_GPIO0_BASE + (((pin & 0xF000 ) >> PORT_SHIFT ) * 0x10000 )));
37
+ uint32_t logiclevel = port_reg -> DATA ;
38
+ logiclevel &= (uint32_t )(1 << pin ) >> pin ;
37
39
38
- if (( port_reg -> MASKED_ACCESS & ( 1 << pin_number )) >> pin_number ) {
40
+ if (logiclevel == 1 ) {
39
41
// High, therefore rising edge...
40
42
irq_handler (channel_ids [channel ], IRQ_RISE );
41
43
}
@@ -66,27 +68,27 @@ int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32
66
68
}
67
69
*/
68
70
69
- channel_ids [channnel ] = id ;
71
+ channel_ids [channel ] = id ;
70
72
pin_names [channel ] = pin ;
71
73
obj -> ch = channel ;
72
74
73
75
// Which port are we using?
74
76
switch (channel ) {
75
77
case 0 :
76
78
NVIC_SetVector (EINT0_IRQn , (uint32_t )gpio_irq0 );
77
- NVIC_EnableIrq (EINT0_IRQn );
79
+ NVIC_EnableIRQ (EINT0_IRQn );
78
80
break ;
79
81
case 1 :
80
82
NVIC_SetVector (EINT1_IRQn , (uint32_t )gpio_irq1 );
81
- NVIC_EnableIrq (EINT1_IRQn );
83
+ NVIC_EnableIRQ (EINT1_IRQn );
82
84
break ;
83
85
case 2 :
84
86
NVIC_SetVector (EINT2_IRQn , (uint32_t )gpio_irq2 );
85
- NVIC_EnableIrq (EINT2_IRQn );
87
+ NVIC_EnableIRQ (EINT2_IRQn );
86
88
break ;
87
89
case 3 :
88
90
NVIC_SetVector (EINT3_IRQn , (uint32_t )gpio_irq3 );
89
- NVIC_EnableIrq (EINT3_IRQn );
91
+ NVIC_EnableIRQ (EINT3_IRQn );
90
92
break ;
91
93
}
92
94
@@ -99,8 +101,7 @@ void gpio_irq_free(gpio_irq_t *obj) {
99
101
}
100
102
101
103
void gpio_irq_set (gpio_irq_t * obj , gpio_irq_event event , uint32_t enable ) {
102
- pin = obj -> pin ;
103
- LPC_GPIO_TypeDef * port_reg = ((LPC_GPIO_TypeDef * ) (LPC_GPIO0_BASE + (((pin & 0xF000 ) >> PORT_SHIFT ) * 0x10000 )));
104
+ LPC_GPIO_TypeDef * port_reg = ((LPC_GPIO_TypeDef * ) (LPC_GPIO0_BASE + (((obj -> pin & 0xF000 ) >> PORT_SHIFT ) * 0x10000 )));
104
105
105
106
/*
106
107
Firstly, clear the interrupts for this pin,
0 commit comments