XCORE SDK
XCORE Software Development Kit
rtos_spi_slave.h
1 // Copyright 2021 XMOS LIMITED.
2 // This Software is subject to the terms of the XMOS Public Licence: Version 1.
3 
4 #ifndef RTOS_SPI_SLAVE_H_
5 #define RTOS_SPI_SLAVE_H_
6 
14 #include <xcore/channel_streaming.h>
15 #include "spi.h"
16 
17 #include "rtos_osal.h"
18 #include "rtos_driver_rpc.h"
19 
24 #define RTOS_SPI_SLAVE_CALLBACK_ATTR __attribute__((fptrgroup("rtos_spi_slave_cb_fptr_grp")))
25 
30 
43 typedef void (*rtos_spi_slave_start_cb_t)(rtos_spi_slave_t *ctx, void *app_data);
44 
59 typedef void (*rtos_spi_slave_xfer_done_cb_t)(rtos_spi_slave_t *ctx, void *app_data);
60 
67  xclock_t clock_block;
68  int cpol;
69  int cpha;
70  port_t p_sclk;
71  port_t p_mosi;
72  port_t p_miso;
73  port_t p_cs;
74 
75  void *app_data;
76  uint8_t *out_buf;
77  size_t outbuf_len;
78  size_t bytes_written;
79  uint8_t *in_buf;
80  size_t inbuf_len;
81  size_t bytes_read;
82 
83  volatile int waiting_for_isr;
84 
87 
88  streaming_channel_t c;
89  rtos_osal_queue_t xfer_done_queue;
90  rtos_osal_thread_t hil_thread;
91  rtos_osal_thread_t app_thread;
92 };
93 
114  rtos_spi_slave_t *ctx,
115  void *rx_buf,
116  size_t rx_buf_len,
117  void *tx_buf,
118  size_t tx_buf_len);
119 
143  rtos_spi_slave_t *ctx,
144  void **rx_buf,
145  size_t *rx_len,
146  void **tx_buf,
147  size_t *tx_len,
148  unsigned timeout);
149 
169  rtos_spi_slave_t *spi_slave_ctx,
170  void *app_data,
173  unsigned interrupt_core_id,
174  unsigned priority);
175 
194  rtos_spi_slave_t *spi_slave_ctx,
195  uint32_t io_core_mask,
196  xclock_t clock_block,
197  int cpol,
198  int cpha,
199  port_t p_sclk,
200  port_t p_mosi,
201  port_t p_miso,
202  port_t p_cs);
203 
206 #endif /* RTOS_SPI_SLAVE_H_ */
#define RTOS_SPI_SLAVE_CALLBACK_ATTR
Definition: rtos_spi_slave.h:24
void(* rtos_spi_slave_xfer_done_cb_t)(rtos_spi_slave_t *ctx, void *app_data)
Definition: rtos_spi_slave.h:59
void(* rtos_spi_slave_start_cb_t)(rtos_spi_slave_t *ctx, void *app_data)
Definition: rtos_spi_slave.h:43
void spi_slave_xfer_prepare(rtos_spi_slave_t *ctx, void *rx_buf, size_t rx_buf_len, void *tx_buf, size_t tx_buf_len)
Definition: rtos_spi_slave.c:127
void rtos_spi_slave_start(rtos_spi_slave_t *spi_slave_ctx, void *app_data, rtos_spi_slave_start_cb_t start, rtos_spi_slave_xfer_done_cb_t xfer_done, unsigned interrupt_core_id, unsigned priority)
Definition: rtos_spi_slave.c:151
int spi_slave_xfer_complete(rtos_spi_slave_t *ctx, void **rx_buf, size_t *rx_len, void **tx_buf, size_t *tx_len, unsigned timeout)
Definition: rtos_spi_slave.c:135
void rtos_spi_slave_init(rtos_spi_slave_t *spi_slave_ctx, uint32_t io_core_mask, xclock_t clock_block, int cpol, int cpha, port_t p_sclk, port_t p_mosi, port_t p_miso, port_t p_cs)
Definition: rtos_spi_slave.c:187
API for SPI I/O.
Definition: rtos_spi_slave.h:66