no-OS
no_os_spi.h
Go to the documentation of this file.
1 /***************************************************************************/
40 #ifndef _NO_OS_SPI_H_
41 #define _NO_OS_SPI_H_
42 
43 /******************************************************************************/
44 /***************************** Include Files **********************************/
45 /******************************************************************************/
46 
47 #include <stdint.h>
48 
49 /******************************************************************************/
50 /********************** Macros and Constants Definitions **********************/
51 /******************************************************************************/
52 
53 #define NO_OS_SPI_CPHA 0x01
54 #define NO_OS_SPI_CPOL 0x02
55 #define SPI_MAX_BUS_NUMBER 8
56 
57 /******************************************************************************/
58 /*************************** Types Declarations *******************************/
59 /******************************************************************************/
60 
67  NO_OS_SPI_MODE_0 = (0 | 0),
74 };
75 
85 };
86 
91 struct no_os_spi_msg {
93  uint8_t *tx_buff;
95  uint8_t *rx_buff;
97  uint32_t bytes_number;
99  uint8_t cs_change;
104  uint32_t cs_change_delay;
106  uint32_t cs_delay_first;
108  uint32_t cs_delay_last;
109 };
110 
116  uint32_t cs_delay_first;
117  uint32_t cs_delay_last;
118 };
119 
125 struct no_os_spi_platform_ops ;
126 
133  uint32_t device_id;
135  uint32_t max_speed_hz;
137  uint8_t chip_select;
145  void *extra;
148 };
149 
156  void *mutex;
158  uint8_t slave_number;
160  uint32_t device_id;
162  uint32_t max_speed_hz;
170  void *extra;
171 };
172 
181  uint32_t device_id;
183  uint32_t max_speed_hz;
185  uint8_t chip_select;
193  void *extra;
196 };
197 
205  int32_t (*init)(struct no_os_spi_desc **, const struct no_os_spi_init_param *);
207  int32_t (*write_and_read)(struct no_os_spi_desc *, uint8_t *, uint16_t);
209  int32_t (*transfer)(struct no_os_spi_desc *, struct no_os_spi_msg *, uint32_t);
213  int32_t (*dma_transfer_sync)(struct no_os_spi_desc *, struct no_os_spi_msg *,
214  uint32_t);
219  int32_t (*dma_transfer_async)(struct no_os_spi_desc *, struct no_os_spi_msg *,
220  uint32_t, void (*)(void *), void *);
222  int32_t (*remove)(struct no_os_spi_desc *);
223 };
224 
225 /******************************************************************************/
226 /************************ Functions Declarations ******************************/
227 /******************************************************************************/
228 
229 /* Initialize the SPI communication peripheral. */
230 int32_t no_os_spi_init(struct no_os_spi_desc **desc,
231  const struct no_os_spi_init_param *param);
232 
233 /* Free the resources allocated by no_os_spi_init(). */
234 int32_t no_os_spi_remove(struct no_os_spi_desc *desc);
235 
236 /* Write and read data to/from SPI. */
237 int32_t no_os_spi_write_and_read(struct no_os_spi_desc *desc,
238  uint8_t *data,
239  uint16_t bytes_number);
240 
241 /* Iterate over the spi_msg array and send all messages at once */
242 int32_t no_os_spi_transfer(struct no_os_spi_desc *desc,
243  struct no_os_spi_msg *msgs,
244  uint32_t len);
245 
246 /* Transfer a list of messages using DMA. Wait until all transfers are done */
247 int32_t no_os_spi_transfer_dma_sync(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. Return once the first one started and
252  * invoke a callback when they are done.
253  */
254 int32_t no_os_spi_transfer_dma_async(struct no_os_spi_desc *desc,
255  struct no_os_spi_msg *msgs,
256  uint32_t len,
257  void (*callback)(void *),
258  void *ctx);
259 
260 /* Initialize SPI bus descriptor*/
261 int32_t no_os_spibus_init(const struct no_os_spi_init_param *param);
262 
263 /* Free the resources allocated for SPI bus desc*/
264 void no_os_spibus_remove(uint32_t bus_number);
265 
266 
267 #endif // _NO_OS_SPI_H_
NO_OS_SPI_MODE_1
@ NO_OS_SPI_MODE_1
Definition: no_os_spi.h:69
no_os_spibus_desc::mutex
void * mutex
Definition: no_os_spi.h:156
no_os_spi_mode
no_os_spi_mode
SPI configuration for clock phase and polarity.
Definition: no_os_spi.h:65
no_os_spi_desc::device_id
uint32_t device_id
Definition: no_os_spi.h:181
NO_OS_SPI_CPOL
#define NO_OS_SPI_CPOL
Definition: no_os_spi.h:54
no_os_spi_init_param::bit_order
enum no_os_spi_bit_order bit_order
Definition: no_os_spi.h:141
no_os_spi_write_and_read
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:165
no_os_spibus_desc::mode
enum no_os_spi_mode mode
Definition: no_os_spi.h:164
no_os_spibus_desc::bit_order
enum no_os_spi_bit_order bit_order
Definition: no_os_spi.h:166
no_os_spi_msg
Definition: no_os_spi.h:91
no_os_spi_platform_ops
Structure holding SPI function pointers that point to the platform specific function.
Definition: no_os_spi.h:203
no_os_spi_msg::cs_delay_last
uint32_t cs_delay_last
Definition: no_os_spi.h:108
no_os_spi_init_param::mode
enum no_os_spi_mode mode
Definition: no_os_spi.h:139
no_os_spibus_desc::slave_number
uint8_t slave_number
Definition: no_os_spi.h:158
NO_OS_SPI_MODE_2
@ NO_OS_SPI_MODE_2
Definition: no_os_spi.h:71
no_os_spi_bit_order
no_os_spi_bit_order
SPI configuration for bit order (MSB/LSB).
Definition: no_os_spi.h:80
no_os_spi_transfer_dma_sync
int32_t no_os_spi_transfer_dma_sync(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:230
no_os_spibus_desc::device_id
uint32_t device_id
Definition: no_os_spi.h:160
no_os_spibus_desc::platform_ops
const struct no_os_spi_platform_ops * platform_ops
Definition: no_os_spi.h:168
no_os_spi_init_param::platform_ops
const struct no_os_spi_platform_ops * platform_ops
Definition: no_os_spi.h:142
NO_OS_SPI_MODE_3
@ NO_OS_SPI_MODE_3
Definition: no_os_spi.h:73
no_os_spi_msg::tx_buff
uint8_t * tx_buff
Definition: no_os_spi.h:93
no_os_spi_init_param::device_id
uint32_t device_id
Definition: no_os_spi.h:133
no_os_spi_init_param::chip_select
uint8_t chip_select
Definition: no_os_spi.h:137
no_os_spi_desc::chip_select
uint8_t chip_select
Definition: no_os_spi.h:185
no_os_spi_init_param::platform_delays
struct no_os_platform_spi_delays platform_delays
Definition: no_os_spi.h:143
no_os_spi_desc::parent
struct no_os_spi_desc * parent
Definition: no_os_spi.h:195
no_os_spi_msg::rx_buff
uint8_t * rx_buff
Definition: no_os_spi.h:95
no_os_spi_msg::cs_delay_first
uint32_t cs_delay_first
Definition: no_os_spi.h:106
no_os_spi_msg::cs_change
uint8_t cs_change
Definition: no_os_spi.h:99
no_os_spi_init_param::parent
struct no_os_spi_desc * parent
Definition: no_os_spi.h:147
no_os_spi_desc::bit_order
enum no_os_spi_bit_order bit_order
Definition: no_os_spi.h:189
no_os_spi_platform_ops::transfer
int32_t(* transfer)(struct no_os_spi_desc *, struct no_os_spi_msg *, uint32_t)
Definition: no_os_spi.h:209
no_os_spi_desc
Structure holding SPI descriptor.
Definition: no_os_spi.h:177
no_os_spi_platform_ops::dma_transfer_async
int32_t(* dma_transfer_async)(struct no_os_spi_desc *, struct no_os_spi_msg *, uint32_t, void(*)(void *), void *)
Definition: no_os_spi.h:219
no_os_spibus_desc::max_speed_hz
uint32_t max_speed_hz
Definition: no_os_spi.h:162
no_os_spi_transfer
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:191
no_os_spi_msg::bytes_number
uint32_t bytes_number
Definition: no_os_spi.h:97
no_os_spi_desc::extra
void * extra
Definition: no_os_spi.h:193
no_os_spi_msg::cs_change_delay
uint32_t cs_change_delay
Definition: no_os_spi.h:104
no_os_spi_init_param::max_speed_hz
uint32_t max_speed_hz
Definition: no_os_spi.h:135
no_os_platform_spi_delays
Delays resulted from components in the SPI signal path. The values is ns.
Definition: no_os_spi.h:115
no_os_spi_platform_ops::remove
int32_t(* remove)(struct no_os_spi_desc *)
Definition: no_os_spi.h:222
no_os_spi_desc::bus
struct no_os_spibus_desc * bus
Definition: no_os_spi.h:179
no_os_spi_transfer_dma_async
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:254
NO_OS_SPI_BIT_ORDER_LSB_FIRST
@ NO_OS_SPI_BIT_ORDER_LSB_FIRST
Definition: no_os_spi.h:84
NO_OS_SPI_BIT_ORDER_MSB_FIRST
@ NO_OS_SPI_BIT_ORDER_MSB_FIRST
Definition: no_os_spi.h:82
no_os_spibus_desc::extra
void * extra
Definition: no_os_spi.h:170
no_os_platform_spi_delays::cs_delay_first
uint32_t cs_delay_first
Definition: no_os_spi.h:116
no_os_spi_platform_ops::write_and_read
int32_t(* write_and_read)(struct no_os_spi_desc *, uint8_t *, uint16_t)
Definition: no_os_spi.h:207
no_os_spi_remove
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:122
no_os_spi_desc::platform_ops
const struct no_os_spi_platform_ops * platform_ops
Definition: no_os_spi.h:190
no_os_spi_desc::platform_delays
struct no_os_platform_spi_delays platform_delays
Definition: no_os_spi.h:191
no_os_spi_desc::max_speed_hz
uint32_t max_speed_hz
Definition: no_os_spi.h:183
no_os_spi_init
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:58
no_os_spibus_desc
SPI bus descriptor.
Definition: no_os_spi.h:154
no_os_spi_platform_ops::dma_transfer_sync
int32_t(* dma_transfer_sync)(struct no_os_spi_desc *, struct no_os_spi_msg *, uint32_t)
Definition: no_os_spi.h:213
NO_OS_SPI_CPHA
#define NO_OS_SPI_CPHA
Definition: no_os_spi.h:53
no_os_spibus_remove
void no_os_spibus_remove(uint32_t bus_number)
Removes SPI bus instance.
Definition: no_os_spi.c:139
no_os_spi_platform_ops::init
int32_t(* init)(struct no_os_spi_desc **, const struct no_os_spi_init_param *)
Definition: no_os_spi.h:205
no_os_platform_spi_delays::cs_delay_last
uint32_t cs_delay_last
Definition: no_os_spi.h:117
no_os_spi_init_param::extra
void * extra
Definition: no_os_spi.h:145
NO_OS_SPI_MODE_0
@ NO_OS_SPI_MODE_0
Definition: no_os_spi.h:67
no_os_spi_desc::mode
enum no_os_spi_mode mode
Definition: no_os_spi.h:187
no_os_spi_init_param
Structure holding the parameters for SPI initialization.
Definition: no_os_spi.h:131
no_os_spibus_init
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:94