]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained_IAR_Keil/libchip_samv7/include/xdmac.h
Final V8.2.1 release ready for tagging:
[freertos] / FreeRTOS / Demo / CORTEX_M7_SAMV71_Xplained_IAR_Keil / libchip_samv7 / include / xdmac.h
1 /* ----------------------------------------------------------------------------\r
2  *         SAM Software Package License \r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2014, Atmel Corporation\r
5  *\r
6  * All rights reserved.\r
7  * \r
8  * Redistribution and use in source and binary forms, with or without\r
9  * modification, are permitted provided that the following conditions are met:\r
10  *\r
11  * - Redistributions of source code must retain the above copyright notice,\r
12  * this list of conditions and the disclaimer below.\r
13  *\r
14  * Atmel's name may not be used to endorse or promote products derived from\r
15  * this software without specific prior written permission.\r
16  *\r
17  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
20  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
23  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
24  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
25  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
26  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
27  * ----------------------------------------------------------------------------\r
28  */\r
29 \r
30 /** \file */\r
31 \r
32 /** \addtogroup dmac_module Working with DMAC\r
33  *\r
34  * \section Usage\r
35  * <ul>\r
36  * <li> Enable or disable the a DMAC controller with DMAC_Enable() and or DMAC_Disable().</li>\r
37  * <li> Enable or disable %Dma interrupt using DMAC_EnableIt()or DMAC_DisableIt().</li>\r
38  * <li> Get %Dma interrupt status by DMAC_GetStatus() and DMAC_GetInterruptMask().</li>\r
39  * <li> Enable or disable specified %Dma channel with DMAC_EnableChannel() or DMAC_DisableChannel().</li>\r
40  * <li> Get %Dma channel status by DMAC_GetChannelStatus().</li>\r
41  * <li> ControlA and ControlB register is set by DMAC_SetControlA() and DMAC_SetControlB().</li>\r
42  * <li> Configure source and/or destination start address with DMAC_SetSourceAddr() and/or DMAC_SetDestinationAddr().</li>\r
43  * <li> Set %Dma descriptor address using DMAC_SetDescriptorAddr().</li>\r
44  * <li> Set source transfer buffer size with DMAC_SetBufferSize().</li>\r
45  * <li> Configure source and/or destination Picture-In-Picutre mode with DMAC_SetSourcePip() and/or DMAC_SetDestPip().</li>\r
46  * </ul>\r
47  *\r
48  * For more accurate information, please look at the DMAC section of the\r
49  * Datasheet.\r
50  *\r
51  * \sa \ref dmad_module\r
52  *\r
53  * Related files :\n\r
54  * \ref dmac.c\n\r
55  * \ref dmac.h.\n\r
56  *\r
57  */\r
58 \r
59 #ifndef DMAC_H\r
60 #define DMAC_H\r
61 /**@{*/\r
62 \r
63 /*------------------------------------------------------------------------------\r
64  *         Headers\r
65  *----------------------------------------------------------------------------*/\r
66 \r
67 #include "chip.h"\r
68 \r
69 #include <stdint.h>\r
70 \r
71 /*------------------------------------------------------------------------------\r
72  *         Definitions\r
73  *----------------------------------------------------------------------------*/\r
74 \r
75 /** \addtogroup dmac_defines DMAC Definitions\r
76  *      @{\r
77  */\r
78 /** Number of DMA channels */\r
79 #define XDMAC_CONTROLLER_NUM            1\r
80 /** Number of DMA channels */\r
81 #define XDMAC_CHANNEL_NUM               24\r
82 /** Max DMA single transfer size */\r
83 #define XDMAC_MAX_BT_SIZE               0xFFFF\r
84 /**     @}*/\r
85 \r
86 /*----------------------------------------------------------------------------\r
87  *         Macro\r
88  *----------------------------------------------------------------------------*/\r
89 #define XDMA_GET_DATASIZE(size) ((size==0)? XDMAC_CC_DWIDTH_BYTE : \\r
90                                 ((size==1)? XDMAC_CC_DWIDTH_HALFWORD : \\r
91                                 (XDMAC_CC_DWIDTH_WORD  )))\r
92 #define XDMA_GET_CC_SAM(s)      ((s==0)? XDMAC_CC_SAM_FIXED_AM : \\r
93                                 ((s==1)? XDMAC_CC_SAM_INCREMENTED_AM : \\r
94                                 ((s==2)? XDMAC_CC_SAM_UBS_AM : XDMAC_CC_SAM_UBS_DS_AM )))\r
95 #define XDMA_GET_CC_DAM(d)      ((d==0)? XDMAC_CC_DAM_FIXED_AM : \\r
96                                 ((d==1)? XDMAC_CC_DAM_INCREMENTED_AM : \\r
97                                 ((d==2)? XDMAC_CC_DAM_UBS_AM : XDMAC_CC_DAM_UBS_DS_AM )))\r
98 #define XDMA_GET_CC_MEMSET(m)   ((m==0)? XDMAC_CC_MEMSET_NORMAL_MODE : XDMAC_CC_MEMSET_HW_MODE)\r
99 \r
100 /*------------------------------------------------------------------------------\r
101  *         Data structs\r
102  *----------------------------------------------------------------------------*/\r
103 \r
104 /** \addtogroup dmac_struct DMAC Data Structs\r
105  *      @{\r
106  */\r
107 \r
108 /*------------------------------------------------------------------------------\r
109  *         Global functions\r
110  *------------------------------------------------------------------------------*/\r
111 /** \addtogroup dmac_functions\r
112  *      @{\r
113  */\r
114 \r
115 #ifdef __cplusplus\r
116  extern "C" {\r
117 #endif\r
118 \r
119 extern uint32_t XDMAC_GetType( Xdmac *pXdmac);\r
120 extern uint32_t XDMAC_GetConfig( Xdmac *pXdmac);\r
121 extern uint32_t XDMAC_GetArbiter( Xdmac *pXdmac);\r
122 extern void XDMAC_EnableGIt (Xdmac *pXdmac, uint32_t dwInteruptMask );\r
123 extern void XDMAC_DisableGIt (Xdmac *pXdmac, uint32_t dwInteruptMask );\r
124 extern uint32_t XDMAC_GetGItMask( Xdmac *pXdmac );\r
125 extern uint32_t XDMAC_GetGIsr( Xdmac *pXdmac );\r
126 extern uint32_t XDMAC_GetMaskedGIsr( Xdmac *pXdmac );\r
127 extern void XDMAC_EnableChannel( Xdmac *pXdmac, uint8_t channel );\r
128 extern void XDMAC_EnableChannels( Xdmac *pXdmac, uint8_t bmChannels );\r
129 extern void XDMAC_DisableChannel( Xdmac *pXdmac, uint8_t channel );\r
130 extern void XDMAC_DisableChannels( Xdmac *pXdmac, uint8_t bmChannels );\r
131 extern uint32_t XDMAC_GetGlobalChStatus(Xdmac *pXdmac);\r
132 extern void XDMAC_SuspendReadChannel( Xdmac *pXdmac, uint8_t channel );\r
133 extern void XDMAC_SuspendWriteChannel( Xdmac *pXdmac, uint8_t channel );\r
134 extern void XDMAC_SuspendReadWriteChannel( Xdmac *pXdmac, uint8_t channel );\r
135 extern void XDMAC_ResumeReadWriteChannel( Xdmac *pXdmac, uint8_t channel );\r
136 extern void XDMAC_SoftwareTransferReq(Xdmac *pXdmac, uint8_t channel);\r
137 extern uint32_t XDMAC_GetSoftwareTransferStatus(Xdmac *pXdmac);\r
138 extern void XDMAC_SoftwareFlushReq(Xdmac *pXdmac, uint8_t channel);\r
139 extern void XDMAC_EnableChannelIt (Xdmac *pXdmac, uint8_t channel, uint32_t dwInteruptMask );\r
140 extern void XDMAC_DisableChannelIt (Xdmac *pXdmac, uint8_t channel, uint32_t dwInteruptMask );\r
141 extern uint32_t XDMAC_GetChannelItMask (Xdmac *pXdmac, uint8_t channel);\r
142 extern uint32_t XDMAC_GetChannelIsr (Xdmac *pXdmac, uint8_t channel);\r
143 extern uint32_t XDMAC_GetMaskChannelIsr (Xdmac *pXdmac, uint8_t channel);\r
144 extern void XDMAC_SetSourceAddr(Xdmac *pXdmac, uint8_t channel, uint32_t addr);\r
145 extern void XDMAC_SetDestinationAddr(Xdmac *pXdmac, uint8_t channel, uint32_t addr);\r
146 extern void XDMAC_SetDescriptorAddr(Xdmac *pXdmac, uint8_t channel, uint32_t addr, uint32_t ndaif);\r
147 extern void XDMAC_SetDescriptorControl(Xdmac *pXdmac, uint8_t channel, uint32_t config);\r
148 extern void XDMAC_SetMicroblockControl(Xdmac *pXdmac, uint8_t channel, uint32_t ublen);\r
149 extern void XDMAC_SetBlockControl(Xdmac *pXdmac, uint8_t channel, uint32_t blen);\r
150 extern void XDMAC_SetChannelConfig(Xdmac *pXdmac, uint8_t channel, uint32_t config);\r
151 extern uint32_t XDMAC_GetChannelConfig(Xdmac *pXdmac, uint8_t channel);\r
152 extern void XDMAC_SetDataStride_MemPattern(Xdmac *pXdmac, uint8_t channel, uint32_t dds_msp);\r
153 extern void XDMAC_SetSourceMicroBlockStride(Xdmac *pXdmac, uint8_t channel, uint32_t subs);\r
154 extern void XDMAC_SetDestinationMicroBlockStride(Xdmac *pXdmac, uint8_t channel, uint32_t dubs);\r
155 extern uint32_t XDMAC_GetChDestinationAddr(Xdmac *pXdmac, uint8_t channel);\r
156 #ifdef __cplusplus\r
157 }\r
158 #endif\r
159 \r
160 /**     @}*/\r
161 /**@}*/\r
162 #endif //#ifndef DMAC_H\r
163 \r