Sapphire SoC DS Sapphire SoC UG Sapphire HP SoC DS Sapphire HP SoC UG RISC-V Embedded IDE UG Board Support Package
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
37
38/* ========================================================================== */
39/* SUB-GROUP : REGISTER DEFINITIONS */
40/* ========================================================================== */
41
48
53 #define SPI_CMD_DATA_MASK 0xFF
54 #define SPI_CMD_WR (1 << 8)
55 #define SPI_CMD_RD (1 << 9)
56 #define SPI_CMD_SS (1 << 11)
57 #define SPI_CMD_READ_INVALID (1 << 31)
59
64 #define SPI_RSP_CMD_FIFO_AVAILABILITY (0xFFFF)
65 #define SPI_RSP_FIFO_OCCUPANCY (0xFFFF << 16)
67
72 #define SPI_CONFIG_CPOL (1 << 0)
73 #define SPI_CONFIG_MODE (1 << 4)
74 #define SPI_CONFIG_CPHA (1 << 16)
76
81 #define SPI_INTC_CMD_INT_ENABLE (1 << 0)
82 #define SPI_INTC_RSP_INT_ENABLE (1 << 1)
83 #define SPI_CMD_INT (1 << 8)
84 #define SPI_RSP_INT (1 << 9)
85 #define SPI_CMD_VALID (1 << 16)
87 // End of SPI_Macros group
89
90
92//-----------------------------------------------------------------------------
93// SPI Hardware Sanity Check (Hidden from User)
94//-----------------------------------------------------------------------------
95#define IS_VALID_CPOL(x) ((x) == LOW || (x) == HIGH)
96#define IS_VALID_CPHA(x) ((x) == DATA_SAMPLED_RISE_EDGE || (x) == DATA_SAMPLED_FALL_EDGE)
97#define IS_VALID_MODE(x) ((x) == FULL_DUPLEX_SINGLE_LINE || (x) == HALF_DUPLEX_DUAL_LINE || (x) == HALF_DUPLEX_QUAD_LINE)
99
100
101/* ========================================================================== */
102/* SUB-GROUP : Data Types */
103/* ========================================================================== */
104
111
122
124 enum cfg_cpol {
125 LOW = 0,
126 HIGH = 1
127 };
128
134
135 // End of SPI_ENUM group
137
138/* ========================================================================== */
139/* SUB-GROUP : DATA STRUCTS */
140/* ========================================================================== */
167
189
190
222 // End of SPI_Types group
224
225
226/* ========================================================================== */
227/* SUB-GROUP: FUNCTIONS */
228/* ========================================================================== */
229
236
243
250 u8 spi_writeRead(spi_instance_t *inst, u8 data);
251
258
265
272
279
287
295
301
307 void spi_write(spi_instance_t *inst, u8 data);
308
314 void spi_write32(spi_instance_t *inst, u32 data);
315
321 void spi_select(spi_instance_t *inst, u32 cs);
322
328 void spi_diselect(spi_instance_t *inst, u32 cs);
329
335 void spi_setDataMode(spi_instance_t *inst, enum cfg_mode mode);
336 // End of SPI_Funcs group
338
339#ifdef __cplusplus
340}
341#endif // C_plusplus
342 // End of MAIN SPI Group
344
345#endif // SPI_H
cfg_mode
SPI transfer mode configuration.
Definition spi.h:117
cfg_cpol
SPI clock polarity configuration.
Definition spi.h:124
cfg_cpha
SPI clock phase configuration.
Definition spi.h:130
@ FULL_DUPLEX_SINGLE_LINE
Full-duplex mode using single data lin.
Definition spi.h:118
@ HALF_DUPLEX_QUAD_LINE
Half-duplex mode using quad data lin.
Definition spi.h:120
@ HALF_DUPLEX_DUAL_LINE
Half-duplex mode using dual data lin.
Definition spi.h:119
@ HIGH
Clock is high when id.
Definition spi.h:126
@ LOW
Clock is low when id.
Definition spi.h:125
@ DATA_SAMPLED_FALL_EDGE
Data sampled on falling clock ed.
Definition spi.h:132
@ DATA_SAMPLED_RISE_EDGE
Data sampled on rising clock ed.
Definition spi.h:131
u8 spi_read(spi_instance_t *inst)
Read 8-bit SPI data.
Definition spi.c:71
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
void spi_diselect(spi_instance_t *inst, u32 cs)
De-assert SPI Chip Select.
Definition spi.c:132
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
u32 spi_cmdAvailability(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
u32 spi_rspOccupancy(spi_instance_t *inst)
Check SPI response FIFO occupancy.
Definition spi.c:42
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:173
u32 SSSETUP
Address Offset: 0x24 - SS Setup Cycles.
Definition spi.h:180
u32 CMD
Address Offset: 0x00 - Command Register.
Definition spi.h:174
u32 INTERRUPT
Address Offset: 0x0C - Interrupt Control.
Definition spi.h:177
u32 RESERVED0[4]
Reserved.
Definition spi.h:178
u32 CMD_WRITELARGE
Address Offset: 0x50 - 32-bit Write.
Definition spi.h:185
u32 SSDISABLE
Address Offset: 0x2C - SS Disable Cycles.
Definition spi.h:182
u32 CMD_READLARGE
Address Offset: 0x58 - 32-bit Read.
Definition spi.h:187
u32 SSACTIVEHIGH
Address Offset: 0x30 - SS Polarity.
Definition spi.h:183
u32 RSP
Address Offset: 0x04 - Response Register.
Definition spi.h:175
u32 CONFIG
Address Offset: 0x08 - Configuration Register.
Definition spi.h:176
u32 CLOCKDIVIDER
Address Offset: 0x20 - Clock Divider.
Definition spi.h:179
u32 SSHOLD
Address Offset: 0x28 - SS Hold Cycles.
Definition spi.h:181
u32 RESERVED1[7]
Reserved.
Definition spi.h:184
u32 CMD_READWRITELARGE
Address Offset: 0x54 - 32-bit Read/Write.
Definition spi.h:186
SPI instance. Holds the software registers and hardware pointer.
Definition spi.h:212
spi_hwreg_t * hwreg
Pointer to Hardware Register Map.
Definition spi.h:213
enum cfg_mode mode
Stored Transfer Mode.
Definition spi.h:216
u32 ssSetup
Slave Select Setup Cycles.
Definition spi.h:218
u32 clkDivider
Clock Divider Value.
Definition spi.h:217
enum cfg_cpol cpol
Stored Clock Polarity.
Definition spi.h:214
enum cfg_cpha cpha
Stored Clock Phase.
Definition spi.h:215
u32 ssHold
Slave Select Hold Cycles.
Definition spi.h:219
u32 ssDisable
Slave Select Disable Cycles.
Definition spi.h:220
uint8_t u8
Definition type.h:26
uint32_t u32
Definition type.h:22