no-OS
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
no_os_spi.h
Go to the documentation of this file.
1/***************************************************************************/
33
34#ifndef _NO_OS_SPI_H_
35#define _NO_OS_SPI_H_
36
37#include <stdint.h>
38
39#define NO_OS_SPI_CPHA 0x01
40#define NO_OS_SPI_CPOL 0x02
41#define SPI_MAX_BUS_NUMBER 8
42
57
68
83
90 uint8_t *tx_buff;
92 uint8_t *rx_buff;
94 uint32_t bytes_number;
96 uint8_t cs_change;
106};
107
116
123
150
175
204
212 int32_t (*init)(struct no_os_spi_desc **, const struct no_os_spi_init_param *);
214 int32_t (*write_and_read)(struct no_os_spi_desc *, uint8_t *, uint16_t);
216 int32_t (*transfer)(struct no_os_spi_desc *, struct no_os_spi_msg *, uint32_t);
220 int32_t (*transfer_dma)(struct no_os_spi_desc *, struct no_os_spi_msg *,
221 uint32_t);
226 int32_t (*transfer_dma_async)(struct no_os_spi_desc *, struct no_os_spi_msg *,
227 uint32_t, void (*)(void *), void *);
229 int32_t (*remove)(struct no_os_spi_desc *);
231 int32_t (*transfer_abort)(struct no_os_spi_desc *);
232};
233
234/* Initialize the SPI communication peripheral. */
235int32_t no_os_spi_init(struct no_os_spi_desc **desc,
236 const struct no_os_spi_init_param *param);
237
238/* Free the resources allocated by no_os_spi_init(). */
239int32_t no_os_spi_remove(struct no_os_spi_desc *desc);
240
241/* Write and read data to/from SPI. */
242int32_t no_os_spi_write_and_read(struct no_os_spi_desc *desc,
243 uint8_t *data,
244 uint16_t bytes_number);
245
246/* Iterate over the spi_msg array and send all messages at once */
247int32_t no_os_spi_transfer(struct no_os_spi_desc *desc,
248 struct no_os_spi_msg *msgs,
249 uint32_t len);
250
251/* Transfer a list of messages using DMA. Wait until all transfers are done */
252int32_t no_os_spi_transfer_dma(struct no_os_spi_desc *desc,
253 struct no_os_spi_msg *msgs,
254 uint32_t len);
255/*
256 * Transfer a list of messages using DMA. Return once the first one started and
257 * invoke a callback when they are done.
258 */
260 struct no_os_spi_msg *msgs,
261 uint32_t len,
262 void (*callback)(void *),
263 void *ctx);
264
265/* Abort SPI transfers. */
266int32_t no_os_spi_transfer_abort(struct no_os_spi_desc *desc);
267
268/* Initialize SPI bus descriptor*/
269int32_t no_os_spibus_init(const struct no_os_spi_init_param *param);
270
271/* Free the resources allocated for SPI bus desc*/
272void no_os_spibus_remove(uint32_t bus_number);
273
274
275#endif // _NO_OS_SPI_H_
int32_t no_os_spi_transfer_dma(struct no_os_spi_desc *desc, struct no_os_spi_msg *msgs, uint32_t len)
Transfer a list of messages using DMA and busy wait for the completion.
Definition no_os_spi.c:224
int32_t no_os_spibus_init(const struct no_os_spi_init_param *param)
Initialize the SPI bus communication peripheral.
Definition no_os_spi.c:88
no_os_spi_lanes
SPI configuration for number of lanes.
Definition no_os_spi.h:73
@ NO_OS_SPI_SINGLE_LANE
Definition no_os_spi.h:75
@ NO_OS_SPI_OCTO_LANE
Definition no_os_spi.h:81
@ NO_OS_SPI_QUAD_LANE
Definition no_os_spi.h:79
@ NO_OS_SPI_DUAL_LANE
Definition no_os_spi.h:77
int32_t no_os_spi_transfer(struct no_os_spi_desc *desc, struct no_os_spi_msg *msgs, uint32_t len)
Iterate over head list and send all spi messages.
Definition no_os_spi.c:185
int32_t no_os_spi_remove(struct no_os_spi_desc *desc)
Free the resources allocated by no_os_spi_init().
Definition no_os_spi.c:116
#define NO_OS_SPI_CPHA
Definition no_os_spi.h:39
int32_t no_os_spi_transfer_dma_async(struct no_os_spi_desc *desc, struct no_os_spi_msg *msgs, uint32_t len, void(*callback)(void *), void *ctx)
Transfer a list of messages using DMA. The function will return after the first transfer is started....
Definition no_os_spi.c:248
int32_t no_os_spi_write_and_read(struct no_os_spi_desc *desc, uint8_t *data, uint16_t bytes_number)
Write and read data to/from SPI.
Definition no_os_spi.c:159
void no_os_spibus_remove(uint32_t bus_number)
Removes SPI bus instance.
Definition no_os_spi.c:133
no_os_spi_bit_order
SPI configuration for bit order (MSB/LSB).
Definition no_os_spi.h:62
@ NO_OS_SPI_BIT_ORDER_MSB_FIRST
Definition no_os_spi.h:64
@ NO_OS_SPI_BIT_ORDER_LSB_FIRST
Definition no_os_spi.h:66
int32_t no_os_spi_init(struct no_os_spi_desc **desc, const struct no_os_spi_init_param *param)
Initialize the SPI communication peripheral.
Definition no_os_spi.c:52
#define NO_OS_SPI_CPOL
Definition no_os_spi.h:40
no_os_spi_mode
SPI configuration for clock phase and polarity.
Definition no_os_spi.h:47
@ NO_OS_SPI_MODE_2
Definition no_os_spi.h:53
@ NO_OS_SPI_MODE_3
Definition no_os_spi.h:55
@ NO_OS_SPI_MODE_1
Definition no_os_spi.h:51
@ NO_OS_SPI_MODE_0
Definition no_os_spi.h:49
int32_t no_os_spi_transfer_abort(struct no_os_spi_desc *desc)
Abort SPI transfers.
Definition no_os_spi.c:269
Delays resulted from components in the SPI signal path. The values is ns.
Definition no_os_spi.h:112
uint32_t cs_delay_last
Definition no_os_spi.h:114
uint32_t cs_delay_first
Definition no_os_spi.h:113
Structure holding SPI descriptor.
Definition no_os_spi.h:180
enum no_os_spi_mode mode
Definition no_os_spi.h:190
enum no_os_spi_lanes lanes
Definition no_os_spi.h:194
enum no_os_spi_bit_order bit_order
Definition no_os_spi.h:192
struct no_os_spibus_desc * bus
Definition no_os_spi.h:182
uint32_t max_speed_hz
Definition no_os_spi.h:186
struct no_os_spi_desc * parent
Definition no_os_spi.h:202
struct no_os_platform_spi_delays platform_delays
Definition no_os_spi.h:198
uint32_t device_id
Definition no_os_spi.h:184
const struct no_os_spi_platform_ops * platform_ops
Definition no_os_spi.h:196
uint8_t chip_select
Definition no_os_spi.h:188
void * extra
Definition no_os_spi.h:200
Structure holding the parameters for SPI initialization.
Definition no_os_spi.h:128
const struct no_os_spi_platform_ops * platform_ops
Definition no_os_spi.h:142
void * extra
Definition no_os_spi.h:146
struct no_os_platform_spi_delays platform_delays
Definition no_os_spi.h:144
uint8_t chip_select
Definition no_os_spi.h:134
uint32_t device_id
Definition no_os_spi.h:130
struct no_os_spi_desc * parent
Definition no_os_spi.h:148
uint32_t max_speed_hz
Definition no_os_spi.h:132
enum no_os_spi_bit_order bit_order
Definition no_os_spi.h:138
enum no_os_spi_mode mode
Definition no_os_spi.h:136
enum no_os_spi_lanes lanes
Definition no_os_spi.h:140
Definition no_os_spi.h:88
uint32_t bytes_number
Definition no_os_spi.h:94
uint8_t cs_change
Definition no_os_spi.h:96
uint8_t * rx_buff
Definition no_os_spi.h:92
uint32_t cs_change_delay
Definition no_os_spi.h:101
uint32_t cs_delay_last
Definition no_os_spi.h:105
uint32_t cs_delay_first
Definition no_os_spi.h:103
uint8_t * tx_buff
Definition no_os_spi.h:90
Structure holding SPI function pointers that point to the platform specific function.
Definition no_os_spi.h:210
int32_t(* transfer_dma)(struct no_os_spi_desc *, struct no_os_spi_msg *, uint32_t)
Definition no_os_spi.h:220
int32_t(* transfer_dma_async)(struct no_os_spi_desc *, struct no_os_spi_msg *, uint32_t, void(*)(void *), void *)
Definition no_os_spi.h:226
int32_t(* transfer_abort)(struct no_os_spi_desc *)
Definition no_os_spi.h:231
int32_t(* transfer)(struct no_os_spi_desc *, struct no_os_spi_msg *, uint32_t)
Definition no_os_spi.h:216
int32_t(* init)(struct no_os_spi_desc **, const struct no_os_spi_init_param *)
Definition no_os_spi.h:212
int32_t(* write_and_read)(struct no_os_spi_desc *, uint8_t *, uint16_t)
Definition no_os_spi.h:214
int32_t(* remove)(struct no_os_spi_desc *)
Definition no_os_spi.h:229
SPI bus descriptor.
Definition no_os_spi.h:155
const struct no_os_spi_platform_ops * platform_ops
Definition no_os_spi.h:171
uint8_t slave_number
Definition no_os_spi.h:159
enum no_os_spi_mode mode
Definition no_os_spi.h:165
void * extra
Definition no_os_spi.h:173
uint32_t max_speed_hz
Definition no_os_spi.h:163
void * mutex
Definition no_os_spi.h:157
enum no_os_spi_lanes lanes
Definition no_os_spi.h:169
enum no_os_spi_bit_order bit_order
Definition no_os_spi.h:167
uint32_t device_id
Definition no_os_spi.h:161