XCORE SDK
XCORE Software Development Kit
Classes | Macros | Typedefs | Enumerations | Functions
spi.h File Reference

API for SPI I/O. More...

#include <stdlib.h>
#include <stdint.h>
#include <xclib.h>
#include <xcore/assert.h>
#include <xcore/port.h>
#include <xcore/clock.h>

Go to the source code of this file.

Classes

struct  spi_master_t
 
struct  spi_master_device_t
 
struct  spi_slave_callback_group_t
 

Macros

#define SPI_MASTER_MINIMUM_DELAY   10
 
#define SPI_IO_SETC_PAD_DELAY(n)   (0x7007 | ((n) << 3))
 
#define SPI_IO_RESOURCE_SETCI(res, c)   asm volatile( "setc res[%0], %1" :: "r" (res), "n" (c))
 
#define SPI_IO_RESOURCE_SETC(res, r)   asm volatile( "setc res[%0], %1" :: "r" (res), "r" (r))
 
#define SPI_IO_SETSR(c)   asm volatile("setsr %0" : : "n"(c));
 
#define SPI_IO_CLRSR(c)   asm volatile("clrsr %0" : : "n"(c));
 
#define SPI_MODE_0   0,0
 
#define SPI_MODE_1   0,1
 
#define SPI_MODE_2   1,0
 
#define SPI_MODE_3   1,1
 
#define SPI_CALLBACK_ATTR   __attribute__((fptrgroup("spi_callback")))
 

Typedefs

typedef void(* slave_transaction_started_t) (void *app_data, uint8_t **out_buf, size_t *outbuf_len, uint8_t **in_buf, size_t *inbuf_len)
 
typedef void(* slave_transaction_ended_t) (void *app_data, uint8_t **out_buf, size_t bytes_written, uint8_t **in_buf, size_t bytes_read, size_t read_bits)
 

Enumerations

enum  spi_master_sample_delay_t {
  spi_master_sample_delay_0 = 0 , spi_master_sample_delay_1 = 1 , spi_master_sample_delay_2 = 2 , spi_master_sample_delay_3 = 3 ,
  spi_master_sample_delay_4 = 4
}
 
enum  spi_master_source_clock_t { spi_master_source_clock_ref = 0 , spi_master_source_clock_xcore }
 

Functions

void spi_io_port_outpw (resource_t __p, uint32_t __w, uint32_t __bpw)
 
void spi_master_init (spi_master_t *spi, xclock_t clock_block, port_t cs_port, port_t sclk_port, port_t mosi_port, port_t miso_port)
 
void spi_master_device_init (spi_master_device_t *dev, spi_master_t *spi, 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)
 
void spi_master_start_transaction (spi_master_device_t *dev)
 
void spi_master_transfer (spi_master_device_t *dev, uint8_t *data_out, uint8_t *data_in, size_t len)
 
void spi_master_delay_before_next_transfer (spi_master_device_t *dev, uint32_t delay_ticks)
 
void spi_master_end_transaction (spi_master_device_t *dev)
 
void spi_master_deinit (spi_master_t *spi)
 
void spi_slave (const spi_slave_callback_group_t *spi_cbg, port_t p_sclk, port_t p_mosi, port_t p_miso, port_t p_cs, xclock_t clk, int cpol, int cpha)
 

Detailed Description

API for SPI I/O.

Macro Definition Documentation

◆ SPI_MASTER_MINIMUM_DELAY

#define SPI_MASTER_MINIMUM_DELAY   10

The minimum number of clock ticks that should be specified for any SPI master delay value.