1 /* --COPYRIGHT--,BSD\r
2 * Copyright (c) 2014, Texas Instruments Incorporated\r
3 * All rights reserved.\r
4 *\r
5 * Redistribution and use in source and binary forms, with or without\r
6 * modification, are permitted provided that the following conditions\r
7 * are met:\r
8 *\r
9 * * Redistributions of source code must retain the above copyright\r
10 * notice, this list of conditions and the following disclaimer.\r
11 *\r
12 * * Redistributions in binary form must reproduce the above copyright\r
13 * notice, this list of conditions and the following disclaimer in the\r
14 * documentation and/or other materials provided with the distribution.\r
15 *\r
16 * * Neither the name of Texas Instruments Incorporated nor the names of\r
17 * its contributors may be used to endorse or promote products derived\r
18 * from this software without specific prior written permission.\r
19 *\r
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\r
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\r
27 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\r
29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
31 * --/COPYRIGHT--*/\r
32 //*****************************************************************************\r
33 //\r
34 // dma.h - Driver for the DMA Module.\r
35 //\r
36 //*****************************************************************************\r
37 \r
38 #ifndef __MSP430WARE_DMA_H__\r
39 #define __MSP430WARE_DMA_H__\r
40 \r
41 #include "inc/hw_memmap.h"\r
42 \r
43 #if defined(__MSP430_HAS_DMAX_3__) || defined(__MSP430_HAS_DMAX_6__)\r
44 \r
45 //*****************************************************************************\r
46 //\r
47 // If building with a C++ compiler, make all of the definitions in this header\r
48 // have a C binding.\r
49 //\r
50 //*****************************************************************************\r
51 #ifdef __cplusplus\r
52 extern "C"\r
53 {\r
54 #endif\r
55 \r
56 //******************************************************************************\r
57 //\r
58 // The following is a struct that is passed to DMA_initialize()\r
59 //\r
60 //******************************************************************************\r
61 typedef struct DMA_initializeParam {\r
62 uint8_t channelSelect;\r
63 uint16_t transferModeSelect;\r
64 uint16_t transferSize;\r
65 uint8_t triggerSourceSelect;\r
66 uint8_t transferUnitSelect;\r
67 uint8_t triggerTypeSelect;\r
68 } DMA_initializeParam;\r
69 \r
70 \r
71 //*****************************************************************************\r
72 //\r
73 // The following are values that can be passed to the triggerSourceSelect\r
74 // parameter for functions: DMA_init().\r
75 //\r
76 //*****************************************************************************\r
77 #define DMA_TRIGGERSOURCE_0 (0x00)\r
78 #define DMA_TRIGGERSOURCE_1 (0x01)\r
79 #define DMA_TRIGGERSOURCE_2 (0x02)\r
80 #define DMA_TRIGGERSOURCE_3 (0x03)\r
81 #define DMA_TRIGGERSOURCE_4 (0x04)\r
82 #define DMA_TRIGGERSOURCE_5 (0x05)\r
83 #define DMA_TRIGGERSOURCE_6 (0x06)\r
84 #define DMA_TRIGGERSOURCE_7 (0x07)\r
85 #define DMA_TRIGGERSOURCE_8 (0x08)\r
86 #define DMA_TRIGGERSOURCE_9 (0x09)\r
87 #define DMA_TRIGGERSOURCE_10 (0x0A)\r
88 #define DMA_TRIGGERSOURCE_11 (0x0B)\r
89 #define DMA_TRIGGERSOURCE_12 (0x0C)\r
90 #define DMA_TRIGGERSOURCE_13 (0x0D)\r
91 #define DMA_TRIGGERSOURCE_14 (0x0E)\r
92 #define DMA_TRIGGERSOURCE_15 (0x0F)\r
93 #define DMA_TRIGGERSOURCE_16 (0x10)\r
94 #define DMA_TRIGGERSOURCE_17 (0x11)\r
95 #define DMA_TRIGGERSOURCE_18 (0x12)\r
96 #define DMA_TRIGGERSOURCE_19 (0x13)\r
97 #define DMA_TRIGGERSOURCE_20 (0x14)\r
98 #define DMA_TRIGGERSOURCE_21 (0x15)\r
99 #define DMA_TRIGGERSOURCE_22 (0x16)\r
100 #define DMA_TRIGGERSOURCE_23 (0x17)\r
101 #define DMA_TRIGGERSOURCE_24 (0x18)\r
102 #define DMA_TRIGGERSOURCE_25 (0x19)\r
103 #define DMA_TRIGGERSOURCE_26 (0x1A)\r
104 #define DMA_TRIGGERSOURCE_27 (0x1B)\r
105 #define DMA_TRIGGERSOURCE_28 (0x1C)\r
106 #define DMA_TRIGGERSOURCE_29 (0x1D)\r
107 #define DMA_TRIGGERSOURCE_30 (0x1E)\r
108 #define DMA_TRIGGERSOURCE_31 (0x1F)\r
109 \r
110 //*****************************************************************************\r
111 //\r
112 // The following are values that can be passed to the transferModeSelect\r
113 // parameter for functions: DMA_init().\r
114 //\r
115 //*****************************************************************************\r
116 #define DMA_TRANSFER_SINGLE (DMADT_0)\r
117 #define DMA_TRANSFER_BLOCK (DMADT_1)\r
118 #define DMA_TRANSFER_BURSTBLOCK (DMADT_2)\r
119 #define DMA_TRANSFER_REPEATED_SINGLE (DMADT_4)\r
120 #define DMA_TRANSFER_REPEATED_BLOCK (DMADT_5)\r
121 #define DMA_TRANSFER_REPEATED_BURSTBLOCK (DMADT_6)\r
122 \r
123 //*****************************************************************************\r
124 //\r
125 // The following are values that can be passed to the channelSelect parameter\r
126 // for functions: DMA_init(), DMA_setTransferSize(), DMA_setSrcAddress(),\r
127 // DMA_setDstAddress(), DMA_enableTransfers(), DMA_disableTransfers(),\r
128 // DMA_startTransfer(), DMA_enableInterrupt(), DMA_disableInterrupt(),\r
129 // DMA_getInterruptStatus(), DMA_clearInterrupt(), DMA_NMIAbortStatus(), and\r
130 // DMA_clearNMIAbort().\r
131 //\r
132 //*****************************************************************************\r
133 #define DMA_CHANNEL_0 (0x00)\r
134 #define DMA_CHANNEL_1 (0x10)\r
135 #define DMA_CHANNEL_2 (0x20)\r
136 #define DMA_CHANNEL_3 (0x30)\r
137 #define DMA_CHANNEL_4 (0x40)\r
138 #define DMA_CHANNEL_5 (0x50)\r
139 #define DMA_CHANNEL_6 (0x60)\r
140 #define DMA_CHANNEL_7 (0x70)\r
141 \r
142 //*****************************************************************************\r
143 //\r
144 // The following are values that can be passed to the triggerTypeSelect\r
145 // parameter for functions: DMA_init().\r
146 //\r
147 //*****************************************************************************\r
148 #define DMA_TRIGGER_RISINGEDGE (!(DMALEVEL))\r
149 #define DMA_TRIGGER_HIGH (DMALEVEL)\r
150 \r
151 //*****************************************************************************\r
152 //\r
153 // The following are values that can be passed to the transferUnitSelect\r
154 // parameter for functions: DMA_init().\r
155 //\r
156 //*****************************************************************************\r
157 #define DMA_SIZE_SRCWORD_DSTWORD (!(DMASRCBYTE + DMADSTBYTE))\r
158 #define DMA_SIZE_SRCBYTE_DSTWORD (DMASRCBYTE)\r
159 #define DMA_SIZE_SRCWORD_DSTBYTE (DMADSTBYTE)\r
160 #define DMA_SIZE_SRCBYTE_DSTBYTE (DMASRCBYTE + DMADSTBYTE)\r
161 \r
162 //*****************************************************************************\r
163 //\r
164 // The following are values that can be passed to the directionSelect parameter\r
165 // for functions: DMA_setSrcAddress(), and DMA_setDstAddress().\r
166 //\r
167 //*****************************************************************************\r
168 #define DMA_DIRECTION_UNCHANGED (DMASRCINCR_0)\r
169 #define DMA_DIRECTION_DECREMENT (DMASRCINCR_2)\r
170 #define DMA_DIRECTION_INCREMENT (DMASRCINCR_3)\r
171 \r
172 //*****************************************************************************\r
173 //\r
174 // The following are values that can be passed toThe following are values that\r
175 // can be returned by the DMA_getInterruptStatus() function.\r
176 //\r
177 //*****************************************************************************\r
178 #define DMA_INT_INACTIVE (0x0)\r
179 #define DMA_INT_ACTIVE (DMAIFG)\r
180 \r
181 //*****************************************************************************\r
182 //\r
183 // The following are values that can be passed toThe following are values that\r
184 // can be returned by the DMA_NMIAbortStatus() function.\r
185 //\r
186 //*****************************************************************************\r
187 #define DMA_NOTABORTED (0x0)\r
188 #define DMA_ABORTED (DMAABORT)\r
189 \r
190 //*****************************************************************************\r
191 //\r
192 // Prototypes for the APIs.\r
193 //\r
194 //*****************************************************************************\r
195 extern bool DMA_initialize(uint16_t baseAddress,\r
196 DMA_initializeParam *param);\r
197 \r
198 extern void DMA_setTransferSize(uint16_t baseAddress,\r
199 uint8_t channelSelect,\r
200 uint16_t transferSize);\r
201 \r
202 extern void DMA_setSrcAddress(uint16_t baseAddress,\r
203 uint8_t channelSelect,\r
204 uint32_t srcAddress,\r
205 uint16_t directionSelect);\r
206 \r
207 extern void DMA_setDstAddress(uint16_t baseAddress,\r
208 uint8_t channelSelect,\r
209 uint32_t dstAddress,\r
210 uint16_t directionSelect);\r
211 \r
212 extern void DMA_enableTransfers(uint16_t baseAddress,\r
213 uint8_t channelSelect);\r
214 \r
215 extern void DMA_disableTransfers(uint16_t baseAddress,\r
216 uint8_t channelSelect);\r
217 \r
218 extern void DMA_startTransfer(uint16_t baseAddress,\r
219 uint8_t channelSelect);\r
220 \r
221 extern void DMA_enableInterrupt(uint16_t baseAddress,\r
222 uint8_t channelSelect);\r
223 \r
224 extern void DMA_disableInterrupt(uint16_t baseAddress,\r
225 uint8_t channelSelect);\r
226 \r
227 extern uint16_t DMA_getInterruptStatus(uint16_t baseAddress,\r
228 uint8_t channelSelect);\r
229 \r
230 extern void DMA_clearInterrupt(uint16_t baseAddress,\r
231 uint8_t channelSelect);\r
232 \r
233 extern uint16_t DMA_NMIAbortStatus(uint16_t baseAddress,\r
234 uint8_t channelSelect);\r
235 \r
236 extern void DMA_clearNMIAbort(uint16_t baseAddress,\r
237 uint8_t channelSelect);\r
238 \r
239 extern void DMA_disableTransferDuringReadModifyWrite(uint16_t baseAddress);\r
240 \r
241 extern void DMA_enableTransferDuringReadModifyWrite(uint16_t baseAddress);\r
242 \r
243 extern void DMA_enableRoundRobinPriority(uint16_t baseAddress);\r
244 \r
245 extern void DMA_disableRoundRobinPriority(uint16_t baseAddress);\r
246 \r
247 extern void DMA_enableNMIAbort(uint16_t baseAddress);\r
248 \r
249 extern void DMA_disableNMIAbort(uint16_t baseAddress);\r
250 \r
251 //*****************************************************************************\r
252 //\r
253 // The following are deprecated APIs.\r
254 //\r
255 //*****************************************************************************\r
256 extern bool DMA_init(uint16_t baseAddress,\r
257 uint8_t channelSelect,\r
258 uint16_t transferModeSelect,\r
259 uint16_t transferSize,\r
260 uint8_t triggerSourceSelect,\r
261 uint8_t transferUnitSelect,\r
262 uint8_t triggerTypeSelect);\r
263 \r
264 //*****************************************************************************\r
265 //\r
266 // Mark the end of the C bindings section for C++ compilers.\r
267 //\r
268 //*****************************************************************************\r
269 #ifdef __cplusplus\r
270 }\r
271 #endif\r
272 \r
273 #endif\r
274 #endif // __MSP430WARE_DMA_H__\r