mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-27 07:21:18 +01:00
Merge pull request #11542 from aabadie/stm32_spi_gpio_mode
stm32-common/spi: allow custom pin modes on spi to minimize power consumption
This commit is contained in:
commit
86870c7ede
@ -3,7 +3,7 @@ FEATURES_PROVIDED += periph_dma
|
||||
FEATURES_PROVIDED += periph_i2c
|
||||
FEATURES_PROVIDED += periph_rtc
|
||||
FEATURES_PROVIDED += periph_rtt
|
||||
FEATURES_PROVIDED += periph_spi
|
||||
FEATURES_PROVIDED += periph_spi periph_spi_gpio_mode
|
||||
FEATURES_PROVIDED += periph_timer
|
||||
FEATURES_PROVIDED += periph_uart
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ FEATURES_PROVIDED += periph_i2c
|
||||
FEATURES_PROVIDED += periph_lpuart
|
||||
FEATURES_PROVIDED += periph_rtc
|
||||
FEATURES_PROVIDED += periph_rtt
|
||||
FEATURES_PROVIDED += periph_spi
|
||||
FEATURES_PROVIDED += periph_spi periph_spi_gpio_mode
|
||||
FEATURES_PROVIDED += periph_timer
|
||||
FEATURES_PROVIDED += periph_uart
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
# Put defined MCU peripherals here (in alphabetical order)
|
||||
FEATURES_PROVIDED += periph_i2c
|
||||
FEATURES_PROVIDED += periph_rtc
|
||||
FEATURES_PROVIDED += periph_spi
|
||||
FEATURES_PROVIDED += periph_spi periph_spi_gpio_mode
|
||||
FEATURES_PROVIDED += periph_timer
|
||||
FEATURES_PROVIDED += periph_uart
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ FEATURES_PROVIDED += periph_dma
|
||||
FEATURES_PROVIDED += periph_i2c
|
||||
FEATURES_PROVIDED += periph_rtc
|
||||
FEATURES_PROVIDED += periph_rtt
|
||||
FEATURES_PROVIDED += periph_spi
|
||||
FEATURES_PROVIDED += periph_spi periph_spi_gpio_mode
|
||||
FEATURES_PROVIDED += periph_timer
|
||||
FEATURES_PROVIDED += periph_uart
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ FEATURES_PROVIDED += periph_lpuart
|
||||
FEATURES_PROVIDED += periph_pwm
|
||||
FEATURES_PROVIDED += periph_rtc
|
||||
FEATURES_PROVIDED += periph_rtt
|
||||
FEATURES_PROVIDED += periph_spi
|
||||
FEATURES_PROVIDED += periph_spi periph_spi_gpio_mode
|
||||
FEATURES_PROVIDED += periph_timer
|
||||
FEATURES_PROVIDED += periph_uart
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ FEATURES_PROVIDED += periph_dma
|
||||
FEATURES_PROVIDED += periph_i2c
|
||||
FEATURES_PROVIDED += periph_pwm
|
||||
FEATURES_PROVIDED += periph_rtc
|
||||
FEATURES_PROVIDED += periph_spi
|
||||
FEATURES_PROVIDED += periph_spi periph_spi_gpio_mode
|
||||
FEATURES_PROVIDED += periph_timer
|
||||
FEATURES_PROVIDED += periph_uart
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ FEATURES_PROVIDED += periph_dac
|
||||
FEATURES_PROVIDED += periph_i2c
|
||||
FEATURES_PROVIDED += periph_pwm
|
||||
FEATURES_PROVIDED += periph_rtc
|
||||
FEATURES_PROVIDED += periph_spi
|
||||
FEATURES_PROVIDED += periph_spi periph_spi_gpio_mode
|
||||
FEATURES_PROVIDED += periph_timer
|
||||
FEATURES_PROVIDED += periph_uart
|
||||
|
||||
|
||||
@ -116,6 +116,28 @@ int spi_init_cs(spi_t bus, spi_cs_t cs)
|
||||
return SPI_OK;
|
||||
}
|
||||
|
||||
#ifdef MODULE_PERIPH_SPI_GPIO_MODE
|
||||
int spi_init_with_gpio_mode(spi_t bus, spi_gpio_mode_t mode)
|
||||
{
|
||||
assert(bus < SPI_NUMOF);
|
||||
|
||||
int ret = 0;
|
||||
|
||||
#ifdef CPU_FAM_STM32F1
|
||||
/* This has no effect on STM32F1 */
|
||||
return ret;
|
||||
#else
|
||||
ret += gpio_init(spi_config[bus].mosi_pin, mode.mosi);
|
||||
ret += gpio_init(spi_config[bus].miso_pin, mode.miso);
|
||||
ret += gpio_init(spi_config[bus].sclk_pin, mode.sclk);
|
||||
gpio_init_af(spi_config[bus].mosi_pin, spi_config[bus].af);
|
||||
gpio_init_af(spi_config[bus].miso_pin, spi_config[bus].af);
|
||||
gpio_init_af(spi_config[bus].sclk_pin, spi_config[bus].af);
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)
|
||||
{
|
||||
/* lock bus */
|
||||
|
||||
@ -489,6 +489,7 @@ ifneq (,$(filter sx127%,$(USEMODULE)))
|
||||
FEATURES_REQUIRED += periph_gpio
|
||||
FEATURES_REQUIRED += periph_gpio_irq
|
||||
FEATURES_REQUIRED += periph_spi
|
||||
FEATURES_OPTIONAL += periph_spi_gpio_mode
|
||||
USEMODULE += iolist
|
||||
USEMODULE += xtimer
|
||||
USEMODULE += sx127x
|
||||
|
||||
@ -225,6 +225,29 @@ void spi_init_pins(spi_t bus);
|
||||
*/
|
||||
int spi_init_cs(spi_t bus, spi_cs_t cs);
|
||||
|
||||
#if defined(MODULE_PERIPH_SPI_GPIO_MODE) || DOXYGEN
|
||||
|
||||
/**
|
||||
* @brief SPI gpio mode
|
||||
*/
|
||||
typedef struct {
|
||||
gpio_mode_t mosi; /**< GPIO mode used for MOSI pin */
|
||||
gpio_mode_t miso; /**< GPIO mode used for MISO pin */
|
||||
gpio_mode_t sclk; /**< GPIO mode used for SCLK pin */
|
||||
} spi_gpio_mode_t;
|
||||
|
||||
/**
|
||||
* @brief Initialize MOSI/MISO/SCLK pins with adapted GPIO modes
|
||||
*
|
||||
* @param[in] bus SPI device that is used with the given CS line
|
||||
* @param[in] mode a struct containing the 3 modes to use on each pin
|
||||
*
|
||||
* @return 0 on success
|
||||
* @return <0 on error
|
||||
*/
|
||||
int spi_init_with_gpio_mode(spi_t bus, spi_gpio_mode_t mode);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Start a new SPI transaction
|
||||
*
|
||||
|
||||
@ -344,6 +344,15 @@ static int _init_spi(sx127x_t *dev)
|
||||
/* Setup SPI for SX127X */
|
||||
res = spi_init_cs(dev->params.spi, dev->params.nss_pin);
|
||||
|
||||
#ifdef MODULE_PERIPH_SPI_GPIO_MODE
|
||||
spi_gpio_mode_t gpio_modes = {
|
||||
.mosi = (GPIO_OUT | SX127X_DIO_PULL_MODE),
|
||||
.miso = (SX127X_DIO_PULL_MODE),
|
||||
.sclk = (GPIO_OUT | SX127X_DIO_PULL_MODE),
|
||||
};
|
||||
res += spi_init_with_gpio_mode(dev->params.spi, gpio_modes);
|
||||
#endif
|
||||
|
||||
if (res != SPI_OK) {
|
||||
DEBUG("[sx127x] error: failed to initialize SPI_%i device (code %i)\n",
|
||||
dev->params.spi, res);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user