no-OS
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
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********************************************************************************
6 * Copyright 2019(c) Analog Devices, Inc.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions are met:
10 *
11 * 1. Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the following disclaimer.
13 *
14 * 2. Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 *
18 * 3. Neither the name of Analog Devices, Inc. nor the names of its
19 * contributors may be used to endorse or promote products derived from this
20 * software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. “AS IS” AND ANY EXPRESS OR
23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
24 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
25 * EVENT SHALL ANALOG DEVICES, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
28 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
31 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32*******************************************************************************/
33
34#ifndef SPI_ENGINE_H
35#define SPI_ENGINE_H
36
37#include <stdint.h>
38
39#include "xilinx_spi.h"
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
85
86
125
126
141
151 uint32_t *commands;
153 uint32_t no_commands;
155 uint32_t *commands_data;
157 uint32_t tx_addr;
159 uint32_t rx_addr;
160};
161
165extern const struct no_os_spi_platform_ops xil_spi_ops;
166
167/* Write SPI Engine's axi registers */
168int32_t spi_engine_write(struct spi_engine_desc *desc,
169 uint32_t reg_addr,
170 uint32_t reg_data);
171
172/* Read SPI Engine's axi registers */
173int32_t spi_engine_read(struct spi_engine_desc *desc,
174 uint32_t reg_addr,
175 uint32_t *reg_data);
176/* Initialize the SPI engine device */
177int32_t spi_engine_init(struct no_os_spi_desc **desc,
178 const struct no_os_spi_init_param *param);
179
180/* Write and read data over SPI using the SPI engine */
181int32_t spi_engine_write_and_read(struct no_os_spi_desc *desc,
182 uint8_t *data,
183 uint16_t bytes_number);
184
185/* Free the resources used by the SPI engine device */
186int32_t spi_engine_remove(struct no_os_spi_desc *desc);
187
188/* Initialize the SPI engine offload module */
189int32_t spi_engine_offload_init(struct no_os_spi_desc *desc,
190 const struct spi_engine_offload_init_param *param);
191
192/* Write and read data over SPI using the offload module */
195 uint32_t no_samples);
196
197/* Set SPI transfer width */
199 uint8_t data_wdith);
200
201/* Set SPI transfer speed */
202void spi_engine_set_speed(struct no_os_spi_desc *desc,
203 uint32_t speed_hz);
204
205#endif // SPI_ENGINE_H
Driver for the Analog Devices AXI-DMAC core.
cyclic_transfer
Definition axi_dmac.h:88
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:751
const struct no_os_spi_platform_ops xil_spi_ops
Spi engine platform specific SPI platform ops structure.
Definition xilinx_spi.c:445
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:797
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:78
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:115
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:96
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:614
int32_t spi_engine_remove(struct no_os_spi_desc *desc)
Free the resources allocated by no_os_spi_init().
Definition spi_engine.c:893
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:136
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:91
enum xil_spi_type type
Definition spi_engine.h:95
struct axi_dmac * offload_rx_dma
Definition spi_engine.h:99
uint32_t rx_dma_baseaddr
Definition spi_engine.h:111
enum cyclic_transfer cyclic
Definition spi_engine.h:101
uint8_t data_width
Definition spi_engine.h:119
uint8_t offload_tx_len
Definition spi_engine.h:105
uint8_t offload_config
Definition spi_engine.h:103
uint32_t clk_div
Definition spi_engine.h:117
uint32_t tx_dma_baseaddr
Definition spi_engine.h:113
struct axi_dmac * offload_tx_dma
Definition spi_engine.h:97
uint8_t sdo_idle_state
Definition spi_engine.h:123
uint8_t offload_rx_len
Definition spi_engine.h:107
uint32_t ref_clk_hz
Definition spi_engine.h:93
uint8_t max_data_width
Definition spi_engine.h:121
uint8_t cs_delay
Definition spi_engine.h:115
uint32_t spi_engine_baseaddr
Definition spi_engine.h:109
Structure containing the init parameters needed by the SPI engine.
Definition spi_engine.h:71
uint32_t spi_engine_baseaddr
Definition spi_engine.h:77
uint32_t ref_clk_hz
Definition spi_engine.h:73
uint8_t sdo_idle_state
Definition spi_engine.h:83
uint32_t cs_delay
Definition spi_engine.h:79
uint8_t data_width
Definition spi_engine.h:81
enum xil_spi_type type
Definition spi_engine.h:75
Structure containing the init parameters needed by the offload module.
Definition spi_engine.h:131
uint32_t dma_flags
Definition spi_engine.h:137
uint8_t offload_config
Definition spi_engine.h:139
uint32_t tx_dma_baseaddr
Definition spi_engine.h:135
uint32_t rx_dma_baseaddr
Definition spi_engine.h:133
Structure representing an offload message.
Definition spi_engine.h:146
uint32_t tx_addr
Definition spi_engine.h:157
uint32_t * commands
Definition spi_engine.h:151
uint32_t no_commands
Definition spi_engine.h:153
uint32_t * commands_data
Definition spi_engine.h:155
uint32_t rx_addr
Definition spi_engine.h:159
xil_spi_type
Xilinx platform architecture sections.
Definition xilinx_spi.h:46