File syn_spi.c¶
File List > drivers > syn_spi.c
Go to the documentation of this file
#if __has_include("syn_config.h")
#include "syn_config.h"
#endif
#if !defined(SYN_USE_SPI) || SYN_USE_SPI
#include "../util/syn_assert.h"
#include "syn_spi.h"
#include <string.h>
SYN_Status syn_spi_init(SYN_SPI *spi, const SYN_SPI_Config *cfg)
{
if (spi == NULL || cfg == NULL) {
return SYN_INVALID_PARAM;
}
memset(spi, 0, sizeof(*spi));
spi->cfg = *cfg;
if (spi->cfg.baudrate_hz == 0) {
spi->cfg.baudrate_hz = 1000000; /* Default 1 MHz */
}
SYN_Status status =
syn_port_spi_init(cfg->spi_id, cfg->baudrate_hz, (uint8_t)cfg->mode, (uint8_t)cfg->role);
if (status != SYN_OK) {
return status;
}
spi->initialized = true;
return SYN_OK;
}
SYN_Status syn_spi_deinit(SYN_SPI *spi)
{
if (spi == NULL) {
return SYN_INVALID_PARAM;
}
if (!spi->initialized) {
return SYN_OK;
}
SYN_Status status = syn_port_spi_deinit(spi->cfg.spi_id);
spi->initialized = false;
return status;
}
SYN_Status syn_spi_transfer(SYN_SPI *spi, const uint8_t *tx, uint8_t *rx, size_t len)
{
if (spi == NULL || !spi->initialized || len == 0) {
return SYN_INVALID_PARAM;
}
return syn_port_spi_transfer(spi->cfg.spi_id, tx, rx, len);
}
SYN_Status syn_spi_write(SYN_SPI *spi, const uint8_t *tx, size_t len)
{
return syn_spi_transfer(spi, tx, NULL, len);
}
SYN_Status syn_spi_read(SYN_SPI *spi, uint8_t *rx, size_t len)
{
return syn_spi_transfer(spi, NULL, rx, len);
}
#endif /* SYN_USE_SPI */