Midnight Sun Firmware
Loading...
Searching...
No Matches
spi.h
1#pragma once
2
3/************************************************************************************************
4 * @file spi.h
5 *
6 * @brief SPI Library Header file
7 *
8 * @date 2024-11-02
9 * @author Midnight Sun Team #24 - MSXVI
10 ************************************************************************************************/
11
12/* Standard library Headers */
13#include <stddef.h>
14#include <stdint.h>
15
16/* Inter-component Headers */
17
18/* Intra-component Headers */
19#include "gpio.h"
20#include "status.h"
21
29#define SPI_TIMEOUT_MS 100U
31#define SPI_MAX_NUM_DATA 32U
32
34typedef enum {
39} SpiPort;
40
47typedef enum {
58
60typedef enum {
66} SpiMode;
67
76typedef struct {
77 SpiBaudrate baudrate;
78 SpiMode mode;
79 GpioAddress sdo;
80 GpioAddress sdi;
81 GpioAddress sclk;
82 GpioAddress cs;
84
96StatusCode spi_init(SpiPort spi, const SpiSettings *settings);
97
113StatusCode spi_exchange(SpiPort spi, uint8_t *tx_data, size_t tx_len, uint8_t *rx_data, size_t rx_len);
114
122#define spi_tx(spi, tx_data, tx_len) spi_exchange(spi, tx_data, tx_len, NULL, 0U)
123
131#define spi_rx(spi, rx_data, rx_len) spi_exchange(spi, NULL, 0U, rx_data, rx_len)
132
133#ifdef MS_PLATFORM_X86
134
143StatusCode spi_get_tx_data(SpiPort spi, uint8_t *data, uint8_t len);
144
153StatusCode spi_set_rx(SpiPort spi, uint8_t *data, uint8_t len);
154
155#endif
156
SpiMode
SPI Mode selection.
Definition: spi.h:60
SpiPort
SPI Port selection.
Definition: spi.h:34
StatusCode spi_exchange(SpiPort spi, uint8_t *tx_data, size_t tx_len, uint8_t *rx_data, size_t rx_len)
Performs a SPI data exchange.
Definition: spi.c:176
StatusCode spi_init(SpiPort spi, const SpiSettings *settings)
Initialize SPI instance.
Definition: spi.c:95
SpiBaudrate
SPI baudrate type.
Definition: spi.h:47
@ SPI_MODE_0
Definition: spi.h:61
@ SPI_MODE_2
Definition: spi.h:63
@ NUM_SPI_MODES
Definition: spi.h:65
@ SPI_MODE_1
Definition: spi.h:62
@ SPI_MODE_3
Definition: spi.h:64
@ SPI_PORT_3
Definition: spi.h:37
@ SPI_PORT_1
Definition: spi.h:35
@ SPI_PORT_2
Definition: spi.h:36
@ NUM_SPI_PORTS
Definition: spi.h:38
@ SPI_BAUDRATE_625KHZ
Definition: spi.h:49
@ SPI_BAUDRATE_5MHZ
Definition: spi.h:52
@ SPI_BAUDRATE_40MHZ
Definition: spi.h:55
@ SPI_BAUDRATE_10MHZ
Definition: spi.h:53
@ SPI_BAUDRATE_2_5MHZ
Definition: spi.h:51
@ SPI_BAUDRATE_20MHZ
Definition: spi.h:54
@ SPI_BAUDRATE_1_25MHZ
Definition: spi.h:50
@ NUM_SPI_BAUDRATE
Definition: spi.h:56
@ SPI_BAUDRATE_312_5KHZ
Definition: spi.h:48
StatusCode
StatusCodes for various errors.
Definition: status.h:27
Port and pin data.
Definition: gpio.h:112
SPI settings struct.
Definition: spi.h:76