MCUXpresso_MIMXRT1021xxxxx/docs/MCUXpresso SDK API Referenc.../a00082.html

1086 lines
67 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>MCUXpresso SDK API Reference Manual: SAI EDMA Driver</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="fs_logo.gif"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">MCUXpresso SDK API Reference Manual
&#160;<span id="projectnumber">Rev 2.15.000</span>
</div>
<div id="projectbrief">NXP Semiconductors</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>API&#160;Reference</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('a00082.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> </div>
<div class="headertitle">
<div class="title">SAI EDMA Driver<div class="ingroups"><a class="el" href="a00277.html">SAI: Serial Audio Interface</a></div></div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Overview</h2>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:a00533"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a00533">sai_edma_handle</a></td></tr>
<tr class="memdesc:a00533"><td class="mdescLeft">&#160;</td><td class="mdescRight">SAI DMA transfer handle, users should not touch the content of the handle. <a href="a00082.html#a00533">More...</a><br/></td></tr>
<tr class="separator:a00533"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:gaeb6ca21880d8cd8f5f954d38bfa73d63"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaeb6ca21880d8cd8f5f954d38bfa73d63"></a>
typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#gaeb6ca21880d8cd8f5f954d38bfa73d63">sai_edma_callback_t</a> )(I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle, <a class="el" href="a00260.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a> status, void *userData)</td></tr>
<tr class="memdesc:gaeb6ca21880d8cd8f5f954d38bfa73d63"><td class="mdescLeft">&#160;</td><td class="mdescRight">SAI eDMA transfer callback function for finish and error. <br/></td></tr>
<tr class="separator:gaeb6ca21880d8cd8f5f954d38bfa73d63"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad6edfb066c228d8b519ac8990150cd01"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad6edfb066c228d8b519ac8990150cd01"></a>
typedef enum <a class="el" href="a00082.html#ga399d35c32a4aec53e8b62a256d528308">_sai_edma_interleave</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#gad6edfb066c228d8b519ac8990150cd01">sai_edma_interleave_t</a></td></tr>
<tr class="memdesc:gad6edfb066c228d8b519ac8990150cd01"><td class="mdescLeft">&#160;</td><td class="mdescRight">sai interleave type <br/></td></tr>
<tr class="separator:gad6edfb066c228d8b519ac8990150cd01"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga399d35c32a4aec53e8b62a256d528308"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ga399d35c32a4aec53e8b62a256d528308">_sai_edma_interleave</a> { <br/>
&#160;&#160;<a class="el" href="a00082.html#gga399d35c32a4aec53e8b62a256d528308ad6dca42e6eb6f605c9628cc2a5eabfd5">kSAI_EDMAInterleavePerChannelSample</a>,
<br/>
&#160;&#160;<a class="el" href="a00082.html#gga399d35c32a4aec53e8b62a256d528308abe869d52b4b9f0883e963214b470d28e">kSAI_EDMAInterleavePerChannelBlock</a>
<br/>
}</td></tr>
<tr class="memdesc:ga399d35c32a4aec53e8b62a256d528308"><td class="mdescLeft">&#160;</td><td class="mdescRight">sai interleave type <a href="a00082.html#ga399d35c32a4aec53e8b62a256d528308">More...</a><br/></td></tr>
<tr class="separator:ga399d35c32a4aec53e8b62a256d528308"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
Driver version</h2></td></tr>
<tr class="memitem:gadec154552382f7b68bce82ce829f3911"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gadec154552382f7b68bce82ce829f3911"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#gadec154552382f7b68bce82ce829f3911">FSL_SAI_EDMA_DRIVER_VERSION</a>&#160;&#160;&#160;(<a class="el" href="a00260.html#ga812138aa3315b0c6953c1a26130bcc37">MAKE_VERSION</a>(2, 7, 0))</td></tr>
<tr class="memdesc:gadec154552382f7b68bce82ce829f3911"><td class="mdescLeft">&#160;</td><td class="mdescRight">Version 2.7.0. <br/></td></tr>
<tr class="separator:gadec154552382f7b68bce82ce829f3911"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
eDMA Transactional</h2></td></tr>
<tr class="memitem:ga84f148e1d3fe186ce6604d637f89c2c1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ga84f148e1d3fe186ce6604d637f89c2c1">SAI_TransferTxCreateHandleEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle, <a class="el" href="a00082.html#gaeb6ca21880d8cd8f5f954d38bfa73d63">sai_edma_callback_t</a> callback, void *userData, <a class="el" href="a00021.html#ga00acb9562f35755920b20fde1bc9973e">edma_handle_t</a> *txDmaHandle)</td></tr>
<tr class="memdesc:ga84f148e1d3fe186ce6604d637f89c2c1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes the SAI eDMA handle. <a href="#ga84f148e1d3fe186ce6604d637f89c2c1">More...</a><br/></td></tr>
<tr class="separator:ga84f148e1d3fe186ce6604d637f89c2c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga44a719a507630fdcc25ba93690098a89"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ga44a719a507630fdcc25ba93690098a89">SAI_TransferRxCreateHandleEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle, <a class="el" href="a00082.html#gaeb6ca21880d8cd8f5f954d38bfa73d63">sai_edma_callback_t</a> callback, void *userData, <a class="el" href="a00021.html#ga00acb9562f35755920b20fde1bc9973e">edma_handle_t</a> *rxDmaHandle)</td></tr>
<tr class="memdesc:ga44a719a507630fdcc25ba93690098a89"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes the SAI Rx eDMA handle. <a href="#ga44a719a507630fdcc25ba93690098a89">More...</a><br/></td></tr>
<tr class="separator:ga44a719a507630fdcc25ba93690098a89"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gada84bfce187319b89b6e89c802164478"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#gada84bfce187319b89b6e89c802164478">SAI_TransferSetInterleaveType</a> (<a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle, <a class="el" href="a00082.html#gad6edfb066c228d8b519ac8990150cd01">sai_edma_interleave_t</a> interleaveType)</td></tr>
<tr class="memdesc:gada84bfce187319b89b6e89c802164478"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes the SAI interleave type. <a href="#gada84bfce187319b89b6e89c802164478">More...</a><br/></td></tr>
<tr class="separator:gada84bfce187319b89b6e89c802164478"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5295038a021787aef619bdd9f96981da"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ga5295038a021787aef619bdd9f96981da">SAI_TransferTxSetConfigEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle, <a class="el" href="a00061.html#ga1e798fe5217335d01709af9f4855e0dc">sai_transceiver_t</a> *saiConfig)</td></tr>
<tr class="memdesc:ga5295038a021787aef619bdd9f96981da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Configures the SAI Tx. <a href="#ga5295038a021787aef619bdd9f96981da">More...</a><br/></td></tr>
<tr class="separator:ga5295038a021787aef619bdd9f96981da"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaed5d72de0d0aa0ac71de3222924e4aa7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#gaed5d72de0d0aa0ac71de3222924e4aa7">SAI_TransferRxSetConfigEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle, <a class="el" href="a00061.html#ga1e798fe5217335d01709af9f4855e0dc">sai_transceiver_t</a> *saiConfig)</td></tr>
<tr class="memdesc:gaed5d72de0d0aa0ac71de3222924e4aa7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Configures the SAI Rx. <a href="#gaed5d72de0d0aa0ac71de3222924e4aa7">More...</a><br/></td></tr>
<tr class="separator:gaed5d72de0d0aa0ac71de3222924e4aa7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7a2c125e1f975c9f718dcb820ac46f63"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00260.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ga7a2c125e1f975c9f718dcb820ac46f63">SAI_TransferSendEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle, <a class="el" href="a00061.html#ga930ac1cfb546457c3e1ebf70151a6212">sai_transfer_t</a> *xfer)</td></tr>
<tr class="memdesc:ga7a2c125e1f975c9f718dcb820ac46f63"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a non-blocking SAI transfer using DMA. <a href="#ga7a2c125e1f975c9f718dcb820ac46f63">More...</a><br/></td></tr>
<tr class="separator:ga7a2c125e1f975c9f718dcb820ac46f63"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9060fb028d5a24d8763066981b079900"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00260.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ga9060fb028d5a24d8763066981b079900">SAI_TransferReceiveEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle, <a class="el" href="a00061.html#ga930ac1cfb546457c3e1ebf70151a6212">sai_transfer_t</a> *xfer)</td></tr>
<tr class="memdesc:ga9060fb028d5a24d8763066981b079900"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a non-blocking SAI receive using eDMA. <a href="#ga9060fb028d5a24d8763066981b079900">More...</a><br/></td></tr>
<tr class="separator:ga9060fb028d5a24d8763066981b079900"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1b62338a71194856549698e374d13cb0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00260.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ga1b62338a71194856549698e374d13cb0">SAI_TransferSendLoopEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle, <a class="el" href="a00061.html#ga930ac1cfb546457c3e1ebf70151a6212">sai_transfer_t</a> *xfer, uint32_t loopTransferCount)</td></tr>
<tr class="memdesc:ga1b62338a71194856549698e374d13cb0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a non-blocking SAI loop transfer using eDMA. <a href="#ga1b62338a71194856549698e374d13cb0">More...</a><br/></td></tr>
<tr class="separator:ga1b62338a71194856549698e374d13cb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaaf6043ff078868f35d4459dd2e112c0d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00260.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#gaaf6043ff078868f35d4459dd2e112c0d">SAI_TransferReceiveLoopEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle, <a class="el" href="a00061.html#ga930ac1cfb546457c3e1ebf70151a6212">sai_transfer_t</a> *xfer, uint32_t loopTransferCount)</td></tr>
<tr class="memdesc:gaaf6043ff078868f35d4459dd2e112c0d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a non-blocking SAI loop transfer using eDMA. <a href="#gaaf6043ff078868f35d4459dd2e112c0d">More...</a><br/></td></tr>
<tr class="separator:gaaf6043ff078868f35d4459dd2e112c0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6b3db811719337e4f2172c66ceeb7933"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ga6b3db811719337e4f2172c66ceeb7933">SAI_TransferTerminateSendEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle)</td></tr>
<tr class="memdesc:ga6b3db811719337e4f2172c66ceeb7933"><td class="mdescLeft">&#160;</td><td class="mdescRight">Terminate all SAI send. <a href="#ga6b3db811719337e4f2172c66ceeb7933">More...</a><br/></td></tr>
<tr class="separator:ga6b3db811719337e4f2172c66ceeb7933"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga819dcef593d48f3296ee858239802e26"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ga819dcef593d48f3296ee858239802e26">SAI_TransferTerminateReceiveEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle)</td></tr>
<tr class="memdesc:ga819dcef593d48f3296ee858239802e26"><td class="mdescLeft">&#160;</td><td class="mdescRight">Terminate all SAI receive. <a href="#ga819dcef593d48f3296ee858239802e26">More...</a><br/></td></tr>
<tr class="separator:ga819dcef593d48f3296ee858239802e26"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga12925e07667cc1b27915aedd1f718a7a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ga12925e07667cc1b27915aedd1f718a7a">SAI_TransferAbortSendEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle)</td></tr>
<tr class="memdesc:ga12925e07667cc1b27915aedd1f718a7a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Aborts a SAI transfer using eDMA. <a href="#ga12925e07667cc1b27915aedd1f718a7a">More...</a><br/></td></tr>
<tr class="separator:ga12925e07667cc1b27915aedd1f718a7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3bd586da5f41126cbfa92d2baa03620b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ga3bd586da5f41126cbfa92d2baa03620b">SAI_TransferAbortReceiveEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle)</td></tr>
<tr class="memdesc:ga3bd586da5f41126cbfa92d2baa03620b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Aborts a SAI receive using eDMA. <a href="#ga3bd586da5f41126cbfa92d2baa03620b">More...</a><br/></td></tr>
<tr class="separator:ga3bd586da5f41126cbfa92d2baa03620b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga02aa0e441b0aada0f4875f28f832dc71"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00260.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ga02aa0e441b0aada0f4875f28f832dc71">SAI_TransferGetSendCountEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle, size_t *count)</td></tr>
<tr class="memdesc:ga02aa0e441b0aada0f4875f28f832dc71"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets byte count sent by SAI. <a href="#ga02aa0e441b0aada0f4875f28f832dc71">More...</a><br/></td></tr>
<tr class="separator:ga02aa0e441b0aada0f4875f28f832dc71"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae4a1100515e9a05bb61e0039288664a0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00260.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#gae4a1100515e9a05bb61e0039288664a0">SAI_TransferGetReceiveCountEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle, size_t *count)</td></tr>
<tr class="memdesc:gae4a1100515e9a05bb61e0039288664a0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets byte count received by SAI. <a href="#gae4a1100515e9a05bb61e0039288664a0">More...</a><br/></td></tr>
<tr class="separator:gae4a1100515e9a05bb61e0039288664a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga33af2c1b3c360823ffdbb1348e586107"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ga33af2c1b3c360823ffdbb1348e586107">SAI_TransferGetValidTransferSlotsEDMA</a> (I2S_Type *base, <a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *handle)</td></tr>
<tr class="memdesc:ga33af2c1b3c360823ffdbb1348e586107"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets valid transfer slot. <a href="#ga33af2c1b3c360823ffdbb1348e586107">More...</a><br/></td></tr>
<tr class="separator:ga33af2c1b3c360823ffdbb1348e586107"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<hr/><h2 class="groupheader">Data Structure Documentation</h2>
<a name="a00533" id="a00533"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct sai_edma_handle</td>
</tr>
</table>
</div><div class="memdoc">
<div class="textblock"></div><table class="memberdecls">
<tr><td colspan="2"><h3>Data Fields</h3></td></tr>
<tr class="memitem:a206a3b43dad407f5a36781c817207f6c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a206a3b43dad407f5a36781c817207f6c"></a>
<a class="el" href="a00021.html#ga00acb9562f35755920b20fde1bc9973e">edma_handle_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a206a3b43dad407f5a36781c817207f6c">dmaHandle</a></td></tr>
<tr class="memdesc:a206a3b43dad407f5a36781c817207f6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">DMA handler for SAI send. <br/></td></tr>
<tr class="separator:a206a3b43dad407f5a36781c817207f6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ffb3c5dda8cbc7c9c304d0148e615d4"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a2ffb3c5dda8cbc7c9c304d0148e615d4">nbytes</a></td></tr>
<tr class="memdesc:a2ffb3c5dda8cbc7c9c304d0148e615d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">eDMA minor byte transfer count initially configured. <a href="#a2ffb3c5dda8cbc7c9c304d0148e615d4">More...</a><br/></td></tr>
<tr class="separator:a2ffb3c5dda8cbc7c9c304d0148e615d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a85f7e22cc868bbb5bd2a3e7bcab955f2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a85f7e22cc868bbb5bd2a3e7bcab955f2"></a>
uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a85f7e22cc868bbb5bd2a3e7bcab955f2">bytesPerFrame</a></td></tr>
<tr class="memdesc:a85f7e22cc868bbb5bd2a3e7bcab955f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Bytes in a frame. <br/></td></tr>
<tr class="separator:a85f7e22cc868bbb5bd2a3e7bcab955f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac277f141af096a95a528a7e36fd2063d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac277f141af096a95a528a7e36fd2063d"></a>
uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ac277f141af096a95a528a7e36fd2063d">channelMask</a></td></tr>
<tr class="memdesc:ac277f141af096a95a528a7e36fd2063d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enabled channel mask value, reference _sai_channel_mask. <br/></td></tr>
<tr class="separator:ac277f141af096a95a528a7e36fd2063d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a688de11e52b693d680dafedb93a941c5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a688de11e52b693d680dafedb93a941c5"></a>
uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a688de11e52b693d680dafedb93a941c5">channelNums</a></td></tr>
<tr class="memdesc:a688de11e52b693d680dafedb93a941c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">total enabled channel nums <br/></td></tr>
<tr class="separator:a688de11e52b693d680dafedb93a941c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7c0a238341e3c96e49ad2c661be30dfb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7c0a238341e3c96e49ad2c661be30dfb"></a>
uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a7c0a238341e3c96e49ad2c661be30dfb">channel</a></td></tr>
<tr class="memdesc:a7c0a238341e3c96e49ad2c661be30dfb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Which data channel. <br/></td></tr>
<tr class="separator:a7c0a238341e3c96e49ad2c661be30dfb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a80bd4bad1c70104a976c3e74cdbeab14"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a80bd4bad1c70104a976c3e74cdbeab14"></a>
uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a80bd4bad1c70104a976c3e74cdbeab14">count</a></td></tr>
<tr class="memdesc:a80bd4bad1c70104a976c3e74cdbeab14"><td class="mdescLeft">&#160;</td><td class="mdescRight">The transfer data count in a DMA request. <br/></td></tr>
<tr class="separator:a80bd4bad1c70104a976c3e74cdbeab14"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b35afcf6ad716da7d3e2b44dc46e9a6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7b35afcf6ad716da7d3e2b44dc46e9a6"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a7b35afcf6ad716da7d3e2b44dc46e9a6">state</a></td></tr>
<tr class="memdesc:a7b35afcf6ad716da7d3e2b44dc46e9a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal state for SAI eDMA transfer. <br/></td></tr>
<tr class="separator:a7b35afcf6ad716da7d3e2b44dc46e9a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afbfc2ea495c2d6e378c44c8c37c53765"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbfc2ea495c2d6e378c44c8c37c53765"></a>
<a class="el" href="a00082.html#gaeb6ca21880d8cd8f5f954d38bfa73d63">sai_edma_callback_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#afbfc2ea495c2d6e378c44c8c37c53765">callback</a></td></tr>
<tr class="memdesc:afbfc2ea495c2d6e378c44c8c37c53765"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback for users while transfer finish or error occurs. <br/></td></tr>
<tr class="separator:afbfc2ea495c2d6e378c44c8c37c53765"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad85e23d4f2370b3d5b7a8d1438a6f33b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad85e23d4f2370b3d5b7a8d1438a6f33b"></a>
void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ad85e23d4f2370b3d5b7a8d1438a6f33b">userData</a></td></tr>
<tr class="memdesc:ad85e23d4f2370b3d5b7a8d1438a6f33b"><td class="mdescLeft">&#160;</td><td class="mdescRight">User callback parameter. <br/></td></tr>
<tr class="separator:ad85e23d4f2370b3d5b7a8d1438a6f33b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e68d0012cfebcc70e074237b7b121d8"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a6e68d0012cfebcc70e074237b7b121d8">tcd</a> [(<a class="el" href="a00061.html#ga580bf35fe1f08d7bb054bee399f8b085">SAI_XFER_QUEUE_SIZE</a>+1U)*sizeof(edma_tcd_t)]</td></tr>
<tr class="memdesc:a6e68d0012cfebcc70e074237b7b121d8"><td class="mdescLeft">&#160;</td><td class="mdescRight">TCD pool for eDMA transfer. <a href="#a6e68d0012cfebcc70e074237b7b121d8">More...</a><br/></td></tr>
<tr class="separator:a6e68d0012cfebcc70e074237b7b121d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae552929f0b797fd27532cc0b8ebda762"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00061.html#ga930ac1cfb546457c3e1ebf70151a6212">sai_transfer_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ae552929f0b797fd27532cc0b8ebda762">saiQueue</a> [<a class="el" href="a00061.html#ga580bf35fe1f08d7bb054bee399f8b085">SAI_XFER_QUEUE_SIZE</a>]</td></tr>
<tr class="memdesc:ae552929f0b797fd27532cc0b8ebda762"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transfer queue storing queued transfer. <a href="#ae552929f0b797fd27532cc0b8ebda762">More...</a><br/></td></tr>
<tr class="separator:ae552929f0b797fd27532cc0b8ebda762"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab25e923e0c1904c4a9db8f0d3957bd24"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab25e923e0c1904c4a9db8f0d3957bd24"></a>
size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ab25e923e0c1904c4a9db8f0d3957bd24">transferSize</a> [<a class="el" href="a00061.html#ga580bf35fe1f08d7bb054bee399f8b085">SAI_XFER_QUEUE_SIZE</a>]</td></tr>
<tr class="memdesc:ab25e923e0c1904c4a9db8f0d3957bd24"><td class="mdescLeft">&#160;</td><td class="mdescRight">Data bytes need to transfer. <br/></td></tr>
<tr class="separator:ab25e923e0c1904c4a9db8f0d3957bd24"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a42a9091453bae041d29966f774cd7b3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42a9091453bae041d29966f774cd7b3c"></a>
<a class="el" href="a00082.html#gad6edfb066c228d8b519ac8990150cd01">sai_edma_interleave_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#a42a9091453bae041d29966f774cd7b3c">interleaveType</a></td></tr>
<tr class="memdesc:a42a9091453bae041d29966f774cd7b3c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transfer interleave type. <br/></td></tr>
<tr class="separator:a42a9091453bae041d29966f774cd7b3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb40eac3af06a3130c21b6fdfe3a99b6"><td class="memItemLeft" align="right" valign="top">volatile uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#afb40eac3af06a3130c21b6fdfe3a99b6">queueUser</a></td></tr>
<tr class="memdesc:afb40eac3af06a3130c21b6fdfe3a99b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Index for user to queue transfer. <a href="#afb40eac3af06a3130c21b6fdfe3a99b6">More...</a><br/></td></tr>
<tr class="separator:afb40eac3af06a3130c21b6fdfe3a99b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac7cd6167651d0153af2ff4f324097602"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7cd6167651d0153af2ff4f324097602"></a>
volatile uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00082.html#ac7cd6167651d0153af2ff4f324097602">queueDriver</a></td></tr>
<tr class="memdesc:ac7cd6167651d0153af2ff4f324097602"><td class="mdescLeft">&#160;</td><td class="mdescRight">Index for driver to get the transfer data and size. <br/></td></tr>
<tr class="separator:ac7cd6167651d0153af2ff4f324097602"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h4 class="groupheader">Field Documentation</h4>
<a class="anchor" id="a2ffb3c5dda8cbc7c9c304d0148e615d4"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint8_t sai_edma_handle::nbytes</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="a6e68d0012cfebcc70e074237b7b121d8"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint8_t sai_edma_handle::tcd[(<a class="el" href="a00061.html#ga580bf35fe1f08d7bb054bee399f8b085">SAI_XFER_QUEUE_SIZE</a>+1U)*sizeof(edma_tcd_t)]</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="ae552929f0b797fd27532cc0b8ebda762"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00061.html#ga930ac1cfb546457c3e1ebf70151a6212">sai_transfer_t</a> sai_edma_handle::saiQueue[<a class="el" href="a00061.html#ga580bf35fe1f08d7bb054bee399f8b085">SAI_XFER_QUEUE_SIZE</a>]</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="afb40eac3af06a3130c21b6fdfe3a99b6"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">volatile uint8_t sai_edma_handle::queueUser</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="ga399d35c32a4aec53e8b62a256d528308"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="a00082.html#ga399d35c32a4aec53e8b62a256d528308">_sai_edma_interleave</a></td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="gga399d35c32a4aec53e8b62a256d528308ad6dca42e6eb6f605c9628cc2a5eabfd5"></a>kSAI_EDMAInterleavePerChannelSample</em>&nbsp;</td><td class="fielddoc">
<h2>SAI data interleave per channel sample </h2>
<p>|LEFT CHANNEL | RIGHT CHANNEL | LEFT CHANNEL | RIGHT CHANNEL | LEFT CHANNEL | RIGHT CHANNEL | .... </p>
<h2>| </h2>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="gga399d35c32a4aec53e8b62a256d528308abe869d52b4b9f0883e963214b470d28e"></a>kSAI_EDMAInterleavePerChannelBlock</em>&nbsp;</td><td class="fielddoc">
<h2>SAI data interleave per channel block </h2>
<p>|LEFT CHANNEL | LEFT CHANNEL | LEFT CHANNEL | ... </p>
<h2>| RIGHT CHANNEL | RIGHT CHANNEL | RIGHT CHANNEL | ...| </h2>
</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga84f148e1d3fe186ce6604d637f89c2c1"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SAI_TransferTxCreateHandleEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#gaeb6ca21880d8cd8f5f954d38bfa73d63">sai_edma_callback_t</a>&#160;</td>
<td class="paramname"><em>callback</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>userData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00021.html#ga00acb9562f35755920b20fde1bc9973e">edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>txDmaHandle</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function initializes the SAI master DMA handle, which can be used for other SAI master transactional APIs. Usually, for a specified SAI instance, call this API once to get the initialized handle.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer. </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
<tr><td class="paramname">callback</td><td>Pointer to user callback function. </td></tr>
<tr><td class="paramname">userData</td><td>User parameter passed to the callback function. </td></tr>
<tr><td class="paramname">txDmaHandle</td><td>eDMA handle pointer, this handle shall be static allocated by users. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga44a719a507630fdcc25ba93690098a89"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SAI_TransferRxCreateHandleEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#gaeb6ca21880d8cd8f5f954d38bfa73d63">sai_edma_callback_t</a>&#160;</td>
<td class="paramname"><em>callback</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>userData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00021.html#ga00acb9562f35755920b20fde1bc9973e">edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>rxDmaHandle</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function initializes the SAI slave DMA handle, which can be used for other SAI master transactional APIs. Usually, for a specified SAI instance, call this API once to get the initialized handle.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer. </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
<tr><td class="paramname">callback</td><td>Pointer to user callback function. </td></tr>
<tr><td class="paramname">userData</td><td>User parameter passed to the callback function. </td></tr>
<tr><td class="paramname">rxDmaHandle</td><td>eDMA handle pointer, this handle shall be static allocated by users. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gada84bfce187319b89b6e89c802164478"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SAI_TransferSetInterleaveType </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#gad6edfb066c228d8b519ac8990150cd01">sai_edma_interleave_t</a>&#160;</td>
<td class="paramname"><em>interleaveType</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function initializes the SAI DMA handle member interleaveType, it shall be called only when application would like to use type kSAI_EDMAInterleavePerChannelBlock, since the default interleaveType is kSAI_EDMAInterleavePerChannelSample always</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
<tr><td class="paramname">interleaveType</td><td>Multi channel interleave type. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga5295038a021787aef619bdd9f96981da"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SAI_TransferTxSetConfigEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00061.html#ga1e798fe5217335d01709af9f4855e0dc">sai_transceiver_t</a> *&#160;</td>
<td class="paramname"><em>saiConfig</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>SAI eDMA supports data transfer in a multiple SAI channels if the FIFO Combine feature is supported. To activate the multi-channel transfer enable SAI channels by filling the channelMask of sai_transceiver_t with the corresponding values of _sai_channel_mask enum, enable the FIFO Combine mode by assigning kSAI_FifoCombineModeEnabledOnWrite to the fifoCombine member of sai_fifo_combine_t which is a member of sai_transceiver_t. This is an example of multi-channel data transfer configuration step. <div class="fragment"><div class="line">* <a class="code" href="a00061.html#a00455">sai_transceiver_t</a> config;</div>
<div class="line">* <a class="code" href="a00061.html#gaf233a2ef17cff713b18a002924e992fc">SAI_GetClassicI2SConfig</a>(&amp;config, <a class="code" href="a00061.html#ggad4e90a38e43c3d4a2abe7dd09fd15e20a0328fc45f36f361f958cacd8378d4923">kSAI_WordWidth16bits</a>, <a class="code" href="a00061.html#ggab7c25036fc5c90315f202a19e42ae295a68780a0cf179c054ccccdd0d57fb780e">kSAI_Stereo</a>, <a class="code" href="a00061.html#ggac9420823bfeba78fce625fc105e3b01daa21f6e0475cce1ba88f8105ab4f692c7">kSAI_Channel0Mask</a>|<a class="code" href="a00061.html#ggac9420823bfeba78fce625fc105e3b01da4f8ec142406d199623daa8671b62285b">kSAI_Channel1Mask</a>);</div>
<div class="line">* config.<a class="code" href="a00061.html#a5f352ceb9e29f7b6073a2b3edeaab9df">fifo</a>.<a class="code" href="a00061.html#add8b2fe71eb00c45dfc630d11735ea77">fifoCombine</a> = <a class="code" href="a00061.html#ggaf26356d02c57c13a7683a3ad9a4f91a2a5f9f93fa7038c5ca68fafbb27b44a6c2">kSAI_FifoCombineModeEnabledOnWrite</a>;</div>
<div class="line">* <a class="code" href="a00082.html#ga5295038a021787aef619bdd9f96981da">SAI_TransferTxSetConfigEDMA</a>(I2S0, &amp;edmaHandle, &amp;config);</div>
<div class="line">* </div>
</div><!-- fragment --></dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer. </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
<tr><td class="paramname">saiConfig</td><td>sai configurations. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaed5d72de0d0aa0ac71de3222924e4aa7"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SAI_TransferRxSetConfigEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00061.html#ga1e798fe5217335d01709af9f4855e0dc">sai_transceiver_t</a> *&#160;</td>
<td class="paramname"><em>saiConfig</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>SAI eDMA supports data transfer in a multiple SAI channels if the FIFO Combine feature is supported. To activate the multi-channel transfer enable SAI channels by filling the channelMask of sai_transceiver_t with the corresponding values of _sai_channel_mask enum, enable the FIFO Combine mode by assigning kSAI_FifoCombineModeEnabledOnRead to the fifoCombine member of sai_fifo_combine_t which is a member of sai_transceiver_t. This is an example of multi-channel data transfer configuration step. <div class="fragment"><div class="line">* <a class="code" href="a00061.html#a00455">sai_transceiver_t</a> config;</div>
<div class="line">* <a class="code" href="a00061.html#gaf233a2ef17cff713b18a002924e992fc">SAI_GetClassicI2SConfig</a>(&amp;config, <a class="code" href="a00061.html#ggad4e90a38e43c3d4a2abe7dd09fd15e20a0328fc45f36f361f958cacd8378d4923">kSAI_WordWidth16bits</a>, <a class="code" href="a00061.html#ggab7c25036fc5c90315f202a19e42ae295a68780a0cf179c054ccccdd0d57fb780e">kSAI_Stereo</a>, <a class="code" href="a00061.html#ggac9420823bfeba78fce625fc105e3b01daa21f6e0475cce1ba88f8105ab4f692c7">kSAI_Channel0Mask</a>|<a class="code" href="a00061.html#ggac9420823bfeba78fce625fc105e3b01da4f8ec142406d199623daa8671b62285b">kSAI_Channel1Mask</a>);</div>
<div class="line">* config.<a class="code" href="a00061.html#a5f352ceb9e29f7b6073a2b3edeaab9df">fifo</a>.<a class="code" href="a00061.html#add8b2fe71eb00c45dfc630d11735ea77">fifoCombine</a> = <a class="code" href="a00061.html#ggaf26356d02c57c13a7683a3ad9a4f91a2a5ace6deacace7a319179204a842940e3">kSAI_FifoCombineModeEnabledOnRead</a>;</div>
<div class="line">* <a class="code" href="a00082.html#gaed5d72de0d0aa0ac71de3222924e4aa7">SAI_TransferRxSetConfigEDMA</a>(I2S0, &amp;edmaHandle, &amp;config);</div>
<div class="line">* </div>
</div><!-- fragment --> </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer. </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
<tr><td class="paramname">saiConfig</td><td>sai configurations. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga7a2c125e1f975c9f718dcb820ac46f63"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00260.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a> SAI_TransferSendEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00061.html#ga930ac1cfb546457c3e1ebf70151a6212">sai_transfer_t</a> *&#160;</td>
<td class="paramname"><em>xfer</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>This interface returns immediately after the transfer initiates. Call SAI_GetTransferStatus to poll the transfer status and check whether the SAI transfer is finished.</dd></dl>
<p>This function support multi channel transfer,</p>
<ol type="1">
<li>for the sai IP support fifo combine mode, application should enable the fifo combine mode, no limitation on channel numbers</li>
<li>for the sai IP not support fifo combine mode, sai edma provide another solution which using EDMA modulo feature, but support 2 or 4 channels only.</li>
</ol>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer. </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
<tr><td class="paramname">xfer</td><td>Pointer to the DMA transfer structure. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">kStatus_Success</td><td>Start a SAI eDMA send successfully. </td></tr>
<tr><td class="paramname">kStatus_InvalidArgument</td><td>The input argument is invalid. </td></tr>
<tr><td class="paramname">kStatus_TxBusy</td><td>SAI is busy sending data. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga9060fb028d5a24d8763066981b079900"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00260.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a> SAI_TransferReceiveEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00061.html#ga930ac1cfb546457c3e1ebf70151a6212">sai_transfer_t</a> *&#160;</td>
<td class="paramname"><em>xfer</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>This interface returns immediately after the transfer initiates. Call the SAI_GetReceiveRemainingBytes to poll the transfer status and check whether the SAI transfer is finished.</dd></dl>
<p>This function support multi channel transfer,</p>
<ol type="1">
<li>for the sai IP support fifo combine mode, application should enable the fifo combine mode, no limitation on channel numbers</li>
<li>for the sai IP not support fifo combine mode, sai edma provide another solution which using EDMA modulo feature, but support 2 or 4 channels only.</li>
</ol>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
<tr><td class="paramname">xfer</td><td>Pointer to DMA transfer structure. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">kStatus_Success</td><td>Start a SAI eDMA receive successfully. </td></tr>
<tr><td class="paramname">kStatus_InvalidArgument</td><td>The input argument is invalid. </td></tr>
<tr><td class="paramname">kStatus_RxBusy</td><td>SAI is busy receiving data. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga1b62338a71194856549698e374d13cb0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00260.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a> SAI_TransferSendLoopEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00061.html#ga930ac1cfb546457c3e1ebf70151a6212">sai_transfer_t</a> *&#160;</td>
<td class="paramname"><em>xfer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>loopTransferCount</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>This function support loop transfer only,such as A-&gt;B-&gt;...-&gt;A, application must be aware of that the more counts of the loop transfer, then more tcd memory required, as the function use the tcd pool in sai_edma_handle_t, so application could redefine the SAI_XFER_QUEUE_SIZE to determine the proper TCD pool size. This function support one sai channel only.</dd></dl>
<p>Once the loop transfer start, application can use function SAI_TransferAbortSendEDMA to stop the loop transfer.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer. </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
<tr><td class="paramname">xfer</td><td>Pointer to the DMA transfer structure, should be a array with elements counts &gt;=1(loopTransferCount). </td></tr>
<tr><td class="paramname">loopTransferCount</td><td>the counts of xfer array. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">kStatus_Success</td><td>Start a SAI eDMA send successfully. </td></tr>
<tr><td class="paramname">kStatus_InvalidArgument</td><td>The input argument is invalid. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaaf6043ff078868f35d4459dd2e112c0d"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00260.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a> SAI_TransferReceiveLoopEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00061.html#ga930ac1cfb546457c3e1ebf70151a6212">sai_transfer_t</a> *&#160;</td>
<td class="paramname"><em>xfer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>loopTransferCount</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>This function support loop transfer only,such as A-&gt;B-&gt;...-&gt;A, application must be aware of that the more counts of the loop transfer, then more tcd memory required, as the function use the tcd pool in sai_edma_handle_t, so application could redefine the SAI_XFER_QUEUE_SIZE to determine the proper TCD pool size. This function support one sai channel only.</dd></dl>
<p>Once the loop transfer start, application can use function SAI_TransferAbortReceiveEDMA to stop the loop transfer.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer. </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
<tr><td class="paramname">xfer</td><td>Pointer to the DMA transfer structure, should be a array with elements counts &gt;=1(loopTransferCount). </td></tr>
<tr><td class="paramname">loopTransferCount</td><td>the counts of xfer array. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">kStatus_Success</td><td>Start a SAI eDMA receive successfully. </td></tr>
<tr><td class="paramname">kStatus_InvalidArgument</td><td>The input argument is invalid. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga6b3db811719337e4f2172c66ceeb7933"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SAI_TransferTerminateSendEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function will clear all transfer slots buffered in the sai queue. If users only want to abort the current transfer slot, please call SAI_TransferAbortSendEDMA.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer. </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga819dcef593d48f3296ee858239802e26"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SAI_TransferTerminateReceiveEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function will clear all transfer slots buffered in the sai queue. If users only want to abort the current transfer slot, please call SAI_TransferAbortReceiveEDMA.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer. </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga12925e07667cc1b27915aedd1f718a7a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SAI_TransferAbortSendEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function only aborts the current transfer slots, the other transfer slots' information still kept in the handler. If users want to terminate all transfer slots, just call SAI_TransferTerminateSendEDMA.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer. </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga3bd586da5f41126cbfa92d2baa03620b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void SAI_TransferAbortReceiveEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function only aborts the current transfer slots, the other transfer slots' information still kept in the handler. If users want to terminate all transfer slots, just call SAI_TransferTerminateReceiveEDMA.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga02aa0e441b0aada0f4875f28f832dc71"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00260.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a> SAI_TransferGetSendCountEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer. </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
<tr><td class="paramname">count</td><td>Bytes count sent by SAI. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">kStatus_Success</td><td>Succeed get the transfer count. </td></tr>
<tr><td class="paramname">kStatus_NoTransferInProgress</td><td>There is no non-blocking transaction in progress. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gae4a1100515e9a05bb61e0039288664a0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00260.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a> SAI_TransferGetReceiveCountEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
<tr><td class="paramname">count</td><td>Bytes count received by SAI. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">kStatus_Success</td><td>Succeed get the transfer count. </td></tr>
<tr><td class="paramname">kStatus_NoTransferInProgress</td><td>There is no non-blocking transaction in progress. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga33af2c1b3c360823ffdbb1348e586107"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint32_t SAI_TransferGetValidTransferSlotsEDMA </td>
<td>(</td>
<td class="paramtype">I2S_Type *&#160;</td>
<td class="paramname"><em>base</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00082.html#a00533">sai_edma_handle_t</a> *&#160;</td>
<td class="paramname"><em>handle</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This function can be used to query the valid transfer request slot that the application can submit. It should be called in the critical section, that means the application could call it in the corresponding callback function or disable IRQ before calling it in the application, otherwise, the returned value may not correct.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">base</td><td>SAI base pointer </td></tr>
<tr><td class="paramname">handle</td><td>SAI eDMA handle pointer. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">valid</td><td>slot count that application submit. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.5-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul class="foot">
<li class="footer">&copy; 2016 NXP Semiconductors. All rights reserved.
</li>
</ul>
</div>
</body>
</html>