XCORE SDK
XCORE Software Development Kit
rtos_spi_master.h
1 // Copyright 2020-2021 XMOS LIMITED.
2 // This Software is subject to the terms of the XMOS Public Licence: Version 1.
3 
4 #ifndef RTOS_SPI_MASTER_H_
5 #define RTOS_SPI_MASTER_H_
6 
14 #include "spi.h"
15 
16 #include "rtos_osal.h"
17 #include "rtos_driver_rpc.h"
18 
23 
28 
35  rtos_driver_rpc_t *rpc_config;
36 
37  __attribute__((fptrgroup("rtos_spi_master_transaction_start_fptr_grp")))
38  void (*transaction_start)(rtos_spi_master_device_t *);
39 
40  __attribute__((fptrgroup("rtos_spi_master_transfer_fptr_grp")))
41  void (*transfer)(rtos_spi_master_device_t *, uint8_t *, uint8_t *, size_t);
42 
43  __attribute__((fptrgroup("rtos_spi_master_delay_before_next_transfer_fptr_grp")))
44  void (*delay_before_next_transfer)(rtos_spi_master_device_t *, uint32_t);
45 
46  __attribute__((fptrgroup("rtos_spi_master_transaction_end_fptr_grp")))
47  void (*transaction_end)(rtos_spi_master_device_t *);
48 
49  spi_master_t ctx;
50 
51  unsigned op_task_priority;
52  rtos_osal_thread_t op_task;
53  rtos_osal_queue_t xfer_req_queue;
54  rtos_osal_semaphore_t data_ready;
55  rtos_osal_mutex_t lock;
56 };
57 
64  rtos_spi_master_device_t *host_dev_ctx_ptr; /* Only used by RPC clients */
65 
66  rtos_spi_master_t *bus_ctx;
67  spi_master_device_t dev_ctx;
68 };
69 
70 #include "rtos_spi_master_rpc.h"
71 
89 {
90  ctx->bus_ctx->transaction_start(ctx);
91 }
92 
114  uint8_t *data_out,
115  uint8_t *data_in,
116  size_t len)
117 {
118  ctx->bus_ctx->transfer(ctx, data_out, data_in, len);
119 }
120 
143  uint32_t delay_ticks)
144 {
145  ctx->bus_ctx->delay_before_next_transfer(ctx, delay_ticks);
146 }
147 
156 {
157  ctx->bus_ctx->transaction_end(ctx);
158 }
159 
176  rtos_spi_master_t *spi_master_ctx,
177  unsigned priority);
178 
193  rtos_spi_master_t *bus_ctx,
194  xclock_t clock_block,
195  port_t cs_port,
196  port_t sclk_port,
197  port_t mosi_port,
198  port_t miso_port);
199 
231  rtos_spi_master_device_t *dev_ctx,
232  rtos_spi_master_t *bus_ctx,
233  uint32_t cs_pin,
234  int cpol,
235  int cpha,
236  spi_master_source_clock_t source_clock,
237  uint32_t clock_divisor,
238  spi_master_sample_delay_t miso_sample_delay,
239  uint32_t miso_pad_delay,
240  uint32_t cs_to_clk_delay_ticks,
241  uint32_t clk_to_cs_delay_ticks,
242  uint32_t cs_to_cs_delay_ticks);
243 
246 #endif /* RTOS_SPI_MASTER_H_ */
spi_master_source_clock_t
Definition: spi.h:63
spi_master_sample_delay_t
Definition: spi.h:52
void rtos_spi_master_transaction_end(rtos_spi_master_device_t *ctx)
Definition: rtos_spi_master.h:154
void rtos_spi_master_delay_before_next_transfer(rtos_spi_master_device_t *ctx, uint32_t delay_ticks)
Definition: rtos_spi_master.h:141
void rtos_spi_master_transfer(rtos_spi_master_device_t *ctx, uint8_t *data_out, uint8_t *data_in, size_t len)
Definition: rtos_spi_master.h:112
void rtos_spi_master_transaction_start(rtos_spi_master_device_t *ctx)
Definition: rtos_spi_master.h:87
void rtos_spi_master_init(rtos_spi_master_t *bus_ctx, xclock_t clock_block, port_t cs_port, port_t sclk_port, port_t mosi_port, port_t miso_port)
Definition: rtos_spi_master.c:176
void rtos_spi_master_device_init(rtos_spi_master_device_t *dev_ctx, rtos_spi_master_t *bus_ctx, uint32_t cs_pin, int cpol, int cpha, spi_master_source_clock_t source_clock, uint32_t clock_divisor, spi_master_sample_delay_t miso_sample_delay, uint32_t miso_pad_delay, uint32_t cs_to_clk_delay_ticks, uint32_t clk_to_cs_delay_ticks, uint32_t cs_to_cs_delay_ticks)
Definition: rtos_spi_master.c:202
void rtos_spi_master_start(rtos_spi_master_t *spi_master_ctx, unsigned priority)
Definition: rtos_spi_master.c:154
API for SPI I/O.
Definition: rtos_driver_rpc.h:23
Definition: rtos_spi_master.h:63
Definition: rtos_spi_master.h:34
Definition: spi.h:113
Definition: spi.h:97