@@ -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