cpu/sam0_common: spi: implement the periph_spi_reconfigure feature

This commit is contained in:
Benjamin Valentin 2020-03-13 17:33:43 +01:00 committed by Benjamin Valentin
parent 896fcd43b0
commit 3e91914831
4 changed files with 22 additions and 0 deletions

View File

@ -15,6 +15,7 @@ config CPU_COMMON_SAM0
select HAS_PERIPH_GPIO select HAS_PERIPH_GPIO
select HAS_PERIPH_GPIO_IRQ select HAS_PERIPH_GPIO_IRQ
select HAS_PERIPH_I2C_RECONFIGURE select HAS_PERIPH_I2C_RECONFIGURE
select HAS_PERIPH_SPI_RECONFIGURE
select HAS_PERIPH_TIMER_PERIODIC select HAS_PERIPH_TIMER_PERIODIC
select HAS_PERIPH_UART_MODECFG select HAS_PERIPH_UART_MODECFG
select HAS_PERIPH_UART_NONBLOCKING select HAS_PERIPH_UART_NONBLOCKING

View File

@ -5,6 +5,7 @@ FEATURES_PROVIDED += periph_flashpage_raw
FEATURES_PROVIDED += periph_flashpage_rwee FEATURES_PROVIDED += periph_flashpage_rwee
FEATURES_PROVIDED += periph_gpio periph_gpio_irq FEATURES_PROVIDED += periph_gpio periph_gpio_irq
FEATURES_PROVIDED += periph_i2c_reconfigure FEATURES_PROVIDED += periph_i2c_reconfigure
FEATURES_PROVIDED += periph_spi_reconfigure
FEATURES_PROVIDED += periph_timer_periodic # implements timer_set_periodic() FEATURES_PROVIDED += periph_timer_periodic # implements timer_set_periodic()
FEATURES_PROVIDED += periph_uart_modecfg FEATURES_PROVIDED += periph_uart_modecfg
FEATURES_PROVIDED += periph_uart_nonblocking FEATURES_PROVIDED += periph_uart_nonblocking

View File

@ -263,6 +263,16 @@ typedef enum {
SPI_CLK_10MHZ = 10000000U /**< drive the SPI bus with 10MHz */ SPI_CLK_10MHZ = 10000000U /**< drive the SPI bus with 10MHz */
} spi_clk_t; } spi_clk_t;
/** @} */ /** @} */
/**
* @brief SPI pin getters
* @{
*/
#define spi_pin_mosi(dev) spi_config[dev].mosi_pin
#define spi_pin_miso(dev) spi_config[dev].miso_pin
#define spi_pin_clk(dev) spi_config[dev].clk_pin
/** @} */
#endif /* ndef DOXYGEN */ #endif /* ndef DOXYGEN */
/** /**

View File

@ -134,6 +134,16 @@ void spi_init_pins(spi_t bus)
gpio_init_mux(spi_config[bus].miso_pin, spi_config[bus].miso_mux); gpio_init_mux(spi_config[bus].miso_pin, spi_config[bus].miso_mux);
gpio_init_mux(spi_config[bus].mosi_pin, spi_config[bus].mosi_mux); gpio_init_mux(spi_config[bus].mosi_pin, spi_config[bus].mosi_mux);
/* clk_pin will be muxed during acquire / release */ /* clk_pin will be muxed during acquire / release */
mutex_unlock(&locks[bus]);
}
void spi_deinit_pins(spi_t bus)
{
mutex_lock(&locks[bus]);
gpio_disable_mux(spi_config[bus].miso_pin);
gpio_disable_mux(spi_config[bus].mosi_pin);
} }
int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk) int spi_acquire(spi_t bus, spi_cs_t cs, spi_mode_t mode, spi_clk_t clk)