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.c
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
15#include "spi/spi.h"
16#include "bsp.h"
17
18/*----------------------------------------------------------------------------*/
19/* Function implementations */
20/*----------------------------------------------------------------------------*/
21
26{
27 inst->mode = Mode;
28 spi_applyConfig(inst);
29}
30
35{
36 return inst->hwreg->RSP & 0xFFFF;
37}
38
43{
44 return inst->hwreg->RSP >> 16;
45}
46
51{
52 while(spi_cmdAvailability(inst) == 0);
53 inst->hwreg->CMD = SPI_CMD_RD;
54 while(spi_rspOccupancy(inst) == 0);
55 return inst->hwreg->CMD_READLARGE;
56}
57
61{
62 while(spi_cmdAvailability(inst) == 0);
63 inst->hwreg->CMD_READWRITELARGE = data;
64 while(spi_rspOccupancy(inst) == 0);
65 return inst->hwreg->CMD_READLARGE;
66}
67
72{
73 while (spi_cmdAvailability(inst)==0);
74 inst->hwreg->CMD =SPI_CMD_RD;
75 while(spi_rspOccupancy(inst) == 0);
76 return inst->hwreg->CMD;
77}
78
83{
84 while(spi_cmdAvailability(inst) == 0);
85 inst->hwreg->CMD = data | SPI_CMD_WR | SPI_CMD_RD;
86 while(spi_rspOccupancy(inst) == 0);
87 return inst->hwreg->CMD;
88}
89
94{
95 inst->hwreg->CONFIG = (inst->cpol << 0) | (inst->cpha << 1) | (inst->mode <<4);
96 inst->hwreg->CLOCKDIVIDER = inst->clkDivider;
97 inst->hwreg->SSSETUP = inst->ssSetup;
98 inst->hwreg->SSHOLD = inst->ssHold;
99 inst->hwreg->SSDISABLE = inst->ssDisable;
100}
101
105void spi_write(spi_instance_t *inst, u8 data)
106{
107 while (spi_cmdAvailability(inst)==0);
108 inst->hwreg->CMD = data |SPI_CMD_WR;
109}
110
115{
116 while(spi_cmdAvailability(inst) == 0);
117 inst->hwreg->CMD_WRITELARGE = data;
118}
119
124{
125 while (spi_cmdAvailability(inst)==0);
126 inst->hwreg->CMD = cs | 0x80 | SPI_CMD_SS;
127}
128
133{
134 while (spi_cmdAvailability(inst)==0);
135 inst->hwreg->CMD = cs | 0x00 | SPI_CMD_SS;
136}
137
142{
143 return inst->hwreg->INTERRUPT & SPI_CMD_VALID;
144}
145
146
151
152 while (spi_isBusy(inst) != 0);
153}
cfg_mode
SPI transfer mode configuration.
Definition spi.h:117
u8 spi_read(spi_instance_t *inst)
Reads an 8-bit data value from the SPI read register.
Definition spi.c:71
u32 spi_read32(spi_instance_t *inst)
Reads a 32-bit data value from the SPI read register.
Definition spi.c:50
void spi_waitUntilIdle(spi_instance_t *inst)
Waits for SPI if it has any command waiting to be executed in queue.
Definition spi.c:150
void spi_diselect(spi_instance_t *inst, u32 cs)
Deselects the SPI slave by deasserting the corresponding chip select (CS) line.
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)
Applies the current configuration settings stored in the spi_instance_t structure to the SPI hardware...
Definition spi.c:93
void spi_write(spi_instance_t *inst, u8 data)
Writes an 8-bit data value to the SPI data register.
Definition spi.c:105
u32 spi_writeRead32(spi_instance_t *inst, u32 data)
Writes data to and reads data from the SPI data register.
Definition spi.c:60
u32 spi_cmdAvailability(spi_instance_t *inst)
Returns the availability of command buffer space in the SPI buffer.
Definition spi.c:34
u8 spi_writeRead(spi_instance_t *inst, u8 data)
Writes data to and reads data from the SPI data register.
Definition spi.c:82
void spi_write32(spi_instance_t *inst, u32 data)
Writes a 32-bit data value to the SPI data register.
Definition spi.c:114
u32 spi_rspOccupancy(spi_instance_t *inst)
Returns the occupancy of the response buffer in the SPI buffer.
Definition spi.c:42
void spi_setDataMode(spi_instance_t *inst, enum cfg_mode Mode)
Set SPI Data Mode (Full/Half Duplex, Dual/Quad Line).
Definition spi.c:25
void spi_select(spi_instance_t *inst, u32 cs)
Selects the SPI slave by asserting the corresponding chip select (CS) line.
Definition spi.c:123
#define SPI_CMD_RD
Read Trigger.
Definition spi.h:55
#define SPI_CMD_SS
Slave Select Trigger.
Definition spi.h:56
#define SPI_CMD_WR
Write Trigger.
Definition spi.h:54
#define SPI_CMD_VALID
Command Valid S.
Definition spi.h:85
SPI driver API definitions.
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 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 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 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