RTEMS  5.1
xdmad.h
1 /* ---------------------------------------------------------------------------- */
2 /* Atmel Microcontroller Software Support */
3 /* SAM Software Package License */
4 /* ---------------------------------------------------------------------------- */
5 /* Copyright (c) 2015, Atmel Corporation */
6 /* */
7 /* All rights reserved. */
8 /* */
9 /* Redistribution and use in source and binary forms, with or without */
10 /* modification, are permitted provided that the following condition is met: */
11 /* */
12 /* - Redistributions of source code must retain the above copyright notice, */
13 /* this list of conditions and the disclaimer below. */
14 /* */
15 /* Atmel's name may not be used to endorse or promote products derived from */
16 /* this software without specific prior written permission. */
17 /* */
18 /* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR */
19 /* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
20 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE */
21 /* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, */
22 /* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
23 /* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */
24 /* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF */
25 /* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
26 /* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
27 /* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
28 /* ---------------------------------------------------------------------------- */
29 
30 #ifndef _XDMAD_H
31 #define _XDMAD_H
32 
33 
34 /*----------------------------------------------------------------------------
35  * Includes
36  *----------------------------------------------------------------------------*/
37 
38 #include "chip.h"
39 #include <assert.h>
40 
41 
44 /*----------------------------------------------------------------------------
45  * Consts
46  *----------------------------------------------------------------------------*/
47 #define XDMAD_TRANSFER_MEMORY 0xFF
48 #define XDMAD_ALLOC_FAILED 0xFFFF
50 #define XDMAD_TRANSFER_TX 0
51 #define XDMAD_TRANSFER_RX 1
52 
53 /* XDMA_MBR_UBC */
54 #define XDMA_UBC_NDE (0x1u << 24)
55 #define XDMA_UBC_NDE_FETCH_DIS (0x0u << 24)
56 #define XDMA_UBC_NDE_FETCH_EN (0x1u << 24)
57 #define XDMA_UBC_NSEN (0x1u << 25)
58 #define XDMA_UBC_NSEN_UNCHANGED (0x0u << 25)
59 #define XDMA_UBC_NSEN_UPDATED (0x1u << 25)
60 #define XDMA_UBC_NDEN (0x1u << 26)
61 #define XDMA_UBC_NDEN_UNCHANGED (0x0u << 26)
62 #define XDMA_UBC_NDEN_UPDATED (0x1u << 26)
63 #define XDMA_UBC_NVIEW_Pos 27
64 #define XDMA_UBC_NVIEW_Msk (0x3u << XDMA_UBC_NVIEW_Pos)
65 #define XDMA_UBC_NVIEW_NDV0 (0x0u << XDMA_UBC_NVIEW_Pos)
66 #define XDMA_UBC_NVIEW_NDV1 (0x1u << XDMA_UBC_NVIEW_Pos)
67 #define XDMA_UBC_NVIEW_NDV2 (0x2u << XDMA_UBC_NVIEW_Pos)
68 #define XDMA_UBC_NVIEW_NDV3 (0x3u << XDMA_UBC_NVIEW_Pos)
69 
70 /*----------------------------------------------------------------------------
71  * MACRO
72  *----------------------------------------------------------------------------*/
73 
76 /*----------------------------------------------------------------------------
77  * Types
78  *----------------------------------------------------------------------------*/
83 typedef enum _XdmadStatus {
84  XDMAD_OK = 0,
85  XDMAD_PARTIAL_DONE,
86  XDMAD_DONE,
90 } eXdmadStatus, eXdmadRC;
91 
93 typedef enum _XdmadState {
100 } eXdmadState;
101 
103 typedef enum _XdmadProgState {
104  XDMAD_SINGLE = 0,
105  XDMAD_MULTI,
106  XDMAD_LLI,
108 
110 typedef void (*XdmadTransferCallback)(uint32_t Channel, void *pArg, uint32_t status);
111 
113 typedef struct _XdmadChannel {
115  void *pArg;
116  uint8_t bIrqOwner;
117  uint8_t bSrcPeriphID;
118  uint8_t bDstPeriphID;
119  uint8_t bSrcTxIfID;
120  uint8_t bSrcRxIfID;
121  uint8_t bDstTxIfID;
122  uint8_t bDstRxIfID;
123  volatile uint8_t state;
124 } sXdmadChannel;
125 
127 typedef struct _Xdmad {
128  Xdmac *pXdmacs;
129  sXdmadChannel XdmaChannels[XDMACCHID_NUMBER];
130  uint8_t numControllers;
131  uint8_t numChannels;
132  uint8_t xdmaMutex;
133 } sXdmad;
134 
135 typedef struct _XdmadCfg {
137  uint32_t mbr_ubc;
139  uint32_t mbr_sa;
141  uint32_t mbr_da;
143  uint32_t mbr_cfg;
145  uint32_t mbr_bc;
147  uint32_t mbr_ds;
149  uint32_t mbr_sus;
151  uint32_t mbr_dus;
152 } sXdmadCfg;
153 
158  uint32_t mbr_nda;
160  uint32_t mbr_ubc;
162  uint32_t mbr_ta;
164 
169  uint32_t mbr_nda;
171  uint32_t mbr_ubc;
173  uint32_t mbr_sa;
175  uint32_t mbr_da;
177 
182  uint32_t mbr_nda;
184  uint32_t mbr_ubc;
186  uint32_t mbr_sa;
188  uint32_t mbr_da;
190  uint32_t mbr_cfg;
192 
197  uint32_t mbr_nda;
199  uint32_t mbr_ubc;
201  uint32_t mbr_sa;
203  uint32_t mbr_da;
205  uint32_t mbr_cfg;
207  uint32_t mbr_bc;
209  uint32_t mbr_ds;
211  uint32_t mbr_sus;
213  uint32_t mbr_dus;
215 
218 extern sXdmad XDMAD_Instance;
219 
220 /*----------------------------------------------------------------------------
221  * Exported functions
222  *----------------------------------------------------------------------------*/
225 extern uint32_t XDMAD_AllocateChannel(sXdmad *pXdmad,
226  uint8_t bSrcID, uint8_t bDstID);
227 extern eXdmadRC XDMAD_FreeChannel(sXdmad *pXdmad, uint32_t dwChannel);
228 
229 extern eXdmadRC XDMAD_ConfigureTransfer(sXdmad *pXdmad,
230  uint32_t dwChannel,
231  sXdmadCfg *pXdmaParam,
232  uint32_t dwXdmaDescCfg,
233  uint32_t dwXdmaDescAddr,
234  uint32_t dwXdmaIntEn);
235 
236 extern eXdmadRC XDMAD_PrepareChannel(sXdmad *pXdmad, uint32_t dwChannel);
237 
238 extern eXdmadRC XDMAD_IsTransferDone(sXdmad *pXdmad, uint32_t dwChannel);
239 
240 extern eXdmadRC XDMAD_StartTransfer(sXdmad *pXdmad, uint32_t dwChannel);
241 
242 extern void XDMAD_DoNothingCallback(uint32_t Channel, void *pArg, uint32_t status);
243 
244 extern eXdmadRC XDMAD_SetCallback(sXdmad *pXdmad,
245  uint32_t dwChannel,
246  XdmadTransferCallback fCallback,
247  void *pArg);
248 
249 extern eXdmadRC XDMAD_StopTransfer(sXdmad *pXdmad, uint32_t dwChannel);
252 #endif //#ifndef _XDMAD_H
253 
uint32_t mbr_ubc
Definition: xdmad.h:184
uint32_t mbr_bc
Definition: xdmad.h:207
_XdmadState
Definition: xdmad.h:93
uint32_t mbr_dus
Definition: xdmad.h:151
uint32_t mbr_ds
Definition: xdmad.h:209
_XdmadProgState
Definition: xdmad.h:103
struct _LinkedListDescriporView3 LinkedListDescriporView3
Structure for storing parameters for DMA view3 that can be performed by the DMA Master transfer.
uint32_t mbr_sa
Definition: xdmad.h:186
uint8_t bSrcRxIfID
Definition: xdmad.h:120
Definition: xdmad.h:94
Definition: xdmad.h:89
Structure for storing parameters for DMA view1 that can be performed by the DMA Master transfer.
Definition: xdmad.h:167
uint8_t bDstTxIfID
Definition: xdmad.h:121
Structure for storing parameters for DMA view3 that can be performed by the DMA Master transfer.
Definition: xdmad.h:195
uint32_t mbr_da
Definition: xdmad.h:175
Definition: xdmad.h:99
Definition: xdmad.h:98
uint32_t mbr_cfg
Definition: xdmad.h:205
uint32_t mbr_da
Definition: xdmad.h:203
uint32_t mbr_sa
Definition: xdmad.h:201
uint32_t mbr_nda
Definition: xdmad.h:182
uint8_t bSrcTxIfID
Definition: xdmad.h:119
uint8_t bIrqOwner
Definition: xdmad.h:116
uint32_t mbr_bc
Definition: xdmad.h:145
struct _Xdmad sXdmad
uint32_t mbr_ta
Definition: xdmad.h:162
uint32_t mbr_ubc
Definition: xdmad.h:171
uint32_t mbr_ubc
Definition: xdmad.h:199
Information for the Assert Handler.
Structure for storing parameters for DMA view0 that can be performed by the DMA Master transfer.
Definition: xdmad.h:156
void * pArg
Definition: xdmad.h:115
uint32_t mbr_nda
Definition: xdmad.h:169
Definition: xdmad.h:95
enum _XdmadProgState eXdmadProgState
uint32_t mbr_dus
Definition: xdmad.h:213
eXdmadRC XDMAD_ConfigureTransfer(sXdmad *pXdmad, uint32_t dwChannel, sXdmadCfg *pXdmaParam, uint32_t dwXdmaDescCfg, uint32_t dwXdmaDescAddr, uint32_t dwXdmaIntEn)
Configure DMA for a single transfer.
Definition: xdmad.c:338
enum _XdmadState eXdmadState
volatile uint8_t state
Definition: xdmad.h:123
struct _LinkedListDescriporView2 LinkedListDescriporView2
Structure for storing parameters for DMA view2 that can be performed by the DMA Master transfer.
enum _XdmadStatus eXdmadStatus
void(* XdmadTransferCallback)(uint32_t Channel, void *pArg, uint32_t status)
Definition: xdmad.h:110
uint8_t bDstPeriphID
Definition: xdmad.h:118
uint32_t mbr_sus
Definition: xdmad.h:211
eXdmadRC XDMAD_StopTransfer(sXdmad *pXdmad, uint32_t dwChannel)
Stop DMA transfer.
Definition: xdmad.c:431
Definition: xdmad.h:135
uint32_t mbr_nda
Definition: xdmad.h:158
uint32_t mbr_da
Definition: xdmad.h:141
Definition: xdmad.h:88
Definition: xdmad.h:87
Definition: component_xdmac.h:60
uint32_t mbr_sus
Definition: xdmad.h:149
uint8_t bDstRxIfID
Definition: xdmad.h:122
uint32_t mbr_sa
Definition: xdmad.h:139
eXdmadRC XDMAD_StartTransfer(sXdmad *pXdmad, uint32_t dwChannel)
Start xDMA transfer.
Definition: xdmad.c:399
uint32_t mbr_da
Definition: xdmad.h:188
uint32_t mbr_sa
Definition: xdmad.h:173
uint32_t mbr_ds
Definition: xdmad.h:147
#define XDMACCHID_NUMBER
Xdmac hardware registers.
Definition: component_xdmac.h:59
struct _XdmadChannel sXdmadChannel
eXdmadRC XDMAD_PrepareChannel(sXdmad *pXdmad, uint32_t dwChannel)
Enable clock of the xDMA peripheral, Enable the dma peripheral, configure configuration register for ...
Definition: xdmad.c:265
Definition: xdmad.h:113
Definition: xdmad.h:84
Definition: xdmad.h:96
struct _LinkedListDescriporView0 LinkedListDescriporView0
Structure for storing parameters for DMA view0 that can be performed by the DMA Master transfer.
uint32_t mbr_cfg
Definition: xdmad.h:143
Definition: xdmad.h:97
Definition: xdmad.h:127
uint32_t mbr_cfg
Definition: xdmad.h:190
XdmadTransferCallback fCallback
Definition: xdmad.h:114
uint32_t mbr_nda
Definition: xdmad.h:197
struct _LinkedListDescriporView1 LinkedListDescriporView1
Structure for storing parameters for DMA view1 that can be performed by the DMA Master transfer.
uint32_t XDMAD_AllocateChannel(sXdmad *pXdmad, uint8_t bSrcID, uint8_t bDstID)
Allocate a XDMA channel for upper layer.
Definition: xdmad.c:186
uint8_t bSrcPeriphID
Definition: xdmad.h:117
_XdmadStatus
Definition: xdmad.h:83
eXdmadRC XDMAD_FreeChannel(sXdmad *pXdmad, uint32_t dwChannel)
Free the specified xDMA channel.
Definition: xdmad.c:205
eXdmadRC XDMAD_SetCallback(sXdmad *pXdmad, uint32_t dwChannel, XdmadTransferCallback fCallback, void *pArg)
Set the callback function for xDMA channel transfer.
Definition: xdmad.c:235
Structure for storing parameters for DMA view2 that can be performed by the DMA Master transfer.
Definition: xdmad.h:180
uint32_t mbr_ubc
Definition: xdmad.h:137
uint32_t mbr_ubc
Definition: xdmad.h:160