no-OS
Loading...
Searching...
No Matches
spi_engine.h
Go to the documentation of this file.
1/*******************************************************************************
2 * @file spi_engine.h
3 * @brief Header file of SPI Engine core features.
4 * @author Sergiu Cuciurean (sergiu.cuciurean@analog.com)
5 * @author Vilmos-Csaba Jozsa (vilmoscsaba.jozsa@analog.com)
6********************************************************************************
7 * Copyright 2019-2026(c) Analog Devices, Inc.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright notice,
13 * this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 *
19 * 3. Neither the name of Analog Devices, Inc. nor the names of its
20 * contributors may be used to endorse or promote products derived from this
21 * software without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. “AS IS” AND ANY EXPRESS OR
24 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
26 * EVENT SHALL ANALOG DEVICES, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
27 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
29 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
32 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33*******************************************************************************/
34
35#ifndef SPI_ENGINE_H
36#define SPI_ENGINE_H
37
38#include <stdint.h>
39
40#include "spi_engine_private.h"
41#include "axi_dmac.h"
42
43#define OFFLOAD_DISABLED 0x00
44#define OFFLOAD_TX_EN NO_OS_BIT(0)
45#define OFFLOAD_RX_EN NO_OS_BIT(1)
46#define OFFLOAD_TX_RX_EN OFFLOAD_TX_EN | OFFLOAD_RX_EN
47
48#define SPI_ENGINE_MSG_QUEUE_END 0xFFFFFFFF
49
50/* Spi engine commands */
51#define WRITE(no_bytes) ((SPI_ENGINE_INST_TRANSFER << 12) |\
52 (SPI_ENGINE_INSTRUCTION_TRANSFER_W << 8) | no_bytes)
53
54#define READ(no_bytes) ((SPI_ENGINE_INST_TRANSFER << 12) |\
55 (SPI_ENGINE_INSTRUCTION_TRANSFER_R << 8) | no_bytes)
56
57#define WRITE_READ(no_bytes) ((SPI_ENGINE_INST_TRANSFER << 12) |\
58 (SPI_ENGINE_INSTRUCTION_TRANSFER_RW << 8) | no_bytes)
59
60#define SLEEP(time) SPI_ENGINE_CMD_SLEEP(time & 0xF)
61
62/* The delay and chip select parmeters are passed over the engine descriptor
63and will be used inside the function call */
64#define CS_HIGH SPI_ENGINE_CMD_ASSERT(0x03, 0xFF)
65#define CS_LOW SPI_ENGINE_CMD_ASSERT(0x03, 0x00)
66
73 uint32_t ref_clk_hz;
77 uint32_t cs_delay;
79 uint8_t data_width;
82};
83
84
121
122
137
147 uint32_t *commands;
149 uint32_t no_commands;
151 uint32_t *commands_data;
153 uint32_t tx_addr;
155 uint32_t rx_addr;
156};
157
162
163/* Write SPI Engine's axi registers */
164int32_t spi_engine_write(struct spi_engine_desc *desc,
165 uint32_t reg_addr,
166 uint32_t reg_data);
167
168/* Read SPI Engine's axi registers */
169int32_t spi_engine_read(struct spi_engine_desc *desc,
170 uint32_t reg_addr,
171 uint32_t *reg_data);
172/* Initialize the SPI engine device */
173int32_t spi_engine_init(struct no_os_spi_desc **desc,
174 const struct no_os_spi_init_param *param);
175
176/* Write and read data over SPI using the SPI engine */
177int32_t spi_engine_write_and_read(struct no_os_spi_desc *desc,
178 uint8_t *data,
179 uint16_t bytes_number);
180
181/* Free the resources used by the SPI engine device */
182int32_t spi_engine_remove(struct no_os_spi_desc *desc);
183
184/* Initialize the SPI engine offload module */
185int32_t spi_engine_offload_init(struct no_os_spi_desc *desc,
186 const struct spi_engine_offload_init_param *param);
187
188/* Write and read data over SPI using the offload module */
191 uint32_t no_samples);
192
193/* Set SPI transfer width */
195 uint8_t data_wdith);
196
197/* Set SPI transfer speed */
198void spi_engine_set_speed(struct no_os_spi_desc *desc,
199 uint32_t speed_hz);
200
201#endif // SPI_ENGINE_H
Driver for the Analog Devices AXI-DMAC core.
cyclic_transfer
Definition axi_dmac.h:88
const struct no_os_spi_platform_ops spi_eng_platform_ops
Spi engine platform specific SPI platform ops structure.
Definition spi_engine.c:58
int32_t spi_engine_offload_init(struct no_os_spi_desc *desc, const struct spi_engine_offload_init_param *param)
Initialize the SPI engine's offload module.
Definition spi_engine.c:755
int32_t spi_engine_offload_transfer(struct no_os_spi_desc *desc, struct spi_engine_offload_message msg, uint32_t no_samples)
Initiate a SPI transfer in offload mode.
Definition spi_engine.c:801
int32_t spi_engine_write(struct spi_engine_desc *desc, uint32_t reg_addr, uint32_t reg_data)
Write SPI Engine's axi registers.
Definition spi_engine.c:79
int32_t spi_engine_set_transfer_width(struct no_os_spi_desc *desc, uint8_t data_wdith)
Set width of the transfered word over SPI.
Definition spi_engine.c:116
int32_t spi_engine_read(struct spi_engine_desc *desc, uint32_t reg_addr, uint32_t *reg_data)
Read SPI Engine's axi registers.
Definition spi_engine.c:97
int32_t spi_engine_init(struct no_os_spi_desc **desc, const struct no_os_spi_init_param *param)
Initialize the spi engine.
Definition spi_engine.c:615
int32_t spi_engine_remove(struct no_os_spi_desc *desc)
Free the resources allocated by no_os_spi_init().
Definition spi_engine.c:897
int32_t spi_engine_write_and_read(struct no_os_spi_desc *desc, uint8_t *data, uint16_t bytes_number)
Write/read on the spi interface.
Definition spi_engine.c:685
void spi_engine_set_speed(struct no_os_spi_desc *desc, uint32_t speed_hz)
Set SPI engine clock frequency.
Definition spi_engine.c:137
Definition axi_dmac.h:101
Structure holding SPI descriptor.
Definition no_os_spi.h:180
Structure holding the parameters for SPI initialization.
Definition no_os_spi.h:128
Structure holding SPI function pointers that point to the platform specific function.
Definition no_os_spi.h:210
Structure representing an SPI engine device.
Definition spi_engine.h:89
struct axi_dmac * offload_rx_dma
Definition spi_engine.h:95
uint32_t rx_dma_baseaddr
Definition spi_engine.h:107
enum cyclic_transfer cyclic
Definition spi_engine.h:97
uint8_t data_width
Definition spi_engine.h:115
uint8_t offload_tx_len
Definition spi_engine.h:101
uint8_t offload_config
Definition spi_engine.h:99
uint32_t clk_div
Definition spi_engine.h:113
uint32_t tx_dma_baseaddr
Definition spi_engine.h:109
struct axi_dmac * offload_tx_dma
Definition spi_engine.h:93
uint8_t sdo_idle_state
Definition spi_engine.h:119
uint8_t offload_rx_len
Definition spi_engine.h:103
uint32_t ref_clk_hz
Definition spi_engine.h:91
uint8_t max_data_width
Definition spi_engine.h:117
uint8_t cs_delay
Definition spi_engine.h:111
uint32_t spi_engine_baseaddr
Definition spi_engine.h:105
Structure containing the init parameters needed by the SPI engine.
Definition spi_engine.h:71
uint32_t spi_engine_baseaddr
Definition spi_engine.h:75
uint32_t ref_clk_hz
Definition spi_engine.h:73
uint8_t sdo_idle_state
Definition spi_engine.h:81
uint32_t cs_delay
Definition spi_engine.h:77
uint8_t data_width
Definition spi_engine.h:79
Structure containing the init parameters needed by the offload module.
Definition spi_engine.h:127
uint32_t dma_flags
Definition spi_engine.h:133
uint8_t offload_config
Definition spi_engine.h:135
uint32_t tx_dma_baseaddr
Definition spi_engine.h:131
uint32_t rx_dma_baseaddr
Definition spi_engine.h:129
Structure representing an offload message.
Definition spi_engine.h:142
uint32_t tx_addr
Definition spi_engine.h:153
uint32_t * commands
Definition spi_engine.h:147
uint32_t no_commands
Definition spi_engine.h:149
uint32_t * commands_data
Definition spi_engine.h:151
uint32_t rx_addr
Definition spi_engine.h:155