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 <twl/mi.h></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">"DMA Start Timing" 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>