1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<HTML>
3<HEAD>
4<META http-equiv="Content-Type" content="text/html; charset=windows-1252">
5<META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 7.0.1.0 for Windows">
6<META http-equiv="Content-Style-Type" content="text/css">
7<TITLE>MI_NDmaRecv*</TITLE>
8<LINK rel="stylesheet" href="../../css/nitro.css" type="text/css">
9</HEAD>
10<BODY>
11<H1 align="left">MI_NDmaRecv* <IMG src="../../image/TWL.gif" width="24" height="12" border="0" align=middle></H1>
12<H2>Syntax</H2>
13<DL>
14<DD><CODE>#include &lt;twl/mi.h&gt;</CODE><BR> <BR> <CODE>void MI_NDmaRecv( u32 ndmaNo,</CODE>
15<DT>                    <CODE>volatile const void* src,</CODE>
16<DT>                    <CODE>void*         dest,</CODE>
17<DT>                    <CODE>u32              size );</CODE>
18</DL>
19<DL>
20<DD><CODE>void MI_NDmaRecv_SetUp( u32 ndmaNo,</CODE>
21<DT>                    <CODE>volatile const void* src,</CODE>
22<DT>                    <CODE>void* dest,</CODE>
23<DT>                    <CODE>u32 size );</CODE>
24</DL>
25<DL>
26<DD><CODE>void MI_NDmaRecvAsync( u32 dmaNo,</CODE>
27<DT>                    <CODE>volatile const void* src,</CODE>
28<DT>                    <CODE>void* dest,</CODE>
29<DT>                    <CODE>u32 size,</CODE>
30<DT>                    <CODE>MINDmaCallback callback,</CODE>
31<DT>                    <CODE>void*            arg );</CODE>
32</DL>
33<DL>
34<DD><CODE>void MI_NDmaRecvAsync_SetUp( u32 dmaNo,</CODE>
35<DT>                    <CODE>volatile const void* src,</CODE>
36<DT>                    <CODE>void* dest,</CODE>
37<DT>                    <CODE>u32 size,</CODE>
38<DT>                    <CODE>MINDmaCallback callback,</CODE>
39<DT>                    <CODE>void* arg );</CODE>
40</DL>
41<DL>
42<DD><CODE>void MI_NDmaRecvEx( u32 ndmaNo,</CODE>
43<DT>                    <CODE>volatile const void* src,</CODE>
44<DT>                    <CODE>void* dest,</CODE>
45<DT>                    <CODE>u32 size,</CODE>
46<DT>                    <CODE>MINDmaConfig *config );</CODE>
47</DL>
48<DL>
49<DD><CODE>void MI_NDmaRecvEx_SetUp( u32 ndmaNo,</CODE>
50<DT>                    <CODE>volatile const void* src,</CODE>
51<DT>                    <CODE>void* dest,</CODE>
52<DT>                    <CODE>u32 size,</CODE>
53<DT>                    <CODE>MINDmaConfig *config );</CODE>
54</DL>
55<DL>
56<DD><CODE>void MI_NDmaRecvExAsync( u32 ndmaNo,</CODE>
57<DT>                    <CODE>volatile const void* src,</CODE>
58<DT>                    <CODE>void* dest,</CODE>
59<DT>                    <CODE>u32 size,</CODE>
60<DT>                    <CODE>MINDmaCallback callback,</CODE>
61<DT>                    <CODE>void*      arg ,</CODE>
62<DT>                    <CODE> MINDmaConfig *config</CODE><CODE> );</CODE>
63</DL>
64<DL>
65<DD><CODE>void MI_NDmaRecvExAsync_SetUp( u32 ndmaNo,</CODE>
66<DT>                    <CODE>volatile const void* src,</CODE>
67<DT>                    <CODE>void* dest,</CODE>
68<DT>                    <CODE>u32 size,</CODE>
69<DT>                    <CODE>MINDmaCallback callback,</CODE>
70<DT>                    <CODE>void* arg,</CODE>
71<DT>                    <CODE> MINDmaConfig *config</CODE><CODE> );</CODE>
72</DL>
73<DL>
74<DD><CODE>void MI_NDmaRecv_Dev( u32 ndmaNo,</CODE>
75<DT>                    <CODE>volatile const void* src,</CODE>
76<DT>                    <CODE>void* dest,</CODE>
77<DT>                    <CODE>u32 size,</CODE>
78<DT>                    <CODE>MINDmaDevice dev );</CODE>
79</DL>
80<DL>
81<DD><CODE>void MI_NDmaRecv_Dev_SetUp( u32 ndmaNo,</CODE>
82<DT>                    <CODE>volatile const void* src,</CODE>
83<DT>                    <CODE>void* dest,</CODE>
84<DT>                    <CODE>u32 size,</CODE>
85<DT>                    <CODE>MINDmaDevice dev );</CODE>
86</DL>
87<DL>
88<DD><CODE>void MI_NDmaRecvAsync_Dev( u32 ndmaNo,</CODE>
89<DT>                    <CODE>volatile const void* src,</CODE>
90<DT>                    <CODE>void* dest,</CODE>
91<DT>                    <CODE>u32 size,</CODE>
92<DT>                    <CODE>MINDmaCallback callback,</CODE>
93<DT>                    <CODE>void* arg,</CODE>
94<DT>                    <CODE>MINDmaDevice dev );</CODE>
95</DL>
96<DL>
97<DD><CODE>void MI_NDmaRecvAsync_Dev_SetUp( u32 ndmaNo,</CODE>
98<DT>                    <CODE>volatile const void* src,</CODE>
99<DT>                    <CODE>void* dest,</CODE>
100<DT>                    <CODE>u32 size,</CODE>
101<DT>                    <CODE>MINDmaCallback callback,</CODE>
102<DT>                    <CODE>void* arg,</CODE>
103<DT>                    <CODE>MINDmaDevice dev );</CODE>
104</DL>
105<DL>
106<DD><CODE>void MI_NDmaRecvEx_Dev( u32 ndmaNo,</CODE>
107<DT>                    <CODE>volatile const void* src,</CODE>
108<DT>                    <CODE>void* dest,</CODE>
109<DT>                    <CODE>u32 size,</CODE>
110<DT>                    <CODE>MINDmaConfig *config,</CODE>
111<DT>                    <CODE>MINDmaDevice dev );</CODE>
112</DL>
113<DL>
114<DD><CODE>void MI_NDmaRecvEx_Dev_SetUp( u32 ndmaNo,</CODE>
115<DT>                    <CODE>volatile const void* src,</CODE>
116<DT>                    <CODE>void* dest,</CODE>
117<DT>                    <CODE>u32 size,</CODE>
118<DT>                    <CODE>MINDmaConfig *config,</CODE>
119<DT>                    <CODE>MINDmaDevice dev );</CODE>
120</DL>
121<DL>
122<DD><CODE>void MI_NDmaRecvExAsync_Dev( u32 ndmaNo,</CODE>
123<DT>                    <CODE>volatile const void* src,</CODE>
124<DT>                    <CODE>void* dest,</CODE>
125<DT>                    <CODE>u32 size,</CODE>
126<DT>                    <CODE>MINDmaCallback callback,</CODE>
127<DT>                    <CODE>void* arg,</CODE>
128<DT>                    <CODE>MINDmaConfig *config,</CODE>
129<DT>                    <CODE>MINDmaDevice dev );</CODE>
130</DL>
131<DL>
132<DD><CODE>void MI_NDmaRecvExAsync_Dev_SetUp( u32 ndmaNo,</CODE>
133<DT>                    <CODE>volatile const void* src,</CODE>
134<DT>                    <CODE>void* dest,</CODE>
135<DT>                    <CODE>u32 size,</CODE>
136<DT>                    <CODE>MINDmaCallback callback,</CODE>
137<DT>                    <CODE>void* arg,</CODE>
138<DT>                    <CODE>MINDmaConfig *config,</CODE>
139<DT>                    <CODE>MINDmaDevice dev );</CODE>
140</DL>
141<H2>Arguments</H2>
142<TABLE border="1" width="100%">
143  <TBODY>
144    <TR>
145<TD width="13%"><SPAN class="argument">ndmaNo</SPAN></TD>
146<TD width="87%">DMA channel to use (0-3 within the new DMA)</TD>
147    </TR>
148    <TR>
149<TD width="13%"><SPAN class="argument">src</SPAN></TD>
150<TD width="87%">Transfer source address</TD>
151    </TR>
152    <TR>
153<TD width="13%"><SPAN class="argument">dest</SPAN></TD>
154<TD width="87%">Transfer destination address</TD>
155    </TR>
156    <TR>
157<TD><SPAN class="argument">size</SPAN></TD>
158<TD>Transfer size</TD>
159    </TR>
160    <TR>
161<TD><SPAN class="argument">callback</SPAN></TD>
162<TD>Callback when DMA ends</TD>
163    </TR>
164    <TR>
165<TD><SPAN class="argument">arg</SPAN></TD>
166<TD>Callback argument when DMA ends</TD>
167    </TR>
168    <TR>
169<TD><SPAN class="argument">config</SPAN></TD>
170<TD>DMA configuration</TD>
171    </TR>
172    <TR>
173<TD><SPAN class="argument">dev</SPAN></TD>
174<TD>Device (if starting a device)</TD>
175    </TR>
176  </TBODY>
177</TABLE>
178<H2>Return Values</H2>
179<P>None.</P>
180<H2>Description</H2>
181<P>Uses the new DMA to receive data from the same source transfer address.<BR> (The <CODE>*_SetUp</CODE> functions configure the DMA settings but do not transfer data.)</P>
182<P>The <CODE>MI_NDmaRecv*</CODE> functions uses the TWL's new DMA to repeatedly receive data in word (4-byte) units. Both the transfer source address (<SPAN class="argument">src</SPAN>) and the transfer destination address (<SPAN class="argument">dest</SPAN>) must be 4-byte aligned. The transfer size (<SPAN class="argument">size</SPAN>) needs to be a multiple of 4.</P>
183<P>Specify the new DMA to use as a number between 0 and 3, in <SPAN class="argument">ndmaNo</SPAN>.</P>
184<P>The <CODE>MI_NDmaRecv*</CODE> functions include functions for the separate operations given below.</P>
185<P>-Whether to wait for DMA shutdown inside the function<BR>-Whether to use defaults for advanced DMA settings or user specifications<BR>-Whether to start DMA immediately, or start it based on an interrupt from a peripheral device</P>
186<P> In addition, the <CODE>*_SetUp</CODE> functions only configure the given settings without starting DMA. To start DMA, call the <A href="MI_NDmaRestart.html"><CODE>MI_NDmaRestart</CODE></A> function.<BR>
187</P>
188<TABLE border="1">
189  <TBODY>
190    <TR>
191<TH>Functions</TH>
192<TH>Wait for DMA Completion in the Function</TH>
193<TH>Detailed DMA Settings</TH>
194<TH>Start DMA</TH>
195    </TR>
196    <TR>
197<TD><CODE>MI_NDmaRecv</CODE></TD>
198<TD>Yes</TD>
199<TD>Default</TD>
200<TD>Immediately</TD>
201    </TR>
202    <TR>
203<TD><CODE>MI_NDmaRecvAsync</CODE></TD>
204<TD>No (Async)</TD>
205<TD>Default</TD>
206<TD>Immediately</TD>
207    </TR>
208    <TR>
209<TD><CODE>MI_NDmaRecvEx</CODE></TD>
210<TD>Yes</TD>
211<TD>User-defined</TD>
212<TD>Immediately</TD>
213    </TR>
214    <TR>
215<TD><CODE>MI_NDmaRecvExAsync</CODE></TD>
216<TD>No (Async)</TD>
217<TD>User-defined</TD>
218<TD>Immediately</TD>
219    </TR>
220    <TR>
221<TD><CODE>MI_NDmaRecv_Dev</CODE></TD>
222<TD>Yes</TD>
223<TD>Default</TD>
224<TD>Interrupt from peripheral device</TD>
225    </TR>
226    <TR>
227<TD><CODE>MI_NDmaRecvAsync_Dev</CODE></TD>
228<TD>No (Async)</TD>
229<TD>Default</TD>
230<TD>Interrupt from peripheral device</TD>
231    </TR>
232    <TR>
233<TD><CODE>MI_NDmaRecvEx_Dev</CODE></TD>
234<TD>Yes</TD>
235<TD>User-defined</TD>
236<TD>Interrupt from peripheral device</TD>
237    </TR>
238    <TR>
239<TD><CODE>MI_NDmaRecvExAsync_Dev</CODE></TD>
240<TD>No (Async)</TD>
241<TD>User-defined</TD>
242<TD>Interrupt from peripheral device</TD>
243    </TR>
244  </TBODY>
245</TABLE>
246<P><BR>
247</P>
248<P>The <CODE>Async-type functions</CODE> calls the callback specified in <SPAN class="argument">callback</SPAN> upon DMA completion. The callback is of type <CODE>MINDmaCallback</CODE> (a <code>void</code>-type function that takes one of the <code>void*</code> arguments). The <SPAN class="argument">callback</SPAN> argument is called from the system DMA interrupt handler and therefore is called even if interrupts are prohibited.</P>
249<P>To achieve maximum functionality, it is necessary to understand how to use Async-type functions.<BR>For more information, see the <A href="../dma/MI_DmaCopy.html"><CODE>MI_DmaCopy</CODE></A> function.</P>
250<P>The <SPAN class="argument">config</SPAN> argument is a pointer to the structure that determines the details of the DMA behavior.</P>
251<P>The <SPAN class="argument">dev</SPAN> argument indicates the device when performing DMA upon startup of a peripheral device. For the values that can be set, see <A href="about_ndma.html#MINDmaDevice">&quot;DMA Start Timing&quot; in <B>New DMA: Overview</B></A></P>
252<H2>Internal Operation</H2>
253<P>Uses the new I/O DMA registers.</P>
254<H2>See Also</H2>
255<P><A href="MI_NDmaFill.html"><CODE>MI_NDmaFill*</CODE></A><BR> <A href="MI_NDmaClear.html"><CODE>MI_NDmaClear*</CODE></A><BR> <A href="MI_NDmaSend.html"><CODE>MI_NDmaSend*</CODE></A><BR> <A href="../dma/MI_DmaRecv.html"><CODE>MI_DmaRecv*</CODE></A><BR> <A href="../memory/MI_CpuRecv.html"><CODE>MI_CpuRecv*</CODE></A><BR> <A href="MI_NDmaRestart.html"><CODE>MI_NDmaRestart</CODE></A><BR> <A href="about_ndma.html">New DMA: Overview</A></P>
256<H2>Revision History</H2>
257<P>2008/11/19 Added the link for <CODE>MINDmaDevice</CODE>. <BR>2007/10/31 Added <CODE>_SetUp</CODE>. <BR>2007/10/23 Initial version.</P>
258<hr><p>CONFIDENTIAL</p></body>
259</HTML>