Loading...
Searching...
No Matches
soft_spi.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2017 Hamburg University of Applied Sciences
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
26
27#include "periph/gpio.h"
28#include "periph/spi.h"
29#include "mutex.h"
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
43#ifndef SOFT_SPI_DEV
44#define SOFT_SPI_DEV(x) (x)
45#endif
46
50#ifndef SOFT_SPI_UNDEF
51#define SOFT_SPI_UNDEF (UINT_MAX)
52#endif
53
57#ifndef SOFT_SPI_CS_UNDEF
58#define SOFT_SPI_CS_UNDEF (GPIO_UNDEF)
59#endif
61
65typedef unsigned int soft_spi_t;
66
71typedef gpio_t soft_spi_cs_t;
72
76enum {
82};
83
106
119
130
145
157
172
190
200
213uint8_t soft_spi_transfer_byte(soft_spi_t bus, soft_spi_cs_t cs, bool cont, uint8_t out);
214
226 const void *out, void *in, size_t len);
227
241uint8_t soft_spi_transfer_reg(soft_spi_t bus, soft_spi_cs_t cs, uint8_t reg, uint8_t out);
242
257 const void *out, void *in, size_t len);
258
259#ifdef __cplusplus
260}
261#endif
262
Low-level GPIO peripheral driver interface definitions.
soft_spi_mode_t
Available SPI modes, defining the configuration of clock polarity and clock phase.
Definition soft_spi.h:100
int soft_spi_init_cs(soft_spi_t bus, soft_spi_cs_t cs)
Initialize the given chip select pin.
void soft_spi_transfer_regs(soft_spi_t bus, soft_spi_cs_t cs, uint8_t reg, const void *out, void *in, size_t len)
Transfer a number of bytes to/from a given register address.
unsigned int soft_spi_t
Default type for SPI devices.
Definition soft_spi.h:65
void soft_spi_init(soft_spi_t bus)
Basic initialization of the given SPI bus.
gpio_t soft_spi_cs_t
Chip select pin type overlaps with gpio_t so it can be casted to this.
Definition soft_spi.h:71
void soft_spi_init_pins(soft_spi_t bus)
Initialize the used SPI bus pins, i.e.
void soft_spi_release(soft_spi_t bus)
Finish an ongoing SPI transaction by releasing the given SPI bus.
void soft_spi_acquire(soft_spi_t bus, soft_spi_cs_t cs, soft_spi_mode_t mode, soft_spi_clk_t clk)
Start a new SPI transaction.
uint8_t soft_spi_transfer_reg(soft_spi_t bus, soft_spi_cs_t cs, uint8_t reg, uint8_t out)
Transfer one byte to/from a given register address.
uint8_t soft_spi_transfer_byte(soft_spi_t bus, soft_spi_cs_t cs, bool cont, uint8_t out)
Transfer one byte on the given SPI bus Currently only the use of MOSI in master mode is implemented.
void soft_spi_transfer_bytes(soft_spi_t bus, soft_spi_cs_t cs, bool cont, const void *out, void *in, size_t len)
Transfer a number bytes using the given SPI bus.
soft_spi_clk_t
Available SPI clock speeds.
Definition soft_spi.h:114
@ SOFT_SPI_MODE_2
CPOL=1, CPHA=0.
Definition soft_spi.h:103
@ SOFT_SPI_MODE_3
CPOL=1, CPHA=1.
Definition soft_spi.h:104
@ SOFT_SPI_MODE_1
CPOL=0, CPHA=1.
Definition soft_spi.h:102
@ SOFT_SPI_MODE_0
CPOL=0, CPHA=0.
Definition soft_spi.h:101
@ SOFT_SPI_CLK_1MHZ
drive the SPI bus with less than 1MHz
Definition soft_spi.h:116
@ SOFT_SPI_CLK_100KHZ
drive the SPI bus with less than 100kHz
Definition soft_spi.h:115
@ SOFT_SPI_CLK_DEFAULT
drive the SPI bus with maximum speed possible
Definition soft_spi.h:117
@ SOFT_SPI_OK
everything went as planned
Definition soft_spi.h:77
@ SOFT_SPI_NOCLK
selected clock value is not supported
Definition soft_spi.h:81
@ SOFT_SPI_NOMODE
selected mode is not supported
Definition soft_spi.h:80
@ SOFT_SPI_NOCS
invalid chip select line specified
Definition soft_spi.h:79
@ SOFT_SPI_NODEV
invalid SPI bus specified
Definition soft_spi.h:78
Mutex for thread synchronization.
Low-level SPI peripheral driver interface definition.
Software SPI port descriptor.
Definition soft_spi.h:123
soft_spi_mode_t soft_spi_mode
data and clock polarity
Definition soft_spi.h:127
gpio_t clk_pin
CLK pin.
Definition soft_spi.h:126
gpio_t miso_pin
MOSI pin.
Definition soft_spi.h:124
soft_spi_clk_t soft_spi_clk
clock speed
Definition soft_spi.h:128
gpio_t mosi_pin
MOSI pin.
Definition soft_spi.h:125