PER Firmware
Loading...
Searching...
No Matches
spi.h
Go to the documentation of this file.
1
11#ifndef _PHAL_SPI_H
12#define _PHAL_SPI_H
13
14#include <stddef.h>
15
20
24typedef struct
25{
26 uint32_t data_rate;
27 uint8_t data_len;
28 bool nss_sw;
29 GPIO_TypeDef* nss_gpio_port;
30 uint32_t nss_gpio_pin;
31
34
35 volatile bool _busy;
36 volatile bool _error;
37 volatile bool _direct_mode_error;
38 volatile bool _fifo_overrun;
39
40 SPI_TypeDef* periph;
42
51
63bool PHAL_SPI_transfer(SPI_InitConfig_t* spi, const uint8_t* out_data, const uint32_t data_len, const uint8_t* in_data);
64
76bool PHAL_SPI_transfer_noDMA(SPI_InitConfig_t* spi, const uint8_t* out_data, uint32_t txlen, uint32_t rxlen, uint8_t* in_data);
77
86
95uint8_t PHAL_SPI_writeByte(SPI_InitConfig_t* spi, uint8_t address, uint8_t writeDat);
96
105uint8_t PHAL_SPI_readByte(SPI_InitConfig_t* spi, uint8_t address, bool skipDummy);
106
108
109// SPI Configuration macros
110#define SPI1_RXDMA_CONT_CONFIG(rx_addr_, priority_) \
111 { \
112 .periph_addr = (uint32_t)&(SPI1->DR), \
113 .mem_addr = (uint32_t)(rx_addr_), \
114 .tx_size = 1, \
115 .increment = false, \
116 .circular = false, \
117 .dir = 0b0, \
118 .mem_inc = true, \
119 .periph_inc = false, \
120 .mem_to_mem = false, \
121 .priority = (priority_), \
122 .mem_size = 0b00, \
123 .periph_size = 0b00, \
124 .tx_isr_en = false, \
125 .dma_chan_request = 0b0011, \
126 .stream_idx = 2, \
127 .periph = DMA2, \
128 .stream = DMA2_Stream2}
129
130#define SPI1_TXDMA_CONT_CONFIG(tx_addr_, priority_) \
131 { \
132 .periph_addr = (uint32_t)&(SPI1->DR), \
133 .mem_addr = (uint32_t)(tx_addr_), \
134 .tx_size = 1, \
135 .increment = false, \
136 .circular = false, \
137 .dir = 0b1, \
138 .mem_inc = true, \
139 .periph_inc = false, \
140 .mem_to_mem = false, \
141 .priority = (priority_), \
142 .mem_size = 0b00, \
143 .periph_size = 0b00, \
144 .tx_isr_en = true, \
145 .dma_chan_request = 0b0011, \
146 .stream_idx = 3, \
147 .periph = DMA2, \
148 .stream = DMA2_Stream3}
149
150#define SPI2_TXDMA_CONT_CONFIG(tx_addr_, priority_) \
151 { \
152 .periph_addr = (uint32_t)&(SPI2->DR), \
153 .mem_addr = (uint32_t)(tx_addr_), \
154 .tx_size = 1, \
155 .increment = false, \
156 .circular = false, \
157 .dir = 0b1, \
158 .mem_inc = true, \
159 .periph_inc = false, \
160 .mem_to_mem = false, \
161 .priority = (priority_), \
162 .mem_size = 0b00, \
163 .periph_size = 0b00, \
164 .tx_isr_en = true, \
165 .dma_chan_request = 0b0000, \
166 .stream_idx = 4, \
167 .periph = DMA1, \
168 .stream = DMA1_Stream4}
169
170#define SPI2_RXDMA_CONT_CONFIG(rx_addr_, priority_) \
171 { \
172 .periph_addr = (uint32_t)&(SPI2->DR), \
173 .mem_addr = (uint32_t)(rx_addr_), \
174 .tx_size = 1, \
175 .increment = false, \
176 .circular = false, \
177 .dir = 0b0, \
178 .mem_inc = true, \
179 .periph_inc = false, \
180 .mem_to_mem = false, \
181 .priority = (priority_), \
182 .mem_size = 0b00, \
183 .periph_size = 0b00, \
184 .tx_isr_en = false, \
185 .dma_chan_request = 0b0000, \
186 .stream_idx = 3, \
187 .periph = DMA1, \
188 .stream = DMA1_Stream3}
189
190#endif /* _PHAL_SPI_H */
GPIO Driver for STM32F4 Devices.
RCC Configuration Driver for STM32F4 Devices.
uint8_t PHAL_SPI_writeByte(SPI_InitConfig_t *spi, uint8_t address, uint8_t writeDat)
Blocking function to write a single byte to a SPI device. Useful for Initilization functions that jus...
Definition spi.c:429
bool PHAL_SPI_busy(SPI_InitConfig_t *cfg)
Check for current SPI transaction to complete.
Definition spi.c:204
bool PHAL_SPI_transfer_noDMA(SPI_InitConfig_t *spi, const uint8_t *out_data, uint32_t txlen, uint32_t rxlen, uint8_t *in_data)
SPI handle.
Definition spi.c:80
bool PHAL_SPI_init(SPI_InitConfig_t *handle)
Initilize SPI peripheral with the configuired structure.
Definition spi.c:25
bool PHAL_SPI_transfer(SPI_InitConfig_t *spi, const uint8_t *out_data, const uint32_t data_len, const uint8_t *in_data)
Transfer data_len bytes from out_data to SPI device and place MISO data in in_data This function just...
Definition spi.c:142
uint8_t PHAL_SPI_readByte(SPI_InitConfig_t *spi, uint8_t address, bool skipDummy)
Blocking function to read a single byte from a SPI device. Useful for Initilization functions that ju...
Definition spi.c:410
void PHAL_SPI_ForceReset(SPI_InitConfig_t *spi)
Definition spi.c:213
Configuration entry for SPI initilization.
Definition spi.h:25
volatile bool _busy
SPI Peripheral currently in a transaction.
Definition spi.h:35
volatile bool _direct_mode_error
DMA error while attempting to operate in direct mode.
Definition spi.h:37
dma_init_t * rx_dma_cfg
DMA initilization for RX transfer.
Definition spi.h:32
uint8_t data_len
Number of bits per transaction.
Definition spi.h:27
SPI_TypeDef * periph
SPI Peripheral.
Definition spi.h:40
dma_init_t * tx_dma_cfg
DMA initilization for TX transfer.
Definition spi.h:33
volatile bool _fifo_overrun
DMA FIFO has been overrun - this should never occur, as it should never be enabled.
Definition spi.h:38
uint32_t data_rate
Target baudrate in b/s (might be different depending on peripheral clock divison)
Definition spi.h:26
bool nss_sw
Save Select controlled by Software.
Definition spi.h:28
uint32_t nss_gpio_pin
GPIO Pin of SPI CS Pin.
Definition spi.h:30
volatile bool _error
SPI Peripheral current transaction error.
Definition spi.h:36
GPIO_TypeDef * nss_gpio_port
GPIO Port of SPI CS Pin.
Definition spi.h:29
Definition dma.h:17