Skip to content

Commit 895b6e8

Browse files
olivlucalamauny
andauthored
[lightning-ln882h] Fix GPIO interrupt support (#326)
* fix interrupt handling for the ln882h - all GPIOS can generate interrupts - added calls to NVIC_SetPriority/NVIC_EnableIRQ/NVIC_DisableIRQ * fix clang formatting error * only call NVIC_DisableIRQ if no other gpio is using an interrupt * fix (again) clang-format errors * add IRQ capability on all pins * don't bother with NVIC_DisableIRQ * use pin->gpio instead of interruptNumber, use macro GPIO_GET_PORT for clarity * Mark interrupts as supported for the LN882H --------- Co-authored-by: lamauny <[email protected]>
1 parent 9114bc4 commit 895b6e8

File tree

6 files changed

+38
-23
lines changed

6 files changed

+38
-23
lines changed

boards/_base/ic/ln882hk.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
"12": {
5050
"C_NAME": "PA_4",
5151
"GPIO": "PA04",
52+
"IRQ": null,
5253
"ADC": 4,
5354
"SWD": "CLK",
5455
"I2C": [
@@ -89,6 +90,7 @@
8990
"16": {
9091
"C_NAME": "PA_8",
9192
"GPIO": "PA08",
93+
"IRQ": null,
9294
"CTRL": "BOOT0",
9395
"SD": "CMD",
9496
"I2S": "0_WS",
@@ -100,6 +102,7 @@
100102
"17": {
101103
"C_NAME": "PA_9",
102104
"GPIO": "PA09",
105+
"IRQ": null,
103106
"CTRL": "BOOT1",
104107
"SD": "CLK",
105108
"I2S": "0_SCLK",
@@ -111,6 +114,7 @@
111114
"21": {
112115
"C_NAME": "PA_10",
113116
"GPIO": "PA10",
117+
"IRQ": null,
114118
"SD": "D0",
115119
"I2S": "0_TX",
116120
"I2C": [
@@ -121,6 +125,7 @@
121125
"22": {
122126
"C_NAME": "PA_11",
123127
"GPIO": "PA11",
128+
"IRQ": null,
124129
"SD": "D1",
125130
"I2C": [
126131
"0_SCL",
@@ -130,6 +135,7 @@
130135
"23": {
131136
"C_NAME": "PA_12",
132137
"GPIO": "PA12",
138+
"IRQ": null,
133139
"I2C": [
134140
"0_SCL",
135141
"0_SDA"
@@ -139,6 +145,7 @@
139145
"C_NAME": "PB_3",
140146
"GPIO": "PB03",
141147
"GPIONUM": 19,
148+
"IRQ": null,
142149
"ADC": 5,
143150
"I2C": [
144151
"0_SCL",
@@ -149,6 +156,7 @@
149156
"C_NAME": "PB_4",
150157
"GPIO": "PB04",
151158
"GPIONUM": 20,
159+
"IRQ": null,
152160
"ADC": 6,
153161
"I2C": [
154162
"0_SCL",
@@ -159,6 +167,7 @@
159167
"C_NAME": "PB_5",
160168
"GPIO": "PB05",
161169
"GPIONUM": 21,
170+
"IRQ": null,
162171
"ADC": 7,
163172
"I2C": [
164173
"0_SCL",
@@ -169,6 +178,7 @@
169178
"C_NAME": "PB_6",
170179
"GPIO": "PB06",
171180
"GPIONUM": 22,
181+
"IRQ": null,
172182
"I2C": [
173183
"0_SCL",
174184
"0_SDA"
@@ -178,6 +188,7 @@
178188
"C_NAME": "PB_7",
179189
"GPIO": "PB07",
180190
"GPIONUM": 23,
191+
"IRQ": null,
181192
"I2C": [
182193
"0_SCL",
183194
"0_SDA"
@@ -187,6 +198,7 @@
187198
"C_NAME": "PB_8",
188199
"GPIO": "PB08",
189200
"GPIONUM": 24,
201+
"IRQ": null,
190202
"UART": "1_RX",
191203
"I2C": [
192204
"0_SCL",

boards/variants/generic-ln882hki.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,35 +17,35 @@ PinInfo lt_arduino_pin_info_list[PINS_COUNT] = {
1717
// D3: PA03, UART0_RX, I2C0_SCL, I2C0_SDA
1818
{PA_3, PIN_UART | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
1919
// D4: PA04, ADC4, SWCLK, I2C0_SCL, I2C0_SDA
20-
{PA_4, PIN_SWD | PIN_I2C | PIN_ADC | PIN_GPIO, PIN_NONE, 0},
20+
{PA_4, PIN_SWD | PIN_I2C | PIN_ADC | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
2121
// D5: PA05, I2C0_SCL, I2C0_SDA
2222
{PA_5, PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
2323
// D6: PA06, SD_D2, I2C0_SCL, I2C0_SDA
2424
{PA_6, PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
2525
// D7: PA07, SD_D3, I2S0_RX, I2C0_SCL, I2C0_SDA
2626
{PA_7, PIN_I2S | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
2727
// D8: PA08, BOOT0, SD_CMD, I2S0_WS, I2C0_SCL, I2C0_SDA
28-
{PA_8, PIN_I2S | PIN_I2C | PIN_GPIO, PIN_NONE, 0},
28+
{PA_8, PIN_I2S | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
2929
// D9: PA09, BOOT1, SD_CLK, I2S0_SCLK, I2C0_SCL, I2C0_SDA
30-
{PA_9, PIN_I2S | PIN_I2C | PIN_GPIO, PIN_NONE, 0},
30+
{PA_9, PIN_I2S | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
3131
// D10: PA10, SD_D0, I2S0_TX, I2C0_SCL, I2C0_SDA
32-
{PA_10, PIN_I2S | PIN_I2C | PIN_GPIO, PIN_NONE, 0},
32+
{PA_10, PIN_I2S | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
3333
// D11: PA11, SD_D1, I2C0_SCL, I2C0_SDA
34-
{PA_11, PIN_I2C | PIN_GPIO, PIN_NONE, 0},
34+
{PA_11, PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
3535
// D12: PA12, I2C0_SCL, I2C0_SDA
36-
{PA_12, PIN_I2C | PIN_GPIO, PIN_NONE, 0},
36+
{PA_12, PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
3737
// D13: PB03, ADC5, I2C0_SCL, I2C0_SDA
38-
{PB_3, PIN_I2C | PIN_ADC | PIN_GPIO, PIN_NONE, 0},
38+
{PB_3, PIN_I2C | PIN_ADC | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
3939
// D14: PB04, ADC6, I2C0_SCL, I2C0_SDA
40-
{PB_4, PIN_I2C | PIN_ADC | PIN_GPIO, PIN_NONE, 0},
40+
{PB_4, PIN_I2C | PIN_ADC | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
4141
// D15: PB05, ADC7, I2C0_SCL, I2C0_SDA
42-
{PB_5, PIN_I2C | PIN_ADC | PIN_GPIO, PIN_NONE, 0},
42+
{PB_5, PIN_I2C | PIN_ADC | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
4343
// D16: PB06, I2C0_SCL, I2C0_SDA
44-
{PB_6, PIN_I2C | PIN_GPIO, PIN_NONE, 0},
44+
{PB_6, PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
4545
// D17: PB07, I2C0_SCL, I2C0_SDA
46-
{PB_7, PIN_I2C | PIN_GPIO, PIN_NONE, 0},
46+
{PB_7, PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
4747
// D18: PB08, UART1_RX, I2C0_SCL, I2C0_SDA
48-
{PB_8, PIN_UART | PIN_I2C | PIN_GPIO, PIN_NONE, 0},
48+
{PB_8, PIN_UART | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
4949
// D19: PB09, UART1_TX, I2C0_SCL, I2C0_SDA
5050
{PB_9, PIN_UART | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
5151
};

boards/variants/ln-02.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
// clang-format off
1010
PinInfo lt_arduino_pin_info_list[PINS_COUNT] = {
1111
// D0: PA11, SD_D1, I2C0_SCL, I2C0_SDA
12-
{PA_11, PIN_I2C | PIN_GPIO, PIN_NONE, 0},
12+
{PA_11, PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
1313
// D1: PB03, ADC5, I2C0_SCL, I2C0_SDA
14-
{PB_3, PIN_I2C | PIN_ADC | PIN_GPIO, PIN_NONE, 0},
14+
{PB_3, PIN_I2C | PIN_ADC | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
1515
// D2: PA03, UART0_RX, I2C0_SCL, I2C0_SDA
1616
{PA_3, PIN_UART | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
1717
// D3: PB08, UART1_RX, I2C0_SCL, I2C0_SDA
18-
{PB_8, PIN_UART | PIN_I2C | PIN_GPIO, PIN_NONE, 0},
18+
{PB_8, PIN_UART | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
1919
// D4: PA02, UART0_TX, I2C0_SCL, I2C0_SDA
2020
{PA_2, PIN_UART | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
2121
// D5: PB09, UART1_TX, I2C0_SCL, I2C0_SDA
@@ -25,7 +25,7 @@ PinInfo lt_arduino_pin_info_list[PINS_COUNT] = {
2525
// D7: PA00, ADC2, I2C0_SCL, I2C0_SDA
2626
{PA_0, PIN_I2C | PIN_ADC | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
2727
// D8: PA09, BOOT1, SD_CLK, I2S0_SCLK, I2C0_SCL, I2C0_SDA
28-
{PA_9, PIN_I2S | PIN_I2C | PIN_GPIO, PIN_NONE, 0},
28+
{PA_9, PIN_I2S | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
2929
};
3030

3131
PinInfo *lt_arduino_pin_gpio_map[] = {

boards/variants/wl2s.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,23 @@ PinInfo lt_arduino_pin_info_list[PINS_COUNT] = {
1111
// D0: PA07, SD_D3, I2S0_RX, I2C0_SCL, I2C0_SDA
1212
{PA_7, PIN_I2S | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
1313
// D1: PA12, I2C0_SCL, I2C0_SDA
14-
{PA_12, PIN_I2C | PIN_GPIO, PIN_NONE, 0},
14+
{PA_12, PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
1515
// D2: PA03, UART0_RX, I2C0_SCL, I2C0_SDA
1616
{PA_3, PIN_UART | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
1717
// D3: PA10, SD_D0, I2S0_TX, I2C0_SCL, I2C0_SDA
18-
{PA_10, PIN_I2S | PIN_I2C | PIN_GPIO, PIN_NONE, 0},
18+
{PA_10, PIN_I2S | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
1919
// D4: PA02, UART0_TX, I2C0_SCL, I2C0_SDA
2020
{PA_2, PIN_UART | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
2121
// D5: PA00, ADC2, I2C0_SCL, I2C0_SDA
2222
{PA_0, PIN_I2C | PIN_ADC | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
2323
// D6: PB03, ADC5, I2C0_SCL, I2C0_SDA
24-
{PB_3, PIN_I2C | PIN_ADC | PIN_GPIO, PIN_NONE, 0},
24+
{PB_3, PIN_I2C | PIN_ADC | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
2525
// D7: PA11, SD_D1, I2C0_SCL, I2C0_SDA
26-
{PA_11, PIN_I2C | PIN_GPIO, PIN_NONE, 0},
26+
{PA_11, PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
2727
// D8: PA09, BOOT1, SD_CLK, I2S0_SCLK, I2C0_SCL, I2C0_SDA
28-
{PA_9, PIN_I2S | PIN_I2C | PIN_GPIO, PIN_NONE, 0},
28+
{PA_9, PIN_I2S | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
2929
// D9: PB08, UART1_RX, I2C0_SCL, I2C0_SDA
30-
{PB_8, PIN_UART | PIN_I2C | PIN_GPIO, PIN_NONE, 0},
30+
{PB_8, PIN_UART | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
3131
// D10: PB09, UART1_TX, I2C0_SCL, I2C0_SDA
3232
{PB_9, PIN_UART | PIN_I2C | PIN_IRQ | PIN_GPIO, PIN_NONE, 0},
3333
// D11: PA05, I2C0_SCL, I2C0_SDA

cores/lightning-ln882h/arduino/src/wiring_irq.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ void attachInterruptParam(pin_size_t interruptNumber, voidFuncPtrParam callback,
8181

8282
hal_gpio_pin_it_cfg(data->gpio_base, data->gpio->pin, event);
8383
hal_gpio_pin_it_en(data->gpio_base, data->gpio->pin, HAL_ENABLE);
84+
uint16_t IRQForPin = GPIO_GET_PORT(pin->gpio) == PORT_A ? GPIOA_IRQn : GPIOB_IRQn;
85+
NVIC_SetPriority(IRQForPin, 1);
86+
NVIC_EnableIRQ(IRQForPin);
8487
}
8588

8689
void detachInterrupt(pin_size_t interruptNumber) {

docs/status/supported.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ Watchdog timer | ✔️ | ✔️ | ✔️ | ❓
4949
**PERIPHERALS** (Wiring) | | | | | |
5050
Digital I/O | ✔️ | ✔️ | ✔️ | ❓ | ❓ | ✔️
5151
PWM | ✔️ | ✔️ | ✔️ | ❓ | ❓ | ❌
52-
Interrupts | ✔️ | ✔️ | ✔️ | ❓ | ❓ |
52+
Interrupts | ✔️ | ✔️ | ✔️ | ❓ | ❓ | ✔️
5353
Analog input (ADC) | ✔️ | ✔️ | ✔️ | ❓ | ❓ | ✔️
5454
`Wire` (I²C) | ❌ | ❌ | ❗ | ❌ | ❌ | ❓
5555
`SPI` | ❌ | ❌ | ❌ | ❌ | ❌ | ❌

0 commit comments

Comments
 (0)