stm32f3: Basic implementation of spi_acquire(), spi_release()
Signed-off-by: Joakim Gebart <joakim.gebart@eistec.se>
This commit is contained in:
parent
f64c54bf66
commit
3292987516
@ -17,6 +17,7 @@
|
|||||||
* @author Peter Kietzmann <peter.kietzmann@haw-hamburg.de>
|
* @author Peter Kietzmann <peter.kietzmann@haw-hamburg.de>
|
||||||
* @author Fabian Nack <nack@inf.fu-berlin.de>
|
* @author Fabian Nack <nack@inf.fu-berlin.de>
|
||||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||||
|
* @author Joakim Gebart <joakim.gebart@eistec.se>
|
||||||
*
|
*
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
@ -24,6 +25,7 @@
|
|||||||
|
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
|
#include "mutex.h"
|
||||||
#include "periph/spi.h"
|
#include "periph/spi.h"
|
||||||
#include "periph_conf.h"
|
#include "periph_conf.h"
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
@ -57,6 +59,21 @@ static inline void irq_handler_transfer(SPI_TypeDef *spi, spi_t dev);
|
|||||||
|
|
||||||
static spi_state_t spi_config[SPI_NUMOF];
|
static spi_state_t spi_config[SPI_NUMOF];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Array holding one pre-initialized mutex for each SPI device
|
||||||
|
*/
|
||||||
|
static mutex_t locks[] = {
|
||||||
|
#if SPI_0_EN
|
||||||
|
[SPI_0] = MUTEX_INIT,
|
||||||
|
#endif
|
||||||
|
#if SPI_1_EN
|
||||||
|
[SPI_1] = MUTEX_INIT,
|
||||||
|
#endif
|
||||||
|
#if SPI_2_EN
|
||||||
|
[SPI_2] = MUTEX_INIT
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
int spi_init_master(spi_t dev, spi_conf_t conf, spi_speed_t speed)
|
int spi_init_master(spi_t dev, spi_conf_t conf, spi_speed_t speed)
|
||||||
{
|
{
|
||||||
uint8_t speed_divider;
|
uint8_t speed_divider;
|
||||||
@ -262,6 +279,24 @@ int spi_conf_pins(spi_t dev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int spi_acquire(spi_t dev)
|
||||||
|
{
|
||||||
|
if (dev >= SPI_NUMOF) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
mutex_lock(&locks[dev]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int spi_release(spi_t dev)
|
||||||
|
{
|
||||||
|
if (dev >= SPI_NUMOF) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
mutex_unlock(&locks[dev]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int spi_transfer_byte(spi_t dev, char out, char *in)
|
int spi_transfer_byte(spi_t dev, char out, char *in)
|
||||||
{
|
{
|
||||||
if (dev >= SPI_NUMOF) {
|
if (dev >= SPI_NUMOF) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user