]> rtime.felk.cvut.cz Git - arc.git/blob - arch/ppc/mpc55xx/drivers/Dma.h
Added Dma_DeInit()
[arc.git] / arch / ppc / mpc55xx / drivers / Dma.h
1 /* -------------------------------- Arctic Core ------------------------------\r
2  * Arctic Core - the open source AUTOSAR platform http://arccore.com\r
3  *\r
4  * Copyright (C) 2009  ArcCore AB <contact@arccore.com>\r
5  *\r
6  * This source code is free software; you can redistribute it and/or modify it\r
7  * under the terms of the GNU General Public License version 2 as published by the\r
8  * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.\r
9  *\r
10  * This program is distributed in the hope that it will be useful, but\r
11  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
12  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\r
13  * for more details.\r
14  * -------------------------------- Arctic Core ------------------------------*/\r
15 \r
16 \r
17 /*\r
18  * Freescale uses two flavors for DMA.\r
19  * 1. eDMA\r
20  * 2. eDMA + DMA_MUX\r
21  *\r
22  * 1. eDMA only (MPC5557, etc)\r
23  *   The "DMA Request Assignments" are used and configured in Dma_Cfg.h using Dma_ChannelType.\r
24  *\r
25  * 2. eDMA + DMA_MUX  (MPC551x , MPC5668, etc )\r
26  *   The eDMA + DMA_MUX the "DMA Request Assignments" are just mappings from the DMA_MUX.\r
27  *   The file Dma.h contains the Dma_MuxChannels\r
28  *\r
29  *\r
30  *  eDMA+DMA_MUX\r
31  *    MPC551x\r
32  *    MPC5668\r
33  *    MPC5605B,MPC5606B,MPC5607B\r
34  *\r
35  *  eDMA\r
36  *    MPC5567\r
37  *\r
38  *  NO DMA\r
39  *    MPC5604B\r
40  *\r
41  */\r
42 \r
43 #ifndef DMA_H_\r
44 #define DMA_H_\r
45 \r
46 \r
47 #include "Std_Types.h"\r
48 #include "Dma_Cfg.h"\r
49 #include "mpc55xx.h"\r
50 \r
51 #if defined(CFG_MPC5516) || defined(CFG_MPC5517) || (CFG_MPC5606S) || defined(CFG_MPC5668)\r
52 #if !defined(CFG_DMA_MUX)\r
53 #define CFG_DMA_MUX\r
54 #endif\r
55 #endif\r
56 \r
57 #if defined(CFG_DMA_MUX)\r
58 \r
59 #if defined(CFG_MPC5606S)\r
60 typedef enum\r
61 {\r
62   DMA_CHANNEL_DISABLED,\r
63 \r
64   DMA_DSPI_0_TX,\r
65   DMA_DSPI_0_RX,\r
66   DMA_DSPI_1_TX,\r
67   DMA_DSPI_1_RX,\r
68 \r
69   DMA_QuadSPI_0_TFFF,\r
70   DMA_QuadSPI_0_RFDF,\r
71 \r
72   DMA_I2C_0_TX,\r
73   DMA_I2C_0_RX,\r
74   DMA_I2C_1_TX,\r
75   DMA_I2C_1_RX,\r
76   DMA_I2C_2_TX,\r
77   DMA_I2C_2_RX,\r
78   DMA_I2C_3_TX,\r
79   DMA_I2C_3_RX,\r
80 \r
81   DMA_EMIOS200_0_FLAG_F0,\r
82   DMA_EMIOS200_0_FLAG_F1,\r
83   DMA_EMIOS200_0_FLAG_F2,\r
84   DMA_EMIOS200_0_FLAG_F3,\r
85   DMA_EMIOS200_0_FLAG_F4,\r
86   DMA_EMIOS200_0_FLAG_F5,\r
87   DMA_EMIOS200_0_FLAG_F6,\r
88   DMA_EMIOS200_0_FLAG_F7,\r
89   DMA_EMIOS200_0_FLAG_F8,\r
90   DMA_EMIOS200_0_FLAG_F9,\r
91   DMA_EMIOS200_0_FLAG_F10,\r
92   DMA_EMIOS200_0_FLAG_F11,\r
93   DMA_EMIOS200_0_FLAG_F12,\r
94   DMA_EMIOS200_0_FLAG_F13,\r
95   DMA_EMIOS200_0_FLAG_F14,\r
96   DMA_EMIOS200_0_FLAG_F15,\r
97   DMA_EMIOS200_1_FLAG_F0,\r
98   DMA_EMIOS200_1_FLAG_F1,\r
99   DMA_EMIOS200_1_FLAG_F2,\r
100   DMA_EMIOS200_1_FLAG_F3,\r
101   DMA_EMIOS200_1_FLAG_F4,\r
102   DMA_EMIOS200_1_FLAG_F5,\r
103   DMA_EMIOS200_1_FLAG_F6,\r
104   DMA_EMIOS200_1_FLAG_F7,\r
105 \r
106   DMA_RESERVED1,\r
107   DMA_RESERVED2,\r
108   DMA_RESERVED3,\r
109   DMA_RESERVED4,\r
110   DMA_RESERVED5,\r
111   DMA_RESERVED6,\r
112   DMA_RESERVED7,\r
113   DMA_RESERVED8,\r
114 \r
115   DMA_SIU_EISR_E1F1,\r
116   DMA_SIU_EISR_E1F2,\r
117   DMA_SIU_EISR_E1F3,\r
118   DMA_SIU_EISR_E1F4,\r
119 \r
120   DMA_ADC,\r
121 \r
122   DMA_RESERVED9,\r
123 \r
124   DMA_DCU,\r
125 \r
126   DMA_RESERVED10,\r
127   DMA_RESERVED11,\r
128 \r
129   DMA_ALWAYS_REQUESTORS1,\r
130   DMA_ALWAYS_REQUESTORS2,\r
131   DMA_ALWAYS_REQUESTORS3,\r
132   DMA_ALWAYS_REQUESTORS4,\r
133   DMA_ALWAYS_REQUESTORS5,\r
134   DMA_ALWAYS_REQUESTORS6,\r
135   DMA_ALWAYS_REQUESTORS7,\r
136   DMA_ALWAYS_REQUESTORS8\r
137 }Dma_MuxChannels;\r
138 \r
139 #elif defined(CFG_MPC5668)\r
140 \r
141 /* Table 22-4. DMA Source Configuration */\r
142 \r
143 typedef enum\r
144 {\r
145         DMA_CHANNEL_DISABLED,   /* 0 */\r
146         DMA_CHANNEL_RESERVED,\r
147         DMA_SCI_A_COMBTX,\r
148         DMA_SCI_A_COMBRX,\r
149         DMA_SCI_B_COMBTX,\r
150         DMA_SCI_B_COMBRX,\r
151         DMA_SCI_C_COMBTX,\r
152         DMA_SCI_C_COMBRX,\r
153         DMA_SCI_D_COMBTX,\r
154         DMA_SCI_D_COMBRX,\r
155         DMA_SCI_E_COMBTX,\r
156         DMA_SCI_E_COMBRX,\r
157         DMA_SCI_F_COMBTX,\r
158         DMA_SCI_F_COMBRX,\r
159         DMA_SCI_G_COMBTX,\r
160         DMA_SCI_G_COMBRX,\r
161         DMA_SCI_H_COMBTX,\r
162         DMA_SCI_H_COMBRX,\r
163 \r
164         DMA_DSPI_A_SR_TFFF,  /* 0x12 */\r
165         DMA_DSPI_A_SR_RFRD,\r
166         DMA_DSPI_B_SR_TFFF,\r
167         DMA_DSPI_B_SR_RFRD,\r
168         DMA_DSPI_E_SR_TFFF,\r
169         DMA_DSPI_E_SR_RFRD,\r
170         DMA_DSPI_F_SR_TFFF,\r
171         DMA_DSPI_F_SR_RFRD,\r
172 \r
173         DMA_EMIOS200_FLAG_F0, /* 0x1a */\r
174         DMA_EMIOS200_FLAG_F1,\r
175         DMA_EMIOS200_FLAG_F2,\r
176         DMA_EMIOS200_FLAG_F3,\r
177         DMA_EMIOS200_FLAG_F4,\r
178         DMA_EMIOS200_FLAG_F5,\r
179         DMA_EMIOS200_FLAG_F6,\r
180         DMA_EMIOS200_FLAG_F7,\r
181         DMA_EMIOS200_FLAG_F8,\r
182         DMA_EMIOS200_FLAG_F9,\r
183         DMA_EMIOS200_FLAG_F10,\r
184         DMA_EMIOS200_FLAG_F11,\r
185         DMA_EMIOS200_FLAG_F12,\r
186         DMA_EMIOS200_FLAG_F13,\r
187         DMA_EMIOS200_FLAG_F14,\r
188         DMA_EMIOS200_FLAG_F15,\r
189 \r
190         DMA_IIC_A_TX,  /* 0x2a */\r
191         DMA_IIC_A_RX,\r
192         DMA_IIC_B_TX,\r
193         DMA_IIC_B_RX,\r
194 \r
195         DMA_SIU_EISR_EIF0, /* 0x2e */\r
196         DMA_SIU_EISR_EIF1,\r
197 \r
198         DMA_IIC_C_TX, /* 0x30 */\r
199         DMA_IIC_C_RX,\r
200 \r
201         DMA_ADC_A,\r
202 \r
203         DMA_IIC_D_TX, /* 0x33 */\r
204         DMA_IIC_D_RX,\r
205 \r
206         DMA_SCI_J_COMBTX, /* 0x35 */\r
207         DMA_SCI_J_COMBRX,\r
208         DMA_SCI_K_COMBTX,\r
209         DMA_SCI_K_COMBRX,\r
210         DMA_SCI_L_COMBTX,\r
211         DMA_SCI_L_COMBRX,\r
212         DMA_SCI_M_COMBTX,\r
213         DMA_SCI_M_COMBRX,\r
214 \r
215         DMA_ALWAYS_ENABLED_0, /* 0x3d */\r
216         DMA_ALWAYS_ENABLED_1,\r
217         DMA_ALWAYS_ENABLED_2,\r
218 } Dma_MuxChannels;\r
219 \r
220 #elif  defined(CFG_MPC5516) || defined(CFG_MPC5517)\r
221 /* MPC551x "Table 13-4. DMA Source Configuration" */\r
222 \r
223 typedef enum\r
224 {\r
225   DMA_CHANNEL_DISABLED,\r
226   DMA_SCI_A_COMBTX,\r
227   DMA_SCI_A_COMBRX,\r
228   DMA_SCI_B_COMBTX,\r
229   DMA_SCI_B_COMBRX,\r
230   DMA_SCI_C_COMBTX,\r
231   DMA_SCI_C_COMBRX,\r
232   DMA_SCI_D_COMBTX,\r
233   DMA_SCI_D_COMBRX,\r
234   DMA_SCI_E_COMBTX,\r
235   DMA_SCI_E_COMBRX,\r
236   DMA_SCI_F_COMBTX,\r
237   DMA_SCI_F_COMBRX,\r
238   DMA_SCI_G_COMBTX,\r
239   DMA_SCI_G_COMBRX,\r
240   DMA_SCI_H_COMBTX,\r
241   DMA_SCI_H_COMBRX,\r
242 \r
243   DMA_DSPI_A_SR_TFFF,\r
244   DMA_DSPI_A_SR_RFRD,\r
245   DMA_DSPI_B_SR_TFFF,\r
246   DMA_DSPI_B_SR_RFRD,\r
247   DMA_DSPI_C_SR_TFFF,\r
248   DMA_DSPI_C_SR_RFRD,\r
249   DMA_DSPI_D_SR_TFFF,\r
250   DMA_DSPI_D_SR_RFRD,\r
251 \r
252   DMA_EMIOS200_FLAG_F0,\r
253   DMA_EMIOS200_FLAG_F1,\r
254   DMA_EMIOS200_FLAG_F2,\r
255   DMA_EMIOS200_FLAG_F3,\r
256   DMA_EMIOS200_FLAG_F4,\r
257   DMA_EMIOS200_FLAG_F5,\r
258   DMA_EMIOS200_FLAG_F6,\r
259   DMA_EMIOS200_FLAG_F7,\r
260   DMA_EMIOS200_FLAG_F8,\r
261   DMA_EMIOS200_FLAG_F9,\r
262   DMA_EMIOS200_FLAG_F10,\r
263   DMA_EMIOS200_FLAG_F11,\r
264   DMA_EMIOS200_FLAG_F12,\r
265   DMA_EMIOS200_FLAG_F13,\r
266   DMA_EMIOS200_FLAG_F14,\r
267   DMA_EMIOS200_FLAG_F15,\r
268 \r
269   DMA_IIC_A_TX,\r
270   DMA_IIC_A_RX,\r
271 \r
272   DMA_RESERVED1,\r
273   DMA_RESERVED2,\r
274 \r
275   DMA_SIU_EISR_EIF1,\r
276   DMA_SIU_EISR_EIF2,\r
277   DMA_SIU_EISR_EIF3,\r
278   DMA_SIU_EISR_EIF4,\r
279 \r
280   DMA_EQADC_FISR0_RFDF0,\r
281   DMA_EQADC_FISR0_CFFF0,\r
282   DMA_EQADC_FISR1_RFDF0,\r
283   DMA_EQADC_FISR1_CFFF0,\r
284 \r
285   DMA_MLB_DMA_REQ,\r
286 \r
287   DMA_RESERVED3,\r
288   DMA_RESERVED4,\r
289 \r
290   DMA_ALWAYS_ENABLED1,\r
291   DMA_ALWAYS_ENABLED2,\r
292   DMA_ALWAYS_ENABLED3,\r
293   DMA_ALWAYS_ENABLED4,\r
294   DMA_ALWAYS_ENABLED5,\r
295   DMA_ALWAYS_ENABLED6,\r
296   DMA_ALWAYS_ENABLED7,\r
297   DMA_ALWAYS_ENABLED8\r
298 }Dma_MuxChannels;\r
299 \r
300 #endif\r
301 #endif\r
302 \r
303 \r
304 #if defined(CFG_DMA_MUX)\r
305 typedef struct\r
306 {\r
307   vuint8_t DMA_CHANNEL_ENABLE;\r
308   vuint8_t DMA_CHANNEL_TRIG_ENABLE;\r
309   Dma_MuxChannels DMA_CHANNEL_SOURCE;\r
310 } Dma_MuxConfigType;\r
311 #endif\r
312 \r
313 typedef struct\r
314 {\r
315   vuint8_t DMA_CHANNEL_PRIORITY;\r
316   vuint8_t DMA_CHANNEL_PREEMTION_ENABLE;\r
317 }Dma_ChannelConfigType;\r
318 \r
319 typedef enum\r
320 {\r
321   DMA_TRANSFER_SIZE_8BITS,\r
322   DMA_TRANSFER_SIZE_16BITS,\r
323   DMA_TRANSFER_SIZE_32BITS,\r
324   DMA_TRANSFER_SIZE_64BITS,\r
325   DMA_TRANSFER_SIZE_16BYTES_BURST,\r
326   DMA_TRANSFER_SIZE_32BYTES_BURST\r
327 }Dma_DataTranferSizeType;\r
328 \r
329 typedef enum\r
330 {\r
331   DMA_FIXED_PRIORITY_ARBITRATION,\r
332   DMA_ROUND_ROBIN_ARBITRATION\r
333 }Dma_ChannelArbitrationType;\r
334 \r
335 typedef struct\r
336 {\r
337         // 5567 has no Dma Mux, but maybe this should be left in anyway?\r
338 #if defined(CFG_DMA_MUX)\r
339   const Dma_MuxConfigType          *dmaMuxConfigPtr;\r
340 #endif\r
341   const Dma_ChannelConfigType      *dmaChannelConfigPtr;\r
342   const Dma_ChannelArbitrationType  dmaChannelArbitration;\r
343 }Dma_ConfigType;\r
344 \r
345 extern const Dma_ConfigType DmaConfig [];\r
346 \r
347 \r
348 void Dma_Init (const Dma_ConfigType *ConfigPtr);\r
349 void Dma_DeInit (void );\r
350 void Dma_ConfigureChannel (Dma_TcdType *tcd, Dma_ChannelType channel);\r
351 void Dma_ConfigureChannelTranferSize (uint32_t nbrOfIterations, Dma_ChannelType channel);\r
352 void Dma_ConfigureChannelSourceCorr (uint32_t sourceCorrection, Dma_ChannelType channel);\r
353 void Dma_ConfigureChannelDestinationCorr (uint32_t destinationCorrection, Dma_ChannelType channel);\r
354 void Dma_ConfigureDestinationAddress (uint32_t destAddr, Dma_ChannelType channel);\r
355 void Dma_ConfigureSourceAddress (uint32_t sourceAddr, Dma_ChannelType channel);\r
356 void Dma_StartChannel (Dma_ChannelType channel);\r
357 void Dma_StopChannel (Dma_ChannelType channel);\r
358 Std_ReturnType Dma_ChannelDone (Dma_ChannelType channel);\r
359 volatile Dma_TcdType * Dma_GetTcd( Dma_ChannelType channel );\r
360 boolean Dma_CheckConfig( void );\r
361 \r
362 #endif /* DMA_H_ */\r