]> rtime.felk.cvut.cz Git - arc.git/blob - arch/ppc/mpc55xx/drivers/Dma.h
merge with default
[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 \r
19 \r
20 \r
21 \r
22 \r
23 #ifndef DMA_H_\r
24 #define DMA_H_\r
25 \r
26 \r
27 #include "Std_Types.h"\r
28 #include "Dma_Cfg.h"\r
29 #include "mpc55xx.h"\r
30 \r
31 \r
32 #if defined(CFG_MPC5606S)\r
33 typedef enum\r
34 {\r
35   DMA_CHANNEL_DISABLED,\r
36 \r
37   DMA_DSPI_0_TX,\r
38   DMA_DSPI_0_RX,\r
39   DMA_DSPI_1_TX,\r
40   DMA_DSPI_1_RX,\r
41 \r
42   DMA_QuadSPI_0_TFFF,\r
43   DMA_QuadSPI_0_RFDF,\r
44 \r
45   DMA_I2C_0_TX,\r
46   DMA_I2C_0_RX,\r
47   DMA_I2C_1_TX,\r
48   DMA_I2C_1_RX,\r
49   DMA_I2C_2_TX,\r
50   DMA_I2C_2_RX,\r
51   DMA_I2C_3_TX,\r
52   DMA_I2C_3_RX,\r
53 \r
54   DMA_EMIOS200_0_FLAG_F0,\r
55   DMA_EMIOS200_0_FLAG_F1,\r
56   DMA_EMIOS200_0_FLAG_F2,\r
57   DMA_EMIOS200_0_FLAG_F3,\r
58   DMA_EMIOS200_0_FLAG_F4,\r
59   DMA_EMIOS200_0_FLAG_F5,\r
60   DMA_EMIOS200_0_FLAG_F6,\r
61   DMA_EMIOS200_0_FLAG_F7,\r
62   DMA_EMIOS200_0_FLAG_F8,\r
63   DMA_EMIOS200_0_FLAG_F9,\r
64   DMA_EMIOS200_0_FLAG_F10,\r
65   DMA_EMIOS200_0_FLAG_F11,\r
66   DMA_EMIOS200_0_FLAG_F12,\r
67   DMA_EMIOS200_0_FLAG_F13,\r
68   DMA_EMIOS200_0_FLAG_F14,\r
69   DMA_EMIOS200_0_FLAG_F15,\r
70   DMA_EMIOS200_1_FLAG_F0,\r
71   DMA_EMIOS200_1_FLAG_F1,\r
72   DMA_EMIOS200_1_FLAG_F2,\r
73   DMA_EMIOS200_1_FLAG_F3,\r
74   DMA_EMIOS200_1_FLAG_F4,\r
75   DMA_EMIOS200_1_FLAG_F5,\r
76   DMA_EMIOS200_1_FLAG_F6,\r
77   DMA_EMIOS200_1_FLAG_F7,\r
78 \r
79   DMA_RESERVED1,\r
80   DMA_RESERVED2,\r
81   DMA_RESERVED3,\r
82   DMA_RESERVED4,\r
83   DMA_RESERVED5,\r
84   DMA_RESERVED6,\r
85   DMA_RESERVED7,\r
86   DMA_RESERVED8,\r
87 \r
88   DMA_SIU_EISR_E1F1,\r
89   DMA_SIU_EISR_E1F2,\r
90   DMA_SIU_EISR_E1F3,\r
91   DMA_SIU_EISR_E1F4,\r
92 \r
93   DMA_ADC,\r
94 \r
95   DMA_RESERVED9,\r
96 \r
97   DMA_DCU,\r
98 \r
99   DMA_RESERVED10,\r
100   DMA_RESERVED11,\r
101 \r
102   DMA_ALWAYS_REQUESTORS1,\r
103   DMA_ALWAYS_REQUESTORS2,\r
104   DMA_ALWAYS_REQUESTORS3,\r
105   DMA_ALWAYS_REQUESTORS4,\r
106   DMA_ALWAYS_REQUESTORS5,\r
107   DMA_ALWAYS_REQUESTORS6,\r
108   DMA_ALWAYS_REQUESTORS7,\r
109   DMA_ALWAYS_REQUESTORS8\r
110 }Dma_MuxChannels;\r
111 \r
112 #else\r
113 typedef enum\r
114 {\r
115   DMA_CHANNEL_DISABLED,\r
116   DMA_SCI_A_COMBTX,\r
117   DMA_SCI_A_COMBRX,\r
118   DMA_SCI_B_COMBTX,\r
119   DMA_SCI_B_COMBRX,\r
120   DMA_SCI_C_COMBTX,\r
121   DMA_SCI_C_COMBRX,\r
122   DMA_SCI_D_COMBTX,\r
123   DMA_SCI_D_COMBRX,\r
124   DMA_SCI_E_COMBTX,\r
125   DMA_SCI_E_COMBRX,\r
126   DMA_SCI_F_COMBTX,\r
127   DMA_SCI_F_COMBRX,\r
128   DMA_SCI_G_COMBTX,\r
129   DMA_SCI_G_COMBRX,\r
130   DMA_SCI_H_COMBTX,\r
131   DMA_SCI_H_COMBRX,\r
132 \r
133   DMA_DSPI_A_SR_TFFF,\r
134   DMA_DSPI_A_SR_RFRD,\r
135   DMA_DSPI_B_SR_TFFF,\r
136   DMA_DSPI_B_SR_RFRD,\r
137   DMA_DSPI_C_SR_TFFF,\r
138   DMA_DSPI_C_SR_RFRD,\r
139   DMA_DSPI_D_SR_TFFF,\r
140   DMA_DSPI_D_SR_RFRD,\r
141 \r
142   DMA_EMIOS200_FLAG_F0,\r
143   DMA_EMIOS200_FLAG_F1,\r
144   DMA_EMIOS200_FLAG_F2,\r
145   DMA_EMIOS200_FLAG_F3,\r
146   DMA_EMIOS200_FLAG_F4,\r
147   DMA_EMIOS200_FLAG_F5,\r
148   DMA_EMIOS200_FLAG_F6,\r
149   DMA_EMIOS200_FLAG_F7,\r
150   DMA_EMIOS200_FLAG_F8,\r
151   DMA_EMIOS200_FLAG_F9,\r
152   DMA_EMIOS200_FLAG_F10,\r
153   DMA_EMIOS200_FLAG_F11,\r
154   DMA_EMIOS200_FLAG_F12,\r
155   DMA_EMIOS200_FLAG_F13,\r
156   DMA_EMIOS200_FLAG_F14,\r
157   DMA_EMIOS200_FLAG_F15,\r
158 \r
159   DMA_IIC_A_TX,\r
160   DMA_IIC_A_RX,\r
161 \r
162   DMA_RESERVED1,\r
163   DMA_RESERVED2,\r
164 \r
165   DMA_SIU_EISR_EIF1,\r
166   DMA_SIU_EISR_EIF2,\r
167   DMA_SIU_EISR_EIF3,\r
168   DMA_SIU_EISR_EIF4,\r
169 \r
170   DMA_EQADC_FISR0_RFDF0,\r
171   DMA_EQADC_FISR0_CFFF0,\r
172   DMA_EQADC_FISR1_RFDF0,\r
173   DMA_EQADC_FISR1_CFFF0,\r
174 \r
175   DMA_MLB_DMA_REQ,\r
176 \r
177   DMA_RESERVED3,\r
178   DMA_RESERVED4,\r
179 \r
180   DMA_ALWAYS_ENABLED1,\r
181   DMA_ALWAYS_ENABLED2,\r
182   DMA_ALWAYS_ENABLED3,\r
183   DMA_ALWAYS_ENABLED4,\r
184   DMA_ALWAYS_ENABLED5,\r
185   DMA_ALWAYS_ENABLED6,\r
186   DMA_ALWAYS_ENABLED7,\r
187   DMA_ALWAYS_ENABLED8\r
188 }Dma_MuxChannels;\r
189 \r
190 #endif\r
191 \r
192 typedef struct\r
193 {\r
194   vuint8_t DMA_CHANNEL_ENABLE;\r
195   vuint8_t DMA_CHANNEL_TRIG_ENABLE;\r
196   Dma_MuxChannels DMA_CHANNEL_SOURCE;\r
197 } Dma_MuxConfigType;\r
198 \r
199 typedef struct\r
200 {\r
201   vuint8_t DMA_CHANNEL_PRIORITY;\r
202   vuint8_t DMA_CHANNEL_PREEMTION_ENABLE;\r
203 }Dma_ChannelConfigType;\r
204 \r
205 typedef enum\r
206 {\r
207   DMA_TRANSFER_SIZE_8BITS,\r
208   DMA_TRANSFER_SIZE_16BITS,\r
209   DMA_TRANSFER_SIZE_32BITS,\r
210   DMA_TRANSFER_SIZE_64BITS,\r
211   DMA_TRANSFER_SIZE_16BYTES_BURST,\r
212   DMA_TRANSFER_SIZE_32BYTES_BURST\r
213 }Dma_DataTranferSizeType;\r
214 \r
215 typedef enum\r
216 {\r
217   DMA_FIXED_PRIORITY_ARBITRATION,\r
218   DMA_ROUND_ROBIN_ARBITRATION\r
219 }Dma_ChannelArbitrationType;\r
220 \r
221 typedef struct\r
222 {\r
223         // 5567 has no Dma Mux, but maybe this should be left in anyway?\r
224 #if defined(CFG_MPC5516) || defined(CFG_MPC5517) || (CFG_MPC5606S)\r
225   const Dma_MuxConfigType          *dmaMuxConfigPtr;\r
226 #endif\r
227   const Dma_ChannelConfigType      *dmaChannelConfigPtr;\r
228   const Dma_ChannelArbitrationType  dmaChannelArbitration;\r
229 }Dma_ConfigType;\r
230 \r
231 extern const Dma_ConfigType DmaConfig [];\r
232 \r
233 \r
234 void Dma_Init (const Dma_ConfigType *ConfigPtr);\r
235 void Dma_ConfigureChannel (Dma_TcdType *tcd, Dma_ChannelType channel);\r
236 void Dma_ConfigureChannelTranferSize (uint32_t nbrOfIterations, Dma_ChannelType channel);\r
237 void Dma_ConfigureChannelSourceCorr (uint32_t sourceCorrection, Dma_ChannelType channel);\r
238 void Dma_ConfigureChannelDestinationCorr (uint32_t destinationCorrection, Dma_ChannelType channel);\r
239 void Dma_ConfigureDestinationAddress (uint32_t destAddr, Dma_ChannelType channel);\r
240 void Dma_ConfigureSourceAddress (uint32_t sourceAddr, Dma_ChannelType channel);\r
241 void Dma_StartChannel (Dma_ChannelType channel);\r
242 void Dma_StopChannel (Dma_ChannelType channel);\r
243 Std_ReturnType Dma_ChannelDone (Dma_ChannelType channel);\r
244 volatile Dma_TcdType * Dma_GetTcd( Dma_ChannelType channel );\r
245 boolean Dma_CheckConfig( void );\r
246 \r
247 #endif /* DMA_H_ */\r