RV32 SoC DS UG
High-Perf RV32 SoC DS UG
RV64 SoC DS UG API and Examples
Embedded IDE UG
Loading...
Searching...
No Matches
spi.h
Go to the documentation of this file.
1
2// Copyright (C) 2013-2026 Efinix Inc. All rights reserved.
3// Full license header: bsp/efinix/EfxSapphireSocRV64/include/LICENSE.MD
5
6#ifndef SPI_H
7#define SPI_H
8
19
20#include <stdint.h>
21#include "type.h"
22#include "soc.h"
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
61
62/* ========================================================================== */
63/* SUB-GROUP : REGISTER DEFINITIONS */
64/* ========================================================================== */
65
72
77 #define SPI_CMD_DATA_MASK 0xFF
78 #define SPI_CMD_WR (1 << 8)
79 #define SPI_CMD_RD (1 << 9)
80 #define SPI_CMD_SS (1 << 11)
81 #define SPI_CMD_READ_INVALID (1 << 31)
83
88 #define SPI_RSP_CMD_FIFO_AVAILABILITY (0xFFFF)
89 #define SPI_RSP_FIFO_OCCUPANCY (0xFFFF << 16)
91
96 #define SPI_CONFIG_CPOL (1 << 0)
97 #define SPI_CONFIG_MODE (1 << 4)
98 #define SPI_CONFIG_CPHA (1 << 16)
100
105 #define SPI_INTC_CMD_INT_ENABLE (1 << 0)
106 #define SPI_INTC_RSP_INT_ENABLE (1 << 1)
107 #define SPI_CMD_INT (1 << 8)
108 #define SPI_RSP_INT (1 << 9)
109 #define SPI_CMD_VALID (1 << 16)
111 // End of SPI_Macros group
113
114
116//-----------------------------------------------------------------------------
117// SPI Hardware Sanity Check (Hidden from User)
118//-----------------------------------------------------------------------------
119#define IS_VALID_CPOL(x) ((x) == LOW || (x) == HIGH)
120#define IS_VALID_CPHA(x) ((x) == DATA_SAMPLED_RISE_EDGE || (x) == DATA_SAMPLED_FALL_EDGE)
121#define IS_VALID_MODE(x) ((x) == FULL_DUPLEX_SINGLE_LINE || (x) == HALF_DUPLEX_DUAL_LINE || (x) == HALF_DUPLEX_QUAD_LINE)
123
124
125/* ========================================================================== */
126/* SUB-GROUP : Data Types */
127/* ========================================================================== */
128
135
146
148 enum cfg_cpol {
149 LOW = 0,
150 HIGH = 1
151 };
152
158
159 // End of SPI_ENUM group
161
162/* ========================================================================== */
163/* SUB-GROUP : DATA STRUCTS */
164/* ========================================================================== */
191
213
214
246 // End of SPI_Types group
248
249
250/* ========================================================================== */
251/* SUB-GROUP: FUNCTIONS */
252/* ========================================================================== */
253
260
267
274 u8 spi_writeRead(spi_instance_t *inst, u8 data);
275
282
289
296
303
311
319
325
331 void spi_write(spi_instance_t *inst, u8 data);
332
338 void spi_write32(spi_instance_t *inst, u32 data);
339
345 void spi_select(spi_instance_t *inst, u32 cs);
346
352 void spi_deselect(spi_instance_t *inst, u32 cs);
353
359 void spi_setDataMode(spi_instance_t *inst, enum cfg_mode mode);
360 // End of SPI_Funcs group
362
363#ifdef __cplusplus
364}
365#endif // C_plusplus
366 // End of MAIN SPI Group
368
369#endif // SPI_H
cfg_mode
SPI transfer mode configuration.
Definition spi.h:141
cfg_cpol
SPI clock polarity configuration.
Definition spi.h:148
cfg_cpha
SPI clock phase configuration.
Definition spi.h:154
@ FULL_DUPLEX_SINGLE_LINE
Full-duplex mode using single data lin.
Definition spi.h:142
@ HALF_DUPLEX_QUAD_LINE
Half-duplex mode using quad data lin.
Definition spi.h:144
@ HALF_DUPLEX_DUAL_LINE
Half-duplex mode using dual data lin.
Definition spi.h:143
@ HIGH
Clock is high when id.
Definition spi.h:150
@ LOW
Clock is low when id.
Definition spi.h:149
@ DATA_SAMPLED_FALL_EDGE
Data sampled on falling clock ed.
Definition spi.h:156
@ DATA_SAMPLED_RISE_EDGE
Data sampled on rising clock ed.
Definition spi.h:155
u8 spi_read(spi_instance_t *inst)
Read 8-bit SPI data.
Definition spi.c:71
u32 spi_getRspOccupancy(spi_instance_t *inst)
Check SPI response FIFO occupancy.
Definition spi.c:42
u32 spi_read32(spi_instance_t *inst)
Read 32-bit SPI data.
Definition spi.c:50
void spi_waitUntilIdle(spi_instance_t *inst)
Wait for SPI if any command waiting to be executed.
Definition spi.c:150
u32 spi_isBusy(spi_instance_t *inst)
Check SPI if it has any command waiting to be executed in queue.
Definition spi.c:141
void spi_applyConfig(spi_instance_t *inst)
Apply stored SPI configuration to hardware.
Definition spi.c:93
void spi_write(spi_instance_t *inst, u8 data)
Write 8-bit SPI data.
Definition spi.c:105
u32 spi_writeRead32(spi_instance_t *inst, u32 data)
Write and Read 32-bit SPI data.
Definition spi.c:60
void spi_deselect(spi_instance_t *inst, u32 cs)
De-assert SPI Chip Select.
Definition spi.c:132
u32 spi_getCmdAvailability(spi_instance_t *inst)
Check SPI command FIFO availability.
Definition spi.c:34
u8 spi_writeRead(spi_instance_t *inst, u8 data)
Write and Read 8-bit SPI data.
Definition spi.c:82
void spi_write32(spi_instance_t *inst, u32 data)
Write 32-bit SPI data.
Definition spi.c:114
void spi_setDataMode(spi_instance_t *inst, enum cfg_mode mode)
Set SPI data transfer mode.
Definition spi.c:25
void spi_select(spi_instance_t *inst, u32 cs)
Assert SPI Chip Select.
Definition spi.c:123
SPI hardware register map.
Definition spi.h:197
u32 SSSETUP
Address Offset: 0x24 - SS Setup Cycles.
Definition spi.h:204
u32 CMD
Address Offset: 0x00 - Command Register.
Definition spi.h:198
u32 INTERRUPT
Address Offset: 0x0C - Interrupt Control.
Definition spi.h:201
u32 RESERVED0[4]
Reserved.
Definition spi.h:202
u32 CMD_WRITELARGE
Address Offset: 0x50 - 32-bit Write.
Definition spi.h:209
u32 SSDISABLE
Address Offset: 0x2C - SS Disable Cycles.
Definition spi.h:206
u32 CMD_READLARGE
Address Offset: 0x58 - 32-bit Read.
Definition spi.h:211
u32 SSACTIVEHIGH
Address Offset: 0x30 - SS Polarity.
Definition spi.h:207
u32 RSP
Address Offset: 0x04 - Response Register.
Definition spi.h:199
u32 CONFIG
Address Offset: 0x08 - Configuration Register.
Definition spi.h:200
u32 CLOCKDIVIDER
Address Offset: 0x20 - Clock Divider.
Definition spi.h:203
u32 SSHOLD
Address Offset: 0x28 - SS Hold Cycles.
Definition spi.h:205
u32 RESERVED1[7]
Reserved.
Definition spi.h:208
u32 CMD_READWRITELARGE
Address Offset: 0x54 - 32-bit Read/Write.
Definition spi.h:210
SPI instance. Holds the software registers and hardware pointer.
Definition spi.h:236
spi_hwreg_t * hwreg
Pointer to Hardware Register Map.
Definition spi.h:237
enum cfg_mode mode
Stored Transfer Mode.
Definition spi.h:240
u32 ssSetup
Slave Select Setup Cycles.
Definition spi.h:242
u32 clkDivider
Clock Divider Value.
Definition spi.h:241
enum cfg_cpol cpol
Stored Clock Polarity.
Definition spi.h:238
enum cfg_cpha cpha
Stored Clock Phase.
Definition spi.h:239
u32 ssHold
Slave Select Hold Cycles.
Definition spi.h:243
u32 ssDisable
Slave Select Disable Cycles.
Definition spi.h:244
uint8_t u8
Definition type.h:30
uint32_t u32
Definition type.h:26