Skip to content

Commit 51bf2c4

Browse files
committed
[I2C] Clean error interrupt code for STM32F0/G0/L0
Signed-off-by: Frederic.Pillon <[email protected]>
1 parent 74bdb27 commit 51bf2c4

File tree

2 files changed

+27
-31
lines changed

2 files changed

+27
-31
lines changed

cores/arduino/stm32/twi.c

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ void i2c_custom_init(i2c_t *obj, i2c_timing_e timing, uint32_t addressingMode, u
125125
obj->irq = I2C1_EV_IRQn;
126126
#if !defined(STM32F0xx) && !defined(STM32G0xx) && !defined(STM32L0xx)
127127
obj->irqER = I2C1_ER_IRQn;
128-
#endif // !defined(STM32F0xx) && !defined(STM32G0xx) && !defined(STM32L0xx)
128+
#endif /* !STM32F0xx && !STM32G0xx && !STM32L0xx */
129129
i2c_handles[I2C1_INDEX] = handle;
130130
}
131131
#endif // I2C1_BASE
@@ -138,7 +138,7 @@ void i2c_custom_init(i2c_t *obj, i2c_timing_e timing, uint32_t addressingMode, u
138138
obj->irq = I2C2_EV_IRQn;
139139
#if !defined(STM32F0xx) && !defined(STM32G0xx) && !defined(STM32L0xx)
140140
obj->irqER = I2C2_ER_IRQn;
141-
#endif // !defined(STM32F0xx) && !defined(STM32G0xx) && !defined(STM32L0xx)
141+
#endif /* !STM32F0xx && !STM32G0xx && !STM32L0xx */
142142
i2c_handles[I2C2_INDEX] = handle;
143143
}
144144
#endif // I2C2_BASE
@@ -149,9 +149,9 @@ void i2c_custom_init(i2c_t *obj, i2c_timing_e timing, uint32_t addressingMode, u
149149
__HAL_RCC_I2C3_FORCE_RESET();
150150
__HAL_RCC_I2C3_RELEASE_RESET();
151151
obj->irq = I2C3_EV_IRQn;
152-
#if !defined(STM32F0xx) && !defined(STM32L0xx)
152+
#if !defined(STM32L0xx)
153153
obj->irqER = I2C3_ER_IRQn;
154-
#endif // !defined(STM32F0xx) && !defined(STM32L0xx)
154+
#endif /* !STM32L0xx */
155155
i2c_handles[I2C3_INDEX] = handle;
156156
}
157157
#endif // I2C3_BASE
@@ -162,9 +162,7 @@ void i2c_custom_init(i2c_t *obj, i2c_timing_e timing, uint32_t addressingMode, u
162162
__HAL_RCC_I2C4_FORCE_RESET();
163163
__HAL_RCC_I2C4_RELEASE_RESET();
164164
obj->irq = I2C4_EV_IRQn;
165-
#if !defined(STM32F0xx) && !defined(STM32L0xx)
166165
obj->irqER = I2C4_ER_IRQn;
167-
#endif // !defined(STM32F0xx) && !defined(STM32L0xx)
168166
i2c_handles[I2C4_INDEX] = handle;
169167
}
170168
#endif // I2C4_BASE
@@ -199,10 +197,10 @@ void i2c_custom_init(i2c_t *obj, i2c_timing_e timing, uint32_t addressingMode, u
199197

200198
HAL_NVIC_SetPriority(obj->irq, I2C_IRQ_PRIO, I2C_IRQ_SUBPRIO);
201199
HAL_NVIC_EnableIRQ(obj->irq);
202-
#if !defined(STM32F0xx) && !defined(STM32L0xx)
200+
#if !defined(STM32F0xx) && !defined(STM32G0xx) && !defined(STM32L0xx)
203201
HAL_NVIC_SetPriority(obj->irqER, I2C_IRQ_PRIO, I2C_IRQ_SUBPRIO);
204202
HAL_NVIC_EnableIRQ(obj->irqER);
205-
#endif // !defined(STM32F0xx) && !defined(STM32L0xx)
203+
#endif /* !STM32F0xx && !STM32G0xx && !STM32L0xx */
206204

207205
/* Init the I2C */
208206
if (HAL_I2C_Init(handle) != HAL_OK) {
@@ -223,9 +221,9 @@ void i2c_custom_init(i2c_t *obj, i2c_timing_e timing, uint32_t addressingMode, u
223221
void i2c_deinit(i2c_t *obj)
224222
{
225223
HAL_NVIC_DisableIRQ(obj->irq);
226-
#if !defined(STM32F0xx) && !defined(STM32L0xx)
224+
#if !defined(STM32F0xx) && !defined(STM32G0xx) && !defined(STM32L0xx)
227225
HAL_NVIC_DisableIRQ(obj->irqER);
228-
#endif // !defined(STM32F0xx) && !defined(STM32L0xx)
226+
#endif /* !STM32F0xx && !STM32G0xx && !STM32L0xx */
229227
HAL_I2C_DeInit(&(obj->handle));
230228
}
231229

@@ -588,12 +586,12 @@ void I2C1_EV_IRQHandler(void)
588586
{
589587
I2C_HandleTypeDef *handle = i2c_handles[I2C1_INDEX];
590588
HAL_I2C_EV_IRQHandler(handle);
591-
#if defined(STM32F0xx) || defined(STM32L0xx)
589+
#if defined(STM32F0xx) || defined(STM32G0xx) || defined(STM32L0xx)
592590
HAL_I2C_ER_IRQHandler(handle);
593-
#endif // defined(STM32F0xx) || defined(STM32L0xx)
591+
#endif /* STM32F0xx || STM32G0xx || STM32L0xx */
594592
}
595593

596-
#if !defined(STM32F0xx) && !defined(STM32L0xx)
594+
#if !defined(STM32F0xx) && !defined(STM32G0xx) && !defined(STM32L0xx)
597595
/**
598596
* @brief This function handles I2C1 interrupt.
599597
* @param None
@@ -604,7 +602,7 @@ void I2C1_ER_IRQHandler(void)
604602
I2C_HandleTypeDef *handle = i2c_handles[I2C1_INDEX];
605603
HAL_I2C_ER_IRQHandler(handle);
606604
}
607-
#endif // !defined(STM32F0xx) && !defined(STM32L0xx)
605+
#endif /* !STM32F0xx && !STM32G0xx && !STM32L0xx */
608606
#endif // I2C1_BASE
609607

610608
#if defined(I2C2_BASE)
@@ -617,12 +615,12 @@ void I2C2_EV_IRQHandler(void)
617615
{
618616
I2C_HandleTypeDef *handle = i2c_handles[I2C2_INDEX];
619617
HAL_I2C_EV_IRQHandler(handle);
620-
#if defined(STM32F0xx) || defined(STM32L0xx)
618+
#if defined(STM32F0xx) || defined(STM32G0xx) || defined(STM32L0xx)
621619
HAL_I2C_ER_IRQHandler(handle);
622-
#endif // defined(STM32F0xx) || defined(STM32L0xx)
620+
#endif /* STM32F0xx || STM32G0xx || STM32L0xx */
623621
}
624622

625-
#if !defined(STM32F0xx) && !defined(STM32L0xx)
623+
#if !defined(STM32F0xx) && !defined(STM32G0xx) && !defined(STM32L0xx)
626624
/**
627625
* @brief This function handles I2C2 interrupt.
628626
* @param None
@@ -633,7 +631,7 @@ void I2C2_ER_IRQHandler(void)
633631
I2C_HandleTypeDef *handle = i2c_handles[I2C2_INDEX];
634632
HAL_I2C_ER_IRQHandler(handle);
635633
}
636-
#endif // !defined(STM32F0xx) && !defined(STM32L0xx)
634+
#endif /* !STM32F0xx && !STM32G0xx && !STM32L0xx */
637635
#endif // I2C2_BASE
638636

639637
#if defined(I2C3_BASE)
@@ -646,12 +644,12 @@ void I2C3_EV_IRQHandler(void)
646644
{
647645
I2C_HandleTypeDef *handle = i2c_handles[I2C3_INDEX];
648646
HAL_I2C_EV_IRQHandler(handle);
649-
#if defined(STM32F0xx) || defined(STM32L0xx)
647+
#if defined(STM32L0xx)
650648
HAL_I2C_ER_IRQHandler(handle);
651-
#endif // defined(STM32F0xx) || defined(STM32L0xx)
649+
#endif /* STM32L0xx */
652650
}
653651

654-
#if !defined(STM32F0xx) && !defined(STM32L0xx)
652+
#if !defined(STM32L0xx)
655653
/**
656654
* @brief This function handles I2C3 interrupt.
657655
* @param None
@@ -662,7 +660,7 @@ void I2C3_ER_IRQHandler(void)
662660
I2C_HandleTypeDef *handle = i2c_handles[I2C3_INDEX];
663661
HAL_I2C_ER_IRQHandler(handle);
664662
}
665-
#endif // !defined(STM32F0xx) && !defined(STM32L0xx)
663+
#endif /* !STM32L0xx */
666664
#endif // I2C3_BASE
667665

668666
#if defined(I2C4_BASE)
@@ -675,12 +673,9 @@ void I2C4_EV_IRQHandler(void)
675673
{
676674
I2C_HandleTypeDef *handle = i2c_handles[I2C4_INDEX];
677675
HAL_I2C_EV_IRQHandler(handle);
678-
#if defined(STM32F0xx) || defined(STM32L0xx)
679676
HAL_I2C_ER_IRQHandler(handle);
680-
#endif // defined(STM32F0xx) || defined(STM32L0xx)
681677
}
682678

683-
#if !defined(STM32F0xx) && !defined(STM32L0xx)
684679
/**
685680
* @brief This function handles I2C4 interrupt.
686681
* @param None
@@ -691,7 +686,6 @@ void I2C4_ER_IRQHandler(void)
691686
I2C_HandleTypeDef *handle = i2c_handles[I2C4_INDEX];
692687
HAL_I2C_ER_IRQHandler(handle);
693688
}
694-
#endif // !defined(STM32F0xx) && !defined(STM32L0xx)
695689
#endif // I2C4_BASE
696690
#endif /* HAL_I2C_MODULE_ENABLED */
697691

cores/arduino/stm32/twi.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ extern "C" {
6464
/* I2C Tx/Rx buffer size */
6565
#define I2C_TXRX_BUFFER_SIZE 32
6666

67-
/* Redefinition of IRQ for F0 & L0 family */
67+
/* Redefinition of IRQ for F0/G0/L0 families */
6868
#if defined(STM32F0xx) || defined(STM32G0xx) || defined(STM32L0xx)
6969
#if defined(I2C1_BASE)
7070
#define I2C1_EV_IRQn I2C1_IRQn
@@ -74,15 +74,17 @@ extern "C" {
7474
#define I2C2_EV_IRQn I2C2_IRQn
7575
#define I2C2_EV_IRQHandler I2C2_IRQHandler
7676
#endif // defined(I2C2_BASE)
77+
/* Only for STM32L0xx */
7778
#if defined(I2C3_BASE)
7879
#define I2C3_EV_IRQn I2C3_IRQn
7980
#define I2C3_EV_IRQHandler I2C3_IRQHandler
8081
#endif // defined(I2C3_BASE)
82+
/* Defined but no one has it */
8183
#if defined(I2C4_BASE)
8284
#define I2C4_EV_IRQn I2C4_IRQn
8385
#define I2C4_EV_IRQHandler I2C4_IRQHandler
84-
#endif // defined(I2C4_BASE)-
85-
#endif // defined(STM32F0xx) || defined(STM32L0xx)
86+
#endif // defined(I2C4_BASE)
87+
#endif /* STM32F0xx || STM32G0xx || STM32L0xx */
8688

8789
typedef struct i2c_s i2c_t;
8890

@@ -97,9 +99,9 @@ struct i2c_s {
9799
PinName sda;
98100
PinName scl;
99101
IRQn_Type irq;
100-
#if !defined(STM32F0xx) && !defined(STM32L0xx)
102+
#if !defined(STM32F0xx) && !defined(STM32G0xx) && !defined(STM32L0xx)
101103
IRQn_Type irqER;
102-
#endif //!defined(STM32F0xx) && !defined(STM32L0xx)
104+
#endif /* !STM32F0xx && !STM32G0xx && !STM32L0xx */
103105
volatile int slaveRxNbData; // Number of accumulated bytes received in Slave mode
104106
void (*i2c_onSlaveReceive)(uint8_t *, int);
105107
void (*i2c_onSlaveTransmit)(void);

0 commit comments

Comments
 (0)