Skip to content

Commit d754b59

Browse files
committed
Pin initialization
1 parent 78d4414 commit d754b59

File tree

2 files changed

+38
-32
lines changed

2 files changed

+38
-32
lines changed

src/stm32-config-i2s.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
{mclk, PC_7, GPIO_AF6_SPI3},\
2727
{bck, PC_10, GPIO_AF6_SPI3},\
2828
{ws, PA_4, GPIO_AF6_SPI3},\
29-
{data_out, PC_3, GPIO_AF6_SPI3},\
30-
{data_in, PC_12, GPIO_AF6_SPI3}\
29+
{data_out, PC_12, GPIO_AF6_SPI3},\
30+
{data_in, PC_3, GPIO_AF6_SPI3}\
3131
};
3232
#define PLLN 200
3333
#define PLLM 5

src/stm32-i2s.h

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ enum I2SPinFunction { mclk, bck, ws, data_out, data_in };
4545

4646
/**
4747
* @brief Define individual Pin. This is used to set up processor specific
48-
* arrays with all I2S pins.
48+
* arrays with all I2S pins and to setup and end the pin definition.
4949
* @author Phil Schatzmann
5050
* @copyright GPLv3
5151
*/
@@ -59,6 +59,40 @@ struct I2SPin {
5959
I2SPinFunction function;
6060
PinName pin;
6161
int altFunction;
62+
63+
void begin(){
64+
end();
65+
// define the pin function
66+
pin_function(pin, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, altFunction));
67+
}
68+
69+
/// Undo the current pin function
70+
void end(){
71+
PinName p = pin;
72+
if (p != NC) {
73+
// If the pin that support PWM or DAC output, we need to turn it off
74+
#if (defined(HAL_DAC_MODULE_ENABLED) && !defined(HAL_DAC_MODULE_ONLY)) ||\
75+
(defined(HAL_TIM_MODULE_ENABLED) && !defined(HAL_TIM_MODULE_ONLY))
76+
if (is_pin_configured(p, g_anOutputPinConfigured)) {
77+
#if defined(HAL_DAC_MODULE_ENABLED) && !defined(HAL_DAC_MODULE_ONLY)
78+
if (pin_in_pinmap(p, PinMap_DAC)) {
79+
dac_stop(p);
80+
} else
81+
#endif //HAL_DAC_MODULE_ENABLED && !HAL_DAC_MODULE_ONLY
82+
#if defined(HAL_TIM_MODULE_ENABLED) && !defined(HAL_TIM_MODULE_ONLY)
83+
if (pin_in_pinmap(p, PinMap_TIM)) {
84+
pwm_stop(p);
85+
}
86+
#endif //HAL_TIM_MODULE_ENABLED && !HAL_TIM_MODULE_ONLY
87+
{
88+
reset_pin_configured(p, g_anOutputPinConfigured);
89+
}
90+
}
91+
#endif
92+
}
93+
}
94+
95+
6296
};
6397

6498
/**
@@ -296,39 +330,11 @@ class Stm32I2sClass {
296330

297331
// Define pins
298332
for (I2SPin &pin : hw.pins) {
299-
//pinModeAltFunction(pin.pin, pin.altFunction);
300-
PinName p = pin.pin;
301-
resetPin(p);
302-
// define I2S function (= alternative Function)
303-
pin_function(p, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, pin.altFunction));
333+
pin.begin();
304334
}
305335
}
306336

307337

308-
/// Undo the current pin function
309-
void resetPin(PinName p){
310-
if (p != NC) {
311-
// If the pin that support PWM or DAC output, we need to turn it off
312-
#if (defined(HAL_DAC_MODULE_ENABLED) && !defined(HAL_DAC_MODULE_ONLY)) ||\
313-
(defined(HAL_TIM_MODULE_ENABLED) && !defined(HAL_TIM_MODULE_ONLY))
314-
if (is_pin_configured(p, g_anOutputPinConfigured)) {
315-
#if defined(HAL_DAC_MODULE_ENABLED) && !defined(HAL_DAC_MODULE_ONLY)
316-
if (pin_in_pinmap(p, PinMap_DAC)) {
317-
dac_stop(p);
318-
} else
319-
#endif //HAL_DAC_MODULE_ENABLED && !HAL_DAC_MODULE_ONLY
320-
#if defined(HAL_TIM_MODULE_ENABLED) && !defined(HAL_TIM_MODULE_ONLY)
321-
if (pin_in_pinmap(p, PinMap_TIM)) {
322-
pwm_stop(p);
323-
}
324-
#endif //HAL_TIM_MODULE_ENABLED && !HAL_TIM_MODULE_ONLY
325-
{
326-
reset_pin_configured(p, g_anOutputPinConfigured);
327-
}
328-
}
329-
#endif
330-
}
331-
}
332338

333339
/**
334340
* Enable DMA controller clock

0 commit comments

Comments
 (0)