NEORV32 Software Framework Documentation
The NEORV32 RISC-V Processor
Loading...
Searching...
No Matches
neorv32_dma.h
Go to the documentation of this file.
1// ================================================================================ //
2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
3// Copyright (c) NEORV32 contributors. //
4// Copyright (c) 2020 - 2025 Stephan Nolting. All rights reserved. //
5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
6// SPDX-License-Identifier: BSD-3-Clause //
7// ================================================================================ //
8
13
14#ifndef NEORV32_DMA_H
15#define NEORV32_DMA_H
16
17#include <stdint.h>
18
19
20/**********************************************************************/
25typedef volatile struct __attribute__((packed,aligned(4))) {
26 uint32_t CTRL;
27 uint32_t SRC_BASE;
28 uint32_t DST_BASE;
29 uint32_t TTYPE;
31
33#define NEORV32_DMA ((neorv32_dma_t*) (NEORV32_DMA_BASE))
34
45
57
58
59
60/**********************************************************************/
64#define DMA_CMD_B2B (0b00 << DMA_TTYPE_QSEL_LSB) // byte to byte
65#define DMA_CMD_B2UW (0b01 << DMA_TTYPE_QSEL_LSB) // byte to unsigned word
66#define DMA_CMD_B2SW (0b10 << DMA_TTYPE_QSEL_LSB) // byte to signed word
67#define DMA_CMD_W2W (0b11 << DMA_TTYPE_QSEL_LSB) // word to word
68
69#define DMA_CMD_SRC_CONST (0b0 << DMA_TTYPE_SRC_INC) // constant source address
70#define DMA_CMD_SRC_INC (0b1 << DMA_TTYPE_SRC_INC) // incrementing source address
71
72#define DMA_CMD_DST_CONST (0b0 << DMA_TTYPE_DST_INC) // constant destination address
73#define DMA_CMD_DST_INC (0b1 << DMA_TTYPE_DST_INC) // incrementing destination address
74
75#define DMA_CMD_ENDIAN (0b1 << DMA_TTYPE_ENDIAN) // convert endianness
77
78
79/**********************************************************************/
89
90
91/**********************************************************************/
94typedef struct __attribute__((packed,aligned(4))) {
95 uint32_t src;
96 uint32_t dst;
97 uint32_t num;
98 uint32_t cmd;
100
101
102/**********************************************************************/
106int neorv32_dma_available(void);
107void neorv32_dma_enable(void);
108void neorv32_dma_disable(void);
110int neorv32_dma_status(void);
112
113
114#endif // NEORV32_DMA_H
NEORV32_DMA_STATUS_enum
Definition neorv32_dma.h:82
@ DMA_STATUS_ERR_WR
Definition neorv32_dma.h:83
@ DMA_STATUS_IDLE
Definition neorv32_dma.h:85
@ DMA_STATUS_BUSY
Definition neorv32_dma.h:86
@ DMA_STATUS_DONE
Definition neorv32_dma.h:87
@ DMA_STATUS_ERR_RD
Definition neorv32_dma.h:84
int neorv32_dma_available(void)
Definition neorv32_dma.c:22
NEORV32_DMA_TTYPE_enum
Definition neorv32_dma.h:47
@ DMA_TTYPE_ENDIAN
Definition neorv32_dma.h:55
@ DMA_TTYPE_QSEL_MSB
Definition neorv32_dma.h:52
@ DMA_TTYPE_SRC_INC
Definition neorv32_dma.h:53
@ DMA_TTYPE_NUM_MSB
Definition neorv32_dma.h:49
@ DMA_TTYPE_NUM_LSB
Definition neorv32_dma.h:48
@ DMA_TTYPE_DST_INC
Definition neorv32_dma.h:54
@ DMA_TTYPE_QSEL_LSB
Definition neorv32_dma.h:51
NEORV32_DMA_CTRL_enum
Definition neorv32_dma.h:36
@ DMA_CTRL_DONE
Definition neorv32_dma.h:42
@ DMA_CTRL_ERROR_RD
Definition neorv32_dma.h:40
@ DMA_CTRL_EN
Definition neorv32_dma.h:37
@ DMA_CTRL_BUSY
Definition neorv32_dma.h:43
@ DMA_CTRL_START
Definition neorv32_dma.h:38
@ DMA_CTRL_ERROR_WR
Definition neorv32_dma.h:41
void neorv32_dma_disable(void)
Definition neorv32_dma.c:45
int neorv32_dma_status(void)
Definition neorv32_dma.c:73
void neorv32_dma_enable(void)
Definition neorv32_dma.c:36
void neorv32_dma_transfer(neorv32_dma_desc_t *desc)
Definition neorv32_dma.c:59
Definition neorv32_dma.h:94
uint32_t cmd
Definition neorv32_dma.h:98
uint32_t src
Definition neorv32_dma.h:95
uint32_t dst
Definition neorv32_dma.h:96
uint32_t num
Definition neorv32_dma.h:97
Definition neorv32_dma.h:25
uint32_t SRC_BASE
Definition neorv32_dma.h:27
uint32_t TTYPE
Definition neorv32_dma.h:29
uint32_t CTRL
Definition neorv32_dma.h:26
uint32_t DST_BASE
Definition neorv32_dma.h:28