SPI
Examples
#include "abov/system.h"
#include "abov/hal/gpio.h"
#include "abov/irq.h"
#include "abov/ll/pwr.h"
#include "abov/ll/clk.h"
#include "abov/ll/spi.h"
static void myspi_gpio_init(void)
{
struct gpio_cfg cfg = {
.mode = GPIO_MODE_PUSHPULL,
.altfunc = true,
.altfunc_number = 1,
};
gpio_open(PERIPH_GPIOB, 10, &cfg); // SS
gpio_open(PERIPH_GPIOB, 11, &cfg); // SCK
gpio_open(PERIPH_GPIOB, 12, &cfg); // MOSI
gpio_open(PERIPH_GPIOB, 13, &cfg); // MISO
}
static void myspi_init(void)
{
myspi_gpio_init();
pwr_enable_peripheral(PERIPH_SPI0);
clk_enable_peripheral(PERIPH_SPI0);
spi_reset(PERIPH_SPI0);
spi_set_mode(PERIPH_SPI0, SPI_MODE_MASTER);
spi_set_frequency(PERIPH_SPI0, 1000000, clk_get_pclk_frequency());
spi_set_clock_phase(PERIPH_SPI0, 0);
spi_set_clock_polarity(PERIPH_SPI0, 0);
spi_set_bitorder(PERIPH_SPI0, false);
spi_set_data_width(PERIPH_SPI0, 8);
spi_disable_chip_select(PERIPH_SPI0);
spi_set_loopback(PERIPH_SPI0, true);
}
int main(void)
{
myspi_init();
spi_start(PERIPH_SPI0);
while (!(spi_get_event(PERIPH_SPI0) & SPI_EVENT_TX_COMPLETE)) { /* waiting */ }
spi_set_txd(PERIPH_SPI0, 0xA5);
while (!(spi_get_event(PERIPH_SPI0) & SPI_EVENT_RX)) { /* waiting */ }
uint32_t received = spi_get_rxd(PERIPH_SPI0);
(void)received;
return 0;
}
HAL
Functions
-
struct spi_cfg
- #include <spi.h>
LL
Enums
-
enum spi_irq_t
Values:
-
enumerator SPI_IRQ_NONE
-
enumerator SPI_IRQ_RX
-
enumerator SPI_IRQ_TX
-
enumerator SPI_IRQ_EDGE_CHAGNE
-
enumerator SPI_IRQ_OVERRUN
-
enumerator SPI_IRQ_FRAME_ERROR
-
enumerator SPI_IRQ_ERROR
-
enumerator SPI_IRQ_MASK
-
enumerator SPI_IRQ_NONE
-
enum spi_event_t
Values:
-
enumerator SPI_EVENT_NONE
-
enumerator SPI_EVENT_TX_COMPLETE
-
enumerator SPI_EVENT_RX
-
enumerator SPI_EVENT_BUSY
-
enumerator SPI_EVENT_OVERRUN
-
enumerator SPI_EVENT_UNDERRUN
-
enumerator SPI_EVENT_CHIP_SELECTED
-
enumerator SPI_EVENT_CHIP_DESELECTED
-
enumerator SPI_EVENT_MODE_FAULT
-
enumerator SPI_EVENT_CRC_ERROR
-
enumerator SPI_EVENT_MASK
-
enumerator SPI_EVENT_NONE
Functions
-
void spi_reset(periph_t spi)
Reset SPI
This function makes the given SPI the reset default state.
- Parameters
spi – [in] a peripheral enumerated in periph_t
-
spi_event_t spi_get_event(periph_t spi)
-
void spi_clear_event(periph_t spi, spi_event_t events)
-
void spi_set_mode(periph_t spi, spi_mode_t mode)
-
void spi_set_clock_phase(periph_t spi, int cpha)
Set clock phase
- Parameters
spi – [in] a peripheral enumerated in periph_t
cpha – [in] 0 for the first clock edge or 1 for the second clock edge