]> begriffs open source - cmsis/blob - main/Driver/html/group__sai__interface__gr.html
Update documentation for branch main
[cmsis] / main / Driver / html / group__sai__interface__gr.html
1 <!-- HTML header for doxygen 1.9.6-->
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
4 <head>
5 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
6 <meta http-equiv="X-UA-Compatible" content="IE=11"/>
7 <meta name="viewport" content="width=device-width, initial-scale=1"/>
8 <title>CMSIS-Driver: SAI Interface</title>
9 <link href="doxygen.css" rel="stylesheet" type="text/css"/>
10 <link href="tabs.css" rel="stylesheet" type="text/css"/>
11 <link href="extra_navtree.css" rel="stylesheet" type="text/css"/>
12 <link href="extra_stylesheet.css" rel="stylesheet" type="text/css"/>
13 <link href="extra_search.css" rel="stylesheet" type="text/css"/>
14 <script type="text/javascript" src="jquery.js"></script>
15 <script type="text/javascript" src="dynsections.js"></script>
16 <script type="text/javascript" src="printComponentTabs.js"></script>
17 <script type="text/javascript" src="footer.js"></script>
18 <script type="text/javascript" src="navtree.js"></script>
19 <link href="navtree.css" rel="stylesheet" type="text/css"/>
20 <script type="text/javascript" src="resize.js"></script>
21 <script type="text/javascript" src="navtreedata.js"></script>
22 <script type="text/javascript" src="navtree.js"></script>
23 <link href="search/search.css" rel="stylesheet" type="text/css"/>
24 <script type="text/javascript" src="search/searchdata.js"></script>
25 <script type="text/javascript" src="search/search.js"></script>
26 <script type="text/javascript">
27 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
28   $(document).ready(function() { init_search(); });
29 /* @license-end */
30 </script>
31 <script type="text/javascript" src="darkmode_toggle.js"></script>
32 <link href="extra_stylesheet.css" rel="stylesheet" type="text/css"/>
33 <link href="extra_navtree.css" rel="stylesheet" type="text/css"/>
34 <link href="extra_search.css" rel="stylesheet" type="text/css"/>
35 <link href="version.css" rel="stylesheet" type="text/css" />
36 <script type="text/javascript" src="../../../version.js"></script>
37 </head>
38 <body>
39 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
40 <div id="titlearea">
41 <table cellspacing="0" cellpadding="0">
42  <tbody>
43  <tr style="height: 55px;">
44   <td id="projectlogo" style="padding: 1.5em;"><img alt="Logo" src="cmsis_logo_white_small.png"/></td>
45   <td style="padding-left: 1em; padding-bottom: 1em;padding-top: 1em;">
46    <div id="projectname">CMSIS-Driver
47    &#160;<span id="projectnumber"><script type="text/javascript">
48      <!--
49      writeHeader.call(this);
50      writeVersionDropdown.call(this);
51      //-->
52     </script>
53    </span>
54    </div>
55    <div id="projectbrief">Peripheral Interface for Middleware and Application Code</div>
56   </td>
57    <td>        <div id="MSearchBox" class="MSearchBoxInactive">
58         <span class="left">
59           <span id="MSearchSelect"                onmouseover="return searchBox.OnSearchSelectShow()"                onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
60           <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
61                onfocus="searchBox.OnSearchFieldFocus(true)" 
62                onblur="searchBox.OnSearchFieldFocus(false)" 
63                onkeyup="searchBox.OnSearchFieldChange(event)"/>
64           </span><span class="right">
65             <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
66           </span>
67         </div>
68 </td>
69   <!--END !PROJECT_NAME-->
70  </tr>
71  </tbody>
72 </table>
73 </div>
74 <!-- end header part -->
75 <div id="CMSISnav" class="tabs1">
76   <ul class="tablist">
77     <script type="text/javascript">
78       writeComponentTabs.call(this);
79     </script>
80   </ul>
81 </div>
82 <script type="text/javascript">
83   writeSubComponentTabs.call(this);
84 </script>
85 <!-- Generated by Doxygen 1.9.6 -->
86 <script type="text/javascript">
87 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
88 var searchBox = new SearchBox("searchBox", "search/",'.html');
89 /* @license-end */
90 </script>
91 </div><!-- top -->
92 <div id="side-nav" class="ui-resizable side-nav-resizable">
93   <div id="nav-tree">
94     <div id="nav-tree-contents">
95       <div id="nav-sync" class="sync"></div>
96     </div>
97   </div>
98   <div id="splitbar" style="-moz-user-select:none;" 
99        class="ui-resizable-handle">
100   </div>
101 </div>
102 <script type="text/javascript">
103 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
104 $(document).ready(function(){initNavTree('group__sai__interface__gr.html',''); initResizable(); });
105 /* @license-end */
106 </script>
107 <div id="doc-content">
108 <!-- window showing the filter options -->
109 <div id="MSearchSelectWindow"
110      onmouseover="return searchBox.OnSearchSelectShow()"
111      onmouseout="return searchBox.OnSearchSelectHide()"
112      onkeydown="return searchBox.OnSearchSelectKey(event)">
113 </div>
114
115 <!-- iframe showing the search results (closed by default) -->
116 <div id="MSearchResultsWindow">
117 <div id="MSearchResults">
118 <div class="SRPage">
119 <div id="SRIndex">
120 <div id="SRResults"></div>
121 <div class="SRStatus" id="Loading">Loading...</div>
122 <div class="SRStatus" id="Searching">Searching...</div>
123 <div class="SRStatus" id="NoMatches">No Matches</div>
124 </div>
125 </div>
126 </div>
127 </div>
128
129 <div class="header">
130   <div class="summary">
131 <a href="#groups">Content</a> &#124;
132 <a href="#nested-classes">Data Structures</a> &#124;
133 <a href="#typedef-members">Typedefs</a> &#124;
134 <a href="#func-members">Functions</a>  </div>
135   <div class="headertitle"><div class="title">SAI Interface</div></div>
136 </div><!--header-->
137 <div class="contents">
138
139 <p>Driver API for Serial Audio Interface (Driver_SAI.h)  
140 <a href="#details">More...</a></p>
141 <table class="memberdecls">
142 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="groups" name="groups"></a>
143 Content</h2></td></tr>
144 <tr class="memitem:group__sai__execution__status"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__execution__status.html">SAI Status Error Codes</a></td></tr>
145 <tr class="memdesc:group__sai__execution__status"><td class="mdescLeft">&#160;</td><td class="mdescRight">Negative values indicate errors (SAI has specific codes in addition to common <a class="el" href="group__execution__status.html">Status Error Codes</a>). <br /></td></tr>
146 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
147 <tr class="memitem:group__SAI__events"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__SAI__events.html">SAI Events</a></td></tr>
148 <tr class="memdesc:group__SAI__events"><td class="mdescLeft">&#160;</td><td class="mdescRight">The SAI driver generates call back events that are notified via the function <a class="el" href="group__sai__interface__gr.html#gaedf3347cb25d6bf2faad1bbb35ad79f4">ARM_SAI_SignalEvent</a>. <br /></td></tr>
149 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
150 <tr class="memitem:group__sai__control"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__control.html">SAI Control Codes</a></td></tr>
151 <tr class="memdesc:group__sai__control"><td class="mdescLeft">&#160;</td><td class="mdescRight">Many parameters of the SAI driver are configured using the <a class="el" href="group__sai__interface__gr.html#ga405a0769c33da6801055db0fb9b6c869">ARM_SAI_Control</a> function. <br /></td></tr>
152 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
153 </table><table class="memberdecls">
154 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
155 Data Structures</h2></td></tr>
156 <tr class="memitem:structARM__DRIVER__SAI"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#structARM__DRIVER__SAI">ARM_DRIVER_SAI</a></td></tr>
157 <tr class="memdesc:structARM__DRIVER__SAI"><td class="mdescLeft">&#160;</td><td class="mdescRight">Access structure of the SAI Driver.  <a href="group__sai__interface__gr.html#structARM__DRIVER__SAI">More...</a><br /></td></tr>
158 <tr class="separator:structARM__DRIVER__SAI"><td class="memSeparator" colspan="2">&#160;</td></tr>
159 <tr class="memitem:structARM__SAI__CAPABILITIES"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#structARM__SAI__CAPABILITIES">ARM_SAI_CAPABILITIES</a></td></tr>
160 <tr class="memdesc:structARM__SAI__CAPABILITIES"><td class="mdescLeft">&#160;</td><td class="mdescRight">SAI Driver Capabilities.  <a href="group__sai__interface__gr.html#structARM__SAI__CAPABILITIES">More...</a><br /></td></tr>
161 <tr class="separator:structARM__SAI__CAPABILITIES"><td class="memSeparator" colspan="2">&#160;</td></tr>
162 <tr class="memitem:structARM__SAI__STATUS"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#structARM__SAI__STATUS">ARM_SAI_STATUS</a></td></tr>
163 <tr class="memdesc:structARM__SAI__STATUS"><td class="mdescLeft">&#160;</td><td class="mdescRight">SAI Status.  <a href="group__sai__interface__gr.html#structARM__SAI__STATUS">More...</a><br /></td></tr>
164 <tr class="separator:structARM__SAI__STATUS"><td class="memSeparator" colspan="2">&#160;</td></tr>
165 </table><table class="memberdecls">
166 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a>
167 Typedefs</h2></td></tr>
168 <tr class="memitem:gad8ca8e2459e540928f6315b3df6da0ee"><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#gad8ca8e2459e540928f6315b3df6da0ee">ARM_SAI_SignalEvent_t</a>) (uint32_t event)</td></tr>
169 <tr class="memdesc:gad8ca8e2459e540928f6315b3df6da0ee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__sai__interface__gr.html#gaedf3347cb25d6bf2faad1bbb35ad79f4">ARM_SAI_SignalEvent</a> : Signal SAI Event.  <br /></td></tr>
170 <tr class="separator:gad8ca8e2459e540928f6315b3df6da0ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
171 </table><table class="memberdecls">
172 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
173 Functions</h2></td></tr>
174 <tr class="memitem:ga786b1970a788a4dfc6156b42364e52f8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#ga786b1970a788a4dfc6156b42364e52f8">ARM_SAI_GetVersion</a> (void)</td></tr>
175 <tr class="memdesc:ga786b1970a788a4dfc6156b42364e52f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get driver version.  <br /></td></tr>
176 <tr class="separator:ga786b1970a788a4dfc6156b42364e52f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
177 <tr class="memitem:gac6c636757944eaf25aebf312a67665aa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__sai__interface__gr.html#structARM__SAI__CAPABILITIES">ARM_SAI_CAPABILITIES</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#gac6c636757944eaf25aebf312a67665aa">ARM_SAI_GetCapabilities</a> (void)</td></tr>
178 <tr class="memdesc:gac6c636757944eaf25aebf312a67665aa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get driver capabilities.  <br /></td></tr>
179 <tr class="separator:gac6c636757944eaf25aebf312a67665aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
180 <tr class="memitem:ga89622a02ca1e7affb1a01eefacb6f54c"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#ga89622a02ca1e7affb1a01eefacb6f54c">ARM_SAI_Initialize</a> (<a class="el" href="group__sai__interface__gr.html#gad8ca8e2459e540928f6315b3df6da0ee">ARM_SAI_SignalEvent_t</a> cb_event)</td></tr>
181 <tr class="memdesc:ga89622a02ca1e7affb1a01eefacb6f54c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize SAI Interface.  <br /></td></tr>
182 <tr class="separator:ga89622a02ca1e7affb1a01eefacb6f54c"><td class="memSeparator" colspan="2">&#160;</td></tr>
183 <tr class="memitem:gabdefafaba6f072cfd7ed6f8f132422b6"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#gabdefafaba6f072cfd7ed6f8f132422b6">ARM_SAI_Uninitialize</a> (void)</td></tr>
184 <tr class="memdesc:gabdefafaba6f072cfd7ed6f8f132422b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">De-initialize SAI Interface.  <br /></td></tr>
185 <tr class="separator:gabdefafaba6f072cfd7ed6f8f132422b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
186 <tr class="memitem:gacdec50a3dd5902de601caa7397c1dabc"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#gacdec50a3dd5902de601caa7397c1dabc">ARM_SAI_PowerControl</a> (<a class="el" href="group__common__drv__gr.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5">ARM_POWER_STATE</a> state)</td></tr>
187 <tr class="memdesc:gacdec50a3dd5902de601caa7397c1dabc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Control SAI Interface Power.  <br /></td></tr>
188 <tr class="separator:gacdec50a3dd5902de601caa7397c1dabc"><td class="memSeparator" colspan="2">&#160;</td></tr>
189 <tr class="memitem:ga8bb6866c535adeb930bc4a847d476fcd"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#ga8bb6866c535adeb930bc4a847d476fcd">ARM_SAI_Send</a> (const void *data, uint32_t num)</td></tr>
190 <tr class="memdesc:ga8bb6866c535adeb930bc4a847d476fcd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Start sending data to SAI transmitter.  <br /></td></tr>
191 <tr class="separator:ga8bb6866c535adeb930bc4a847d476fcd"><td class="memSeparator" colspan="2">&#160;</td></tr>
192 <tr class="memitem:ga2d55f506cef9d2849cbe418146086d98"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#ga2d55f506cef9d2849cbe418146086d98">ARM_SAI_Receive</a> (void *data, uint32_t num)</td></tr>
193 <tr class="memdesc:ga2d55f506cef9d2849cbe418146086d98"><td class="mdescLeft">&#160;</td><td class="mdescRight">Start receiving data from SAI receiver.  <br /></td></tr>
194 <tr class="separator:ga2d55f506cef9d2849cbe418146086d98"><td class="memSeparator" colspan="2">&#160;</td></tr>
195 <tr class="memitem:gaa9805f9d32aee205f787e625a58e8898"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#gaa9805f9d32aee205f787e625a58e8898">ARM_SAI_GetTxCount</a> (void)</td></tr>
196 <tr class="memdesc:gaa9805f9d32aee205f787e625a58e8898"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get transmitted data count.  <br /></td></tr>
197 <tr class="separator:gaa9805f9d32aee205f787e625a58e8898"><td class="memSeparator" colspan="2">&#160;</td></tr>
198 <tr class="memitem:ga2c571fcc8b9632c25a64043bc2b2baec"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#ga2c571fcc8b9632c25a64043bc2b2baec">ARM_SAI_GetRxCount</a> (void)</td></tr>
199 <tr class="memdesc:ga2c571fcc8b9632c25a64043bc2b2baec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get received data count.  <br /></td></tr>
200 <tr class="separator:ga2c571fcc8b9632c25a64043bc2b2baec"><td class="memSeparator" colspan="2">&#160;</td></tr>
201 <tr class="memitem:ga405a0769c33da6801055db0fb9b6c869"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#ga405a0769c33da6801055db0fb9b6c869">ARM_SAI_Control</a> (uint32_t control, uint32_t arg1, uint32_t arg2)</td></tr>
202 <tr class="memdesc:ga405a0769c33da6801055db0fb9b6c869"><td class="mdescLeft">&#160;</td><td class="mdescRight">Control SAI Interface.  <br /></td></tr>
203 <tr class="separator:ga405a0769c33da6801055db0fb9b6c869"><td class="memSeparator" colspan="2">&#160;</td></tr>
204 <tr class="memitem:ga6a202b57697f0f7a9742e76b33d5eeec"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__sai__interface__gr.html#structARM__SAI__STATUS">ARM_SAI_STATUS</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#ga6a202b57697f0f7a9742e76b33d5eeec">ARM_SAI_GetStatus</a> (void)</td></tr>
205 <tr class="memdesc:ga6a202b57697f0f7a9742e76b33d5eeec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get SAI status.  <br /></td></tr>
206 <tr class="separator:ga6a202b57697f0f7a9742e76b33d5eeec"><td class="memSeparator" colspan="2">&#160;</td></tr>
207 <tr class="memitem:gaedf3347cb25d6bf2faad1bbb35ad79f4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#gaedf3347cb25d6bf2faad1bbb35ad79f4">ARM_SAI_SignalEvent</a> (uint32_t event)</td></tr>
208 <tr class="memdesc:gaedf3347cb25d6bf2faad1bbb35ad79f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Signal SAI Events.  <br /></td></tr>
209 <tr class="separator:gaedf3347cb25d6bf2faad1bbb35ad79f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
210 </table>
211 <a name="details" id="details"></a><h2 class="groupheader">Description</h2>
212 <p>Driver API for Serial Audio Interface (Driver_SAI.h) </p>
213 <p>The <b>Serial Audio Interface</b> (SAI) implements a synchronous serial bus interface for connecting digital audio devices. It is by far the most common mechanism used to transfer two channels of audio data between devices within a system. <b>SAI</b> can transfer digital audio using various protocols:</p><ul>
214 <li><a class="el" href="group__sai__interface__gr.html#Driver_SAI_I2S">I2S</a></li>
215 <li><a class="el" href="group__sai__interface__gr.html#Driver_SAI_MSB">MSB Justified</a></li>
216 <li><a class="el" href="group__sai__interface__gr.html#Driver_SAI_LSB">LSB Justified</a></li>
217 <li><a class="el" href="group__sai__interface__gr.html#Driver_SAI_PCM">PCM</a></li>
218 <li><a class="el" href="group__sai__interface__gr.html#Driver_SAI_AC97">AC'97</a></li>
219 <li><a class="el" href="group__sai__interface__gr.html#Driver_SAI_User">User Defined Protocol</a></li>
220 </ul>
221 <p><b>Block Diagram</b></p>
222 <p>&#160;</p>
223 <div class="image">
224 <img src="SAI_Schematics.png" alt=""/>
225 <div class="caption">
226 Simplified SAI Schematic</div></div>
227  <p>&#160;</p>
228 <p><b>SAI API</b></p>
229 <p>The following header files define the Application Programming Interface (API) for the SAI interface:</p><ul>
230 <li><b>Driver_SAI.h</b> : Driver API for Serial Audio Interface</li>
231 </ul>
232 <p>The driver implementation is a typical part of the <a href="../../Pack/html/index.html" class="el" target="_blank">Device Family Pack (DFP)</a> that supports the peripherals of the microcontroller family.</p>
233 <p><b>Driver Functions</b></p>
234 <p>The driver functions are published in the access struct as explained in <a class="el" href="theoryOperation.html#DriverFunctions">Common Driver Functions</a></p><ul>
235 <li><a class="el" href="group__sai__interface__gr.html#structARM__DRIVER__SAI">ARM_DRIVER_SAI</a> : access struct for SAI driver functions</li>
236 </ul>
237 <h1><a class="anchor" id="Driver_SAI_I2S"></a>
238 I2S</h1>
239 <p><a href="https://en.wikipedia.org/wiki/I%C2%B2S" target="_blank">Integrated Interchip Sound</a> (<b>I2S</b>) is a serial bus interface that connects digital audio devices together. It was introduced by Philips (now <a href="http://www.nxp.com" target="_blank">NXP</a>) in the late 80's and last revised 1996. It uses pulse code modulation to exchange the audio data between the devices. The following timing diagram explains the operation:</p>
240 <div class="image">
241 <img src="driver_sai_i2s.png" alt=""/>
242 </div>
243 <p>I2S separates the clock (<b>SCK</b>) from the serial data (<b>SD</b>), resulting in a lower jitter. A complete audio data frame consists of two slots, one for the left channel and one for the right. The slot size equals the data size. The word select (<b>WS</b>) line lets the device know whether the left channel (WS is low) or the right channel (WS is high) is currently being transmitted. WS has a 50% duty-cycle signal that has the same frequency as the sample frequency. It is an early signal, meaning that the WS line changes one clock cycle before the actual data (SD) is transmitted (left or right). The data on SD is always transmitted MSB first and can have a data size of 8 up to 32 bits.</p>
244 <p>In terms of the CMSIS-Driver for SAI, the I2S protocol can be described as follows:</p><ul>
245 <li>Data Size: 8..32 (MSB first)</li>
246 <li>Clock Polarity: Drive on falling edge, Capture on rising edge</li>
247 <li>Frame Length: 2 * Data Size = 2 * Slot Size</li>
248 <li>Frame Sync Width: Frame Length / 2</li>
249 <li>Frame Sync Polarity: Active Low</li>
250 <li>Frame Sync Early</li>
251 <li>Slot Count: 2 (L R)</li>
252 <li>Slot Size: Data Size</li>
253 <li>Slot Offset: 0</li>
254 </ul>
255 <h1><a class="anchor" id="Driver_SAI_MSB"></a>
256 MSB Justified</h1>
257 <p><b>MSB</b> <b>Justified</b> is much like <a class="el" href="group__sai__interface__gr.html#Driver_SAI_I2S">I2S</a>, with a few differences:</p>
258 <div class="image">
259 <img src="driver_sai_msb.png" alt=""/>
260 </div>
261 <p>Unlike I2S, in MSB Justified the word select (<b>WS</b>) signals the left channel when it is active high and the right channel, when it is active low. The signal changes when the first actual <b>SD</b> data is available. It might happen that a frame (left or right) is not fully filled with data. In this case, all data after the LSB is forced to zero.</p>
262 <p>In terms of the CMSIS-Driver for SAI, the MSB Justified protocol can be described as follows:</p><ul>
263 <li>Data Size: 8..32 (MSB first)</li>
264 <li>Clock Polarity: Drive on falling edge, Capture on rising edge</li>
265 <li>Frame Length: 2 * Slot Size</li>
266 <li>Frame Sync Width: Frame Length / 2</li>
267 <li>Frame Sync Polarity: Active High</li>
268 <li>Slot Count: 2 (L R)</li>
269 <li>Slot Size: Data Size or higher (16/32)</li>
270 <li>Slot Offset: 0 (Zero padding after Data: Slot Size - Data Size)</li>
271 </ul>
272 <h1><a class="anchor" id="Driver_SAI_LSB"></a>
273 LSB Justified</h1>
274 <p><b>LSB</b> <b>Justified</b> is much like <a class="el" href="group__sai__interface__gr.html#Driver_SAI_MSB">MSB Justified</a>, with the single difference that the padding 0's are sent before the first actual data (MSB on <b>SD</b>):</p>
275 <div class="image">
276 <img src="driver_sai_lsb.png" alt=""/>
277 </div>
278 <p>In terms of the CMSIS-Driver for SAI, the LSB Justified protocol can be described as follows:</p><ul>
279 <li>Data Size: 8..32 (MSB first)</li>
280 <li>Clock Polarity: Drive on falling edge, Capture on rising edge</li>
281 <li>Frame Length: 2*Slot Size</li>
282 <li>Frame Sync Width: Frame Length / 2</li>
283 <li>Frame Sync Polarity: Active High</li>
284 <li>Slot Count: 2</li>
285 <li>Slot Size: Data Size or higher (16/32)</li>
286 <li>Slot Offset: Slot Size - Data Size (Zero padding before Data: Slot Size - Data Size)</li>
287 </ul>
288 <h1><a class="anchor" id="Driver_SAI_PCM"></a>
289 PCM</h1>
290 <p><a href="https://en.wikipedia.org/wiki/Pulse-code_modulation" target="_blank">Pulse Code Modulation</a> (<b>PCM</b>) differs to the previous protocols in a few ways:</p>
291 <div class="image">
292 <img src="driver_sai_pcm.png" alt=""/>
293 </div>
294 <ul>
295 <li>Only one channel is transferred.</li>
296 <li>There are two types of synchronization modes available:<ul>
297 <li>In <b>short</b> <b>frame</b> sync mode, the falling edge of <b>Frame</b> <b>Sync</b> indicates the start of the serial data <b>SD</b>. <b>Frame</b> <b>Sync</b> is always one clock cycle long.</li>
298 <li>In <b>long</b> <b>frame</b> sync mode, the rising edge of <b>Frame</b> <b>Sync</b> indicates the start of the serial data <b>SD</b>. <b>Frame</b> <b>Sync</b> stays active high for 13 clock cycles.</li>
299 </ul>
300 </li>
301 </ul>
302 <p>In terms of the CMSIS-Driver for SAI, the PCM protocol can be described as follows:<br  />
303 <b>PCM</b> <b>Short</b> <b>Frame</b> </p><ul>
304 <li>Data Size: 8..32 (MSB first)</li>
305 <li>Clock Polarity: Drive on falling edge, Capture on rising edge</li>
306 <li>Frame Length: Slot Size</li>
307 <li>Frame Sync Width: 1</li>
308 <li>Frame Sync Polarity: Active High</li>
309 <li>Frame Sync Early</li>
310 <li>Slot Count: 1</li>
311 <li>Slot Size: Data Size or higher (16/32)</li>
312 <li>Slot Offset: 0</li>
313 </ul>
314 <p><b>PCM</b> <b>Long</b> <b>Frame</b> </p><ul>
315 <li>Data Size: 16..32 (MSB first)</li>
316 <li>Clock Polarity: Drive on falling edge, Capture on rising edge</li>
317 <li>Frame Length: Slot Size</li>
318 <li>Frame Sync Width: 13</li>
319 <li>Frame Sync Polarity: Active High</li>
320 <li>Slot Count: 1</li>
321 <li>Slot Size: Data Size or higher (32)</li>
322 <li>Slot Offset: 0</li>
323 </ul>
324 <h1><a class="anchor" id="Driver_SAI_AC97"></a>
325 AC'97</h1>
326 <p><a href="https://en.wikipedia.org/wiki/AC&#39;97" target="_blank">Audio Codec '97</a> was developed by <a href="http://www.intel.com" target="_blank">Intel</a>. It is composed of five wires: the clock (12.288 MHz), a sync signal, a reset signal, and two data wires: sdata_out (contains the AC97 output) and sdata_in (contains the CODEC output). For more information, consult the <a href="http://inst.eecs.berkeley.edu/~cs150/Documents/ac97_r23.pdf" target="_blank">standard documentation</a>.</p>
327 <h1><a class="anchor" id="Driver_SAI_User"></a>
328 User Defined Protocol</h1>
329 <p>Using the control structs of the CMSIS-Driver SAI, it is possible to create support for nearly all serial audio protocols that are available today.</p>
330 <div class="image">
331 <img src="driver_sai_user.png" alt=""/>
332 </div>
333 <p>The following properties can be configured for a user protocol:</p><ul>
334 <li>Data Size in bits (8..32)</li>
335 <li>Data Bit Order: MSB first (default) or LSB first</li>
336 <li>Clock Polarity:<ul>
337 <li>Driver on falling edge, Capture on rising edge (default)</li>
338 <li>Driver on rising edge, Capture on falling edge</li>
339 </ul>
340 </li>
341 <li>Frame Length in bits</li>
342 <li>Frame Sync Width in bits (default=1)</li>
343 <li>Frame Sync Polarity: active high (default) or low</li>
344 <li>Frame Sync Early: Sync signal one bit before the first bit of frame</li>
345 <li>Slot Count: number of slots in frame (default=1)</li>
346 <li>Slot Size: equal to data size (default) or 16 or 32-bit</li>
347 <li>Slot Offset: offset of first data bit in slot (default=0)</li>
348 </ul>
349 <p>For more information, refer to <a class="el" href="group__sai__interface__gr.html#ga405a0769c33da6801055db0fb9b6c869">ARM_SAI_Control</a> that explains the different configuration options in more detail. </p>
350 <hr/><h2 class="groupheader">Data Structure Documentation</h2>
351 <a name="structARM__DRIVER__SAI" id="structARM__DRIVER__SAI"></a>
352 <h2 class="memtitle"><span class="permalink"><a href="#structARM__DRIVER__SAI">&#9670;&#160;</a></span>ARM_DRIVER_SAI</h2>
353
354 <div class="memitem">
355 <div class="memproto">
356       <table class="memname">
357         <tr>
358           <td class="memname">struct ARM_DRIVER_SAI</td>
359         </tr>
360       </table>
361 </div><div class="memdoc">
362 <div class="textblock"><p>Access structure of the SAI Driver. </p>
363 <p>The functions of the SAI driver are accessed by function pointers exposed by this structure. Refer to <a class="el" href="theoryOperation.html#DriverFunctions">Common Driver Functions</a> for overview information.</p>
364 <p>Each instance of an SAI interface provides such an access structure. The instance is identified by a postfix number in the symbol name of the access structure, for example:</p><ul>
365 <li><b>Driver_SAI0</b> is the name of the access struct of the first instance (no. 0).</li>
366 <li><b>Driver_SAI1</b> is the name of the access struct of the second instance (no. 1).</li>
367 </ul>
368 <p>A middleware configuration setting allows connecting the middleware to a specific driver instance <b>Driver_SAI<em>n</em></b>. The default is <span class="XML-Token">0</span>, which connects a middleware to the first instance of a driver. </p>
369 </div><table class="memberdecls">
370 <tr><td colspan="2"><h3>Data Fields</h3></td></tr>
371 <tr class="memitem:a30afd9cb3113c037b5f1926f5ef93b59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a>(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#a30afd9cb3113c037b5f1926f5ef93b59">GetVersion</a> )(void)</td></tr>
372 <tr class="memdesc:a30afd9cb3113c037b5f1926f5ef93b59"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__sai__interface__gr.html#ga786b1970a788a4dfc6156b42364e52f8">ARM_SAI_GetVersion</a> : Get driver version.  <br /></td></tr>
373 <tr class="separator:a30afd9cb3113c037b5f1926f5ef93b59"><td class="memSeparator" colspan="2">&#160;</td></tr>
374 <tr class="memitem:aec1182b4c3d0fec4e022ee09ca9afd13"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__sai__interface__gr.html#structARM__SAI__CAPABILITIES">ARM_SAI_CAPABILITIES</a>(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#aec1182b4c3d0fec4e022ee09ca9afd13">GetCapabilities</a> )(void)</td></tr>
375 <tr class="memdesc:aec1182b4c3d0fec4e022ee09ca9afd13"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__sai__interface__gr.html#gac6c636757944eaf25aebf312a67665aa">ARM_SAI_GetCapabilities</a> : Get driver capabilities.  <br /></td></tr>
376 <tr class="separator:aec1182b4c3d0fec4e022ee09ca9afd13"><td class="memSeparator" colspan="2">&#160;</td></tr>
377 <tr class="memitem:adca4b44b071fef3ab076939fbc28e0ae"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#adca4b44b071fef3ab076939fbc28e0ae">Initialize</a> )(<a class="el" href="group__sai__interface__gr.html#gad8ca8e2459e540928f6315b3df6da0ee">ARM_SAI_SignalEvent_t</a> cb_event)</td></tr>
378 <tr class="memdesc:adca4b44b071fef3ab076939fbc28e0ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__sai__interface__gr.html#ga89622a02ca1e7affb1a01eefacb6f54c">ARM_SAI_Initialize</a> : Initialize SAI Interface.  <br /></td></tr>
379 <tr class="separator:adca4b44b071fef3ab076939fbc28e0ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
380 <tr class="memitem:a5ce2b3d7a3a07099bf07d1eb253e92e3"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#a5ce2b3d7a3a07099bf07d1eb253e92e3">Uninitialize</a> )(void)</td></tr>
381 <tr class="memdesc:a5ce2b3d7a3a07099bf07d1eb253e92e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__sai__interface__gr.html#gabdefafaba6f072cfd7ed6f8f132422b6">ARM_SAI_Uninitialize</a> : De-initialize SAI Interface.  <br /></td></tr>
382 <tr class="separator:a5ce2b3d7a3a07099bf07d1eb253e92e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
383 <tr class="memitem:a24ebae5c6011631f76027f9a16eaf5ce"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#a24ebae5c6011631f76027f9a16eaf5ce">PowerControl</a> )(<a class="el" href="group__common__drv__gr.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5">ARM_POWER_STATE</a> state)</td></tr>
384 <tr class="memdesc:a24ebae5c6011631f76027f9a16eaf5ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__sai__interface__gr.html#gacdec50a3dd5902de601caa7397c1dabc">ARM_SAI_PowerControl</a> : Control SAI Interface Power.  <br /></td></tr>
385 <tr class="separator:a24ebae5c6011631f76027f9a16eaf5ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
386 <tr class="memitem:a6e880dae8e9733a3c0f152a131076ca4"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#a6e880dae8e9733a3c0f152a131076ca4">Send</a> )(const void *data, uint32_t num)</td></tr>
387 <tr class="memdesc:a6e880dae8e9733a3c0f152a131076ca4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__sai__interface__gr.html#ga8bb6866c535adeb930bc4a847d476fcd">ARM_SAI_Send</a> : Start sending data to SAI Interface.  <br /></td></tr>
388 <tr class="separator:a6e880dae8e9733a3c0f152a131076ca4"><td class="memSeparator" colspan="2">&#160;</td></tr>
389 <tr class="memitem:a784cafe08ad8f9052dca8cd8071d2a9b"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#a784cafe08ad8f9052dca8cd8071d2a9b">Receive</a> )(void *data, uint32_t num)</td></tr>
390 <tr class="memdesc:a784cafe08ad8f9052dca8cd8071d2a9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__sai__interface__gr.html#ga2d55f506cef9d2849cbe418146086d98">ARM_SAI_Receive</a> : Start receiving data from SAI Interface.  <br /></td></tr>
391 <tr class="separator:a784cafe08ad8f9052dca8cd8071d2a9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
392 <tr class="memitem:a8be5bd53b93a8ad35c20f11d50d5749d"><td class="memItemLeft" align="right" valign="top">uint32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#a8be5bd53b93a8ad35c20f11d50d5749d">GetTxCount</a> )(void)</td></tr>
393 <tr class="memdesc:a8be5bd53b93a8ad35c20f11d50d5749d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__sai__interface__gr.html#gaa9805f9d32aee205f787e625a58e8898">ARM_SAI_GetTxCount</a> : Get transmitted data count.  <br /></td></tr>
394 <tr class="separator:a8be5bd53b93a8ad35c20f11d50d5749d"><td class="memSeparator" colspan="2">&#160;</td></tr>
395 <tr class="memitem:a988e8dd6906c765f26d038bb120dae94"><td class="memItemLeft" align="right" valign="top">uint32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#a988e8dd6906c765f26d038bb120dae94">GetRxCount</a> )(void)</td></tr>
396 <tr class="memdesc:a988e8dd6906c765f26d038bb120dae94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__sai__interface__gr.html#ga2c571fcc8b9632c25a64043bc2b2baec">ARM_SAI_GetRxCount</a> : Get received data count.  <br /></td></tr>
397 <tr class="separator:a988e8dd6906c765f26d038bb120dae94"><td class="memSeparator" colspan="2">&#160;</td></tr>
398 <tr class="memitem:a35af88ef40558504080c3f2a1d5af55a"><td class="memItemLeft" align="right" valign="top">int32_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#a35af88ef40558504080c3f2a1d5af55a">Control</a> )(uint32_t control, uint32_t arg1, uint32_t arg2)</td></tr>
399 <tr class="memdesc:a35af88ef40558504080c3f2a1d5af55a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__sai__interface__gr.html#ga405a0769c33da6801055db0fb9b6c869">ARM_SAI_Control</a> : Control SAI Interface.  <br /></td></tr>
400 <tr class="separator:a35af88ef40558504080c3f2a1d5af55a"><td class="memSeparator" colspan="2">&#160;</td></tr>
401 <tr class="memitem:a41e2a9eca2c301ed1cc62ea09a9c6882"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__sai__interface__gr.html#structARM__SAI__STATUS">ARM_SAI_STATUS</a>(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sai__interface__gr.html#a41e2a9eca2c301ed1cc62ea09a9c6882">GetStatus</a> )(void)</td></tr>
402 <tr class="memdesc:a41e2a9eca2c301ed1cc62ea09a9c6882"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to <a class="el" href="group__sai__interface__gr.html#ga6a202b57697f0f7a9742e76b33d5eeec">ARM_SAI_GetStatus</a> : Get SAI status.  <br /></td></tr>
403 <tr class="separator:a41e2a9eca2c301ed1cc62ea09a9c6882"><td class="memSeparator" colspan="2">&#160;</td></tr>
404 </table>
405 <h4 class="groupheader">Field Documentation</h4>
406 <a id="a30afd9cb3113c037b5f1926f5ef93b59" name="a30afd9cb3113c037b5f1926f5ef93b59"></a>
407 <h2 class="memtitle"><span class="permalink"><a href="#a30afd9cb3113c037b5f1926f5ef93b59">&#9670;&#160;</a></span>GetVersion</h2>
408
409 <div class="memitem">
410 <div class="memproto">
411       <table class="memname">
412         <tr>
413           <td class="memname"><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a>(* GetVersion) (void)</td>
414         </tr>
415       </table>
416 </div><div class="memdoc">
417
418 <p>Pointer to <a class="el" href="group__sai__interface__gr.html#ga786b1970a788a4dfc6156b42364e52f8">ARM_SAI_GetVersion</a> : Get driver version. </p>
419
420 </div>
421 </div>
422 <a id="aec1182b4c3d0fec4e022ee09ca9afd13" name="aec1182b4c3d0fec4e022ee09ca9afd13"></a>
423 <h2 class="memtitle"><span class="permalink"><a href="#aec1182b4c3d0fec4e022ee09ca9afd13">&#9670;&#160;</a></span>GetCapabilities</h2>
424
425 <div class="memitem">
426 <div class="memproto">
427       <table class="memname">
428         <tr>
429           <td class="memname"><a class="el" href="group__sai__interface__gr.html#structARM__SAI__CAPABILITIES">ARM_SAI_CAPABILITIES</a>(* GetCapabilities) (void)</td>
430         </tr>
431       </table>
432 </div><div class="memdoc">
433
434 <p>Pointer to <a class="el" href="group__sai__interface__gr.html#gac6c636757944eaf25aebf312a67665aa">ARM_SAI_GetCapabilities</a> : Get driver capabilities. </p>
435
436 </div>
437 </div>
438 <a id="adca4b44b071fef3ab076939fbc28e0ae" name="adca4b44b071fef3ab076939fbc28e0ae"></a>
439 <h2 class="memtitle"><span class="permalink"><a href="#adca4b44b071fef3ab076939fbc28e0ae">&#9670;&#160;</a></span>Initialize</h2>
440
441 <div class="memitem">
442 <div class="memproto">
443       <table class="memname">
444         <tr>
445           <td class="memname">int32_t(* Initialize) (<a class="el" href="group__sai__interface__gr.html#gad8ca8e2459e540928f6315b3df6da0ee">ARM_SAI_SignalEvent_t</a> cb_event)</td>
446         </tr>
447       </table>
448 </div><div class="memdoc">
449
450 <p>Pointer to <a class="el" href="group__sai__interface__gr.html#ga89622a02ca1e7affb1a01eefacb6f54c">ARM_SAI_Initialize</a> : Initialize SAI Interface. </p>
451
452 </div>
453 </div>
454 <a id="a5ce2b3d7a3a07099bf07d1eb253e92e3" name="a5ce2b3d7a3a07099bf07d1eb253e92e3"></a>
455 <h2 class="memtitle"><span class="permalink"><a href="#a5ce2b3d7a3a07099bf07d1eb253e92e3">&#9670;&#160;</a></span>Uninitialize</h2>
456
457 <div class="memitem">
458 <div class="memproto">
459       <table class="memname">
460         <tr>
461           <td class="memname">int32_t(* Uninitialize) (void)</td>
462         </tr>
463       </table>
464 </div><div class="memdoc">
465
466 <p>Pointer to <a class="el" href="group__sai__interface__gr.html#gabdefafaba6f072cfd7ed6f8f132422b6">ARM_SAI_Uninitialize</a> : De-initialize SAI Interface. </p>
467
468 </div>
469 </div>
470 <a id="a24ebae5c6011631f76027f9a16eaf5ce" name="a24ebae5c6011631f76027f9a16eaf5ce"></a>
471 <h2 class="memtitle"><span class="permalink"><a href="#a24ebae5c6011631f76027f9a16eaf5ce">&#9670;&#160;</a></span>PowerControl</h2>
472
473 <div class="memitem">
474 <div class="memproto">
475       <table class="memname">
476         <tr>
477           <td class="memname">int32_t(* PowerControl) (<a class="el" href="group__common__drv__gr.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5">ARM_POWER_STATE</a> state)</td>
478         </tr>
479       </table>
480 </div><div class="memdoc">
481
482 <p>Pointer to <a class="el" href="group__sai__interface__gr.html#gacdec50a3dd5902de601caa7397c1dabc">ARM_SAI_PowerControl</a> : Control SAI Interface Power. </p>
483
484 </div>
485 </div>
486 <a id="a6e880dae8e9733a3c0f152a131076ca4" name="a6e880dae8e9733a3c0f152a131076ca4"></a>
487 <h2 class="memtitle"><span class="permalink"><a href="#a6e880dae8e9733a3c0f152a131076ca4">&#9670;&#160;</a></span>Send</h2>
488
489 <div class="memitem">
490 <div class="memproto">
491       <table class="memname">
492         <tr>
493           <td class="memname">int32_t(* Send) (const void *data, uint32_t num)</td>
494         </tr>
495       </table>
496 </div><div class="memdoc">
497
498 <p>Pointer to <a class="el" href="group__sai__interface__gr.html#ga8bb6866c535adeb930bc4a847d476fcd">ARM_SAI_Send</a> : Start sending data to SAI Interface. </p>
499
500 </div>
501 </div>
502 <a id="a784cafe08ad8f9052dca8cd8071d2a9b" name="a784cafe08ad8f9052dca8cd8071d2a9b"></a>
503 <h2 class="memtitle"><span class="permalink"><a href="#a784cafe08ad8f9052dca8cd8071d2a9b">&#9670;&#160;</a></span>Receive</h2>
504
505 <div class="memitem">
506 <div class="memproto">
507       <table class="memname">
508         <tr>
509           <td class="memname">int32_t(* Receive) (void *data, uint32_t num)</td>
510         </tr>
511       </table>
512 </div><div class="memdoc">
513
514 <p>Pointer to <a class="el" href="group__sai__interface__gr.html#ga2d55f506cef9d2849cbe418146086d98">ARM_SAI_Receive</a> : Start receiving data from SAI Interface. </p>
515
516 </div>
517 </div>
518 <a id="a8be5bd53b93a8ad35c20f11d50d5749d" name="a8be5bd53b93a8ad35c20f11d50d5749d"></a>
519 <h2 class="memtitle"><span class="permalink"><a href="#a8be5bd53b93a8ad35c20f11d50d5749d">&#9670;&#160;</a></span>GetTxCount</h2>
520
521 <div class="memitem">
522 <div class="memproto">
523       <table class="memname">
524         <tr>
525           <td class="memname">uint32_t(* GetTxCount) (void)</td>
526         </tr>
527       </table>
528 </div><div class="memdoc">
529
530 <p>Pointer to <a class="el" href="group__sai__interface__gr.html#gaa9805f9d32aee205f787e625a58e8898">ARM_SAI_GetTxCount</a> : Get transmitted data count. </p>
531
532 </div>
533 </div>
534 <a id="a988e8dd6906c765f26d038bb120dae94" name="a988e8dd6906c765f26d038bb120dae94"></a>
535 <h2 class="memtitle"><span class="permalink"><a href="#a988e8dd6906c765f26d038bb120dae94">&#9670;&#160;</a></span>GetRxCount</h2>
536
537 <div class="memitem">
538 <div class="memproto">
539       <table class="memname">
540         <tr>
541           <td class="memname">uint32_t(* GetRxCount) (void)</td>
542         </tr>
543       </table>
544 </div><div class="memdoc">
545
546 <p>Pointer to <a class="el" href="group__sai__interface__gr.html#ga2c571fcc8b9632c25a64043bc2b2baec">ARM_SAI_GetRxCount</a> : Get received data count. </p>
547
548 </div>
549 </div>
550 <a id="a35af88ef40558504080c3f2a1d5af55a" name="a35af88ef40558504080c3f2a1d5af55a"></a>
551 <h2 class="memtitle"><span class="permalink"><a href="#a35af88ef40558504080c3f2a1d5af55a">&#9670;&#160;</a></span>Control</h2>
552
553 <div class="memitem">
554 <div class="memproto">
555       <table class="memname">
556         <tr>
557           <td class="memname">int32_t(* Control) (uint32_t control, uint32_t arg1, uint32_t arg2)</td>
558         </tr>
559       </table>
560 </div><div class="memdoc">
561
562 <p>Pointer to <a class="el" href="group__sai__interface__gr.html#ga405a0769c33da6801055db0fb9b6c869">ARM_SAI_Control</a> : Control SAI Interface. </p>
563
564 </div>
565 </div>
566 <a id="a41e2a9eca2c301ed1cc62ea09a9c6882" name="a41e2a9eca2c301ed1cc62ea09a9c6882"></a>
567 <h2 class="memtitle"><span class="permalink"><a href="#a41e2a9eca2c301ed1cc62ea09a9c6882">&#9670;&#160;</a></span>GetStatus</h2>
568
569 <div class="memitem">
570 <div class="memproto">
571       <table class="memname">
572         <tr>
573           <td class="memname"><a class="el" href="group__sai__interface__gr.html#structARM__SAI__STATUS">ARM_SAI_STATUS</a>(* GetStatus) (void)</td>
574         </tr>
575       </table>
576 </div><div class="memdoc">
577
578 <p>Pointer to <a class="el" href="group__sai__interface__gr.html#ga6a202b57697f0f7a9742e76b33d5eeec">ARM_SAI_GetStatus</a> : Get SAI status. </p>
579
580 </div>
581 </div>
582
583 </div>
584 </div>
585 <a name="structARM__SAI__CAPABILITIES" id="structARM__SAI__CAPABILITIES"></a>
586 <h2 class="memtitle"><span class="permalink"><a href="#structARM__SAI__CAPABILITIES">&#9670;&#160;</a></span>ARM_SAI_CAPABILITIES</h2>
587
588 <div class="memitem">
589 <div class="memproto">
590       <table class="memname">
591         <tr>
592           <td class="memname">struct ARM_SAI_CAPABILITIES</td>
593         </tr>
594       </table>
595 </div><div class="memdoc">
596 <div class="textblock"><p>SAI Driver Capabilities. </p>
597 <p>An SAI driver can be implemented with different capabilities (for example protocol support). The data fields of this structure encode the capabilities implemented by this driver. If a certain hardware peripheral is not able to handle one of the protocols directly (not advertised using <a class="el" href="group__sai__interface__gr.html#structARM__SAI__CAPABILITIES" title="SAI Driver Capabilities.">ARM_SAI_CAPABILITIES</a>), then it might be possible to implement it using the <a class="el" href="group__sai__interface__gr.html#Driver_SAI_User">User Defined Protocol</a> (if supported).</p>
598 <p><b>Returned by:</b></p><ul>
599 <li><a class="el" href="group__sai__interface__gr.html#gac6c636757944eaf25aebf312a67665aa">ARM_SAI_GetCapabilities</a> </li>
600 </ul>
601 </div><table class="fieldtable">
602 <tr><th colspan="3">Data Fields</th></tr>
603 <tr><td class="fieldtype">
604 <a id="a75ba2507ea29601a309393e794f4413d" name="a75ba2507ea29601a309393e794f4413d"></a>uint32_t</td>
605 <td class="fieldname">
606 asynchronous: 1</td>
607 <td class="fielddoc">
608 supports asynchronous Transmit/Receive </td></tr>
609 <tr><td class="fieldtype">
610 <a id="a9fa4f850b8ce2be2c7ffa2e3ec70ae20" name="a9fa4f850b8ce2be2c7ffa2e3ec70ae20"></a>uint32_t</td>
611 <td class="fieldname">
612 synchronous: 1</td>
613 <td class="fielddoc">
614 supports synchronous Transmit/Receive </td></tr>
615 <tr><td class="fieldtype">
616 <a id="a808b1f9e0abc3fa67945899cfc9fccc1" name="a808b1f9e0abc3fa67945899cfc9fccc1"></a>uint32_t</td>
617 <td class="fieldname">
618 protocol_user: 1</td>
619 <td class="fielddoc">
620 supports user defined Protocol </td></tr>
621 <tr><td class="fieldtype">
622 <a id="a6fcb9d68c4999860ce162c0ef44c4c97" name="a6fcb9d68c4999860ce162c0ef44c4c97"></a>uint32_t</td>
623 <td class="fieldname">
624 protocol_i2s: 1</td>
625 <td class="fielddoc">
626 supports I2S Protocol </td></tr>
627 <tr><td class="fieldtype">
628 <a id="a5363ec1fc0042620cb8aeeee4f98691b" name="a5363ec1fc0042620cb8aeeee4f98691b"></a>uint32_t</td>
629 <td class="fieldname">
630 protocol_justified: 1</td>
631 <td class="fielddoc">
632 supports MSB/LSB justified Protocol </td></tr>
633 <tr><td class="fieldtype">
634 <a id="a0b2c79bd96ecb47d801fc5389819314a" name="a0b2c79bd96ecb47d801fc5389819314a"></a>uint32_t</td>
635 <td class="fieldname">
636 protocol_pcm: 1</td>
637 <td class="fielddoc">
638 supports PCM short/long frame Protocol </td></tr>
639 <tr><td class="fieldtype">
640 <a id="a5255f8d78a18ace0a959f604f9c065dd" name="a5255f8d78a18ace0a959f604f9c065dd"></a>uint32_t</td>
641 <td class="fieldname">
642 protocol_ac97: 1</td>
643 <td class="fielddoc">
644 supports AC'97 Protocol </td></tr>
645 <tr><td class="fieldtype">
646 <a id="a8d92817d8662211abda2d747c52ff4a9" name="a8d92817d8662211abda2d747c52ff4a9"></a>uint32_t</td>
647 <td class="fieldname">
648 mono_mode: 1</td>
649 <td class="fielddoc">
650 supports Mono mode </td></tr>
651 <tr><td class="fieldtype">
652 <a id="a77e4d8466d2bde30e6583b9ad8ba8c82" name="a77e4d8466d2bde30e6583b9ad8ba8c82"></a>uint32_t</td>
653 <td class="fieldname">
654 companding: 1</td>
655 <td class="fielddoc">
656 supports Companding </td></tr>
657 <tr><td class="fieldtype">
658 <a id="a12554e2522a0c611e8a26c9e536554eb" name="a12554e2522a0c611e8a26c9e536554eb"></a>uint32_t</td>
659 <td class="fieldname">
660 mclk_pin: 1</td>
661 <td class="fielddoc">
662 supports MCLK (Master Clock) pin </td></tr>
663 <tr><td class="fieldtype">
664 <a id="acc06ba75f18af9862d171426abc3273e" name="acc06ba75f18af9862d171426abc3273e"></a>uint32_t</td>
665 <td class="fieldname">
666 event_frame_error: 1</td>
667 <td class="fielddoc">
668 supports Frame error event: <a class="el" href="group__SAI__events.html#ga6ffcf96fe404b48421a57fbd122b26bc">ARM_SAI_EVENT_FRAME_ERROR</a> </td></tr>
669 <tr><td class="fieldtype">
670 <a id="aa43c4c21b173ada1b6b7568956f0d650" name="aa43c4c21b173ada1b6b7568956f0d650"></a>uint32_t</td>
671 <td class="fieldname">
672 reserved: 21</td>
673 <td class="fielddoc">
674 Reserved (must be zero) </td></tr>
675 </table>
676
677 </div>
678 </div>
679 <a name="structARM__SAI__STATUS" id="structARM__SAI__STATUS"></a>
680 <h2 class="memtitle"><span class="permalink"><a href="#structARM__SAI__STATUS">&#9670;&#160;</a></span>ARM_SAI_STATUS</h2>
681
682 <div class="memitem">
683 <div class="memproto">
684       <table class="memname">
685         <tr>
686           <td class="memname">struct ARM_SAI_STATUS</td>
687         </tr>
688       </table>
689 </div><div class="memdoc">
690 <div class="textblock"><p>SAI Status. </p>
691 <p>Structure with information about the status of the SAI. The data fields encode busy flags and error flags.</p>
692 <p><b>Returned by:</b></p><ul>
693 <li><a class="el" href="group__sai__interface__gr.html#ga6a202b57697f0f7a9742e76b33d5eeec">ARM_SAI_GetStatus</a> </li>
694 </ul>
695 </div><table class="fieldtable">
696 <tr><th colspan="3">Data Fields</th></tr>
697 <tr><td class="fieldtype">
698 <a id="a2c6d2b67fba3f3e084e96a6bc7fcac6b" name="a2c6d2b67fba3f3e084e96a6bc7fcac6b"></a>uint32_t</td>
699 <td class="fieldname">
700 tx_busy: 1</td>
701 <td class="fielddoc">
702 Transmitter busy flag. </td></tr>
703 <tr><td class="fieldtype">
704 <a id="a9f5baee58ed41b382628a82a0b1cbcb4" name="a9f5baee58ed41b382628a82a0b1cbcb4"></a>uint32_t</td>
705 <td class="fieldname">
706 rx_busy: 1</td>
707 <td class="fielddoc">
708 Receiver busy flag. </td></tr>
709 <tr><td class="fieldtype">
710 <a id="a048f45e9d2257a21821f81d9edd17b72" name="a048f45e9d2257a21821f81d9edd17b72"></a>uint32_t</td>
711 <td class="fieldname">
712 tx_underflow: 1</td>
713 <td class="fielddoc">
714 Transmit data underflow detected (cleared on start of next send operation) </td></tr>
715 <tr><td class="fieldtype">
716 <a id="ac403aefd9bce8b0172e1996c0f3dd8aa" name="ac403aefd9bce8b0172e1996c0f3dd8aa"></a>uint32_t</td>
717 <td class="fieldname">
718 rx_overflow: 1</td>
719 <td class="fielddoc">
720 Receive data overflow detected (cleared on start of next receive operation) </td></tr>
721 <tr><td class="fieldtype">
722 <a id="a1b4f69a2caf19ef9fd75cf27ae3932f9" name="a1b4f69a2caf19ef9fd75cf27ae3932f9"></a>uint32_t</td>
723 <td class="fieldname">
724 frame_error: 1</td>
725 <td class="fielddoc">
726 Sync Frame error detected (cleared on start of next send/receive operation) </td></tr>
727 <tr><td class="fieldtype">
728 <a id="aa43c4c21b173ada1b6b7568956f0d650" name="aa43c4c21b173ada1b6b7568956f0d650"></a>uint32_t</td>
729 <td class="fieldname">
730 reserved: 27</td>
731 <td class="fielddoc">
732 </td></tr>
733 </table>
734
735 </div>
736 </div>
737 <h2 class="groupheader">Typedef Documentation</h2>
738 <a id="gad8ca8e2459e540928f6315b3df6da0ee" name="gad8ca8e2459e540928f6315b3df6da0ee"></a>
739 <h2 class="memtitle"><span class="permalink"><a href="#gad8ca8e2459e540928f6315b3df6da0ee">&#9670;&#160;</a></span>ARM_SAI_SignalEvent_t</h2>
740
741 <div class="memitem">
742 <div class="memproto">
743       <table class="memname">
744         <tr>
745           <td class="memname">ARM_SAI_SignalEvent_t</td>
746         </tr>
747       </table>
748 </div><div class="memdoc">
749
750 <p>Pointer to <a class="el" href="group__sai__interface__gr.html#gaedf3347cb25d6bf2faad1bbb35ad79f4">ARM_SAI_SignalEvent</a> : Signal SAI Event. </p>
751 <p>Provides the typedef for the callback function <a class="el" href="group__sai__interface__gr.html#gaedf3347cb25d6bf2faad1bbb35ad79f4">ARM_SAI_SignalEvent</a>.</p>
752 <p><b>Parameter for:</b></p><ul>
753 <li><a class="el" href="group__sai__interface__gr.html#ga89622a02ca1e7affb1a01eefacb6f54c">ARM_SAI_Initialize</a> </li>
754 </ul>
755
756 </div>
757 </div>
758 <h2 class="groupheader">Function Documentation</h2>
759 <a id="ga786b1970a788a4dfc6156b42364e52f8" name="ga786b1970a788a4dfc6156b42364e52f8"></a>
760 <h2 class="memtitle"><span class="permalink"><a href="#ga786b1970a788a4dfc6156b42364e52f8">&#9670;&#160;</a></span>ARM_SAI_GetVersion()</h2>
761
762 <div class="memitem">
763 <div class="memproto">
764       <table class="memname">
765         <tr>
766           <td class="memname"><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a> ARM_SAI_GetVersion </td>
767           <td>(</td>
768           <td class="paramtype">void&#160;</td>
769           <td class="paramname"></td><td>)</td>
770           <td></td>
771         </tr>
772       </table>
773 </div><div class="memdoc">
774
775 <p>Get driver version. </p>
776 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a></dd></dl>
777 <p>The function <b>ARM_SAI_GetVersion</b> returns version information of the driver implementation in <a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a></p><ul>
778 <li>API version is the version of the CMSIS-Driver specification used to implement this driver.</li>
779 <li>Driver version is source code version of the actual driver implementation.</li>
780 </ul>
781 <p><b>Example:</b> </p><div class="fragment"><div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__sai__interface__gr.html#structARM__DRIVER__SAI">ARM_DRIVER_SAI</a> Driver_SAI0;</div>
782 <div class="line"><a class="code hl_struct" href="group__sai__interface__gr.html#structARM__DRIVER__SAI">ARM_DRIVER_SAI</a> *drv_info;</div>
783 <div class="line"> </div>
784 <div class="line"><span class="keywordtype">void</span> setup_sai (<span class="keywordtype">void</span>)  {</div>
785 <div class="line">  <a class="code hl_struct" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a>  version;</div>
786 <div class="line"> </div>
787 <div class="line">  drv_info = &amp;Driver_SAI0;  </div>
788 <div class="line">  version = drv_info-&gt;<a class="code hl_variable" href="group__sai__interface__gr.html#a30afd9cb3113c037b5f1926f5ef93b59">GetVersion</a> ();</div>
789 <div class="line">  <span class="keywordflow">if</span> (version.<a class="code hl_variable" href="group__common__drv__gr.html#ad180da20fbde1d3dafc074af87c19540">api</a> &lt; 0x10A)  {      <span class="comment">// requires at minimum API version 1.10 or higher</span></div>
790 <div class="line">    <span class="comment">// error handling</span></div>
791 <div class="line">    <span class="keywordflow">return</span>;</div>
792 <div class="line">  }</div>
793 <div class="line">}</div>
794 <div class="ttc" id="agroup__common__drv__gr_html_ad180da20fbde1d3dafc074af87c19540"><div class="ttname"><a href="group__common__drv__gr.html#ad180da20fbde1d3dafc074af87c19540">ARM_DRIVER_VERSION::api</a></div><div class="ttdeci">uint16_t api</div><div class="ttdoc">API version.</div><div class="ttdef"><b>Definition:</b> Driver_Common.h:47</div></div>
795 <div class="ttc" id="agroup__common__drv__gr_html_structARM__DRIVER__VERSION"><div class="ttname"><a href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a></div><div class="ttdoc">Driver Version.</div><div class="ttdef"><b>Definition:</b> Driver_Common.h:46</div></div>
796 <div class="ttc" id="agroup__sai__interface__gr_html_a30afd9cb3113c037b5f1926f5ef93b59"><div class="ttname"><a href="group__sai__interface__gr.html#a30afd9cb3113c037b5f1926f5ef93b59">ARM_DRIVER_SAI::GetVersion</a></div><div class="ttdeci">ARM_DRIVER_VERSION(* GetVersion)(void)</div><div class="ttdoc">Pointer to ARM_SAI_GetVersion : Get driver version.</div><div class="ttdef"><b>Definition:</b> Driver_SAI.h:298</div></div>
797 <div class="ttc" id="agroup__sai__interface__gr_html_structARM__DRIVER__SAI"><div class="ttname"><a href="group__sai__interface__gr.html#structARM__DRIVER__SAI">ARM_DRIVER_SAI</a></div><div class="ttdoc">Access structure of the SAI Driver.</div><div class="ttdef"><b>Definition:</b> Driver_SAI.h:297</div></div>
798 </div><!-- fragment --> 
799 </div>
800 </div>
801 <a id="gac6c636757944eaf25aebf312a67665aa" name="gac6c636757944eaf25aebf312a67665aa"></a>
802 <h2 class="memtitle"><span class="permalink"><a href="#gac6c636757944eaf25aebf312a67665aa">&#9670;&#160;</a></span>ARM_SAI_GetCapabilities()</h2>
803
804 <div class="memitem">
805 <div class="memproto">
806       <table class="memname">
807         <tr>
808           <td class="memname"><a class="el" href="group__sai__interface__gr.html#structARM__SAI__CAPABILITIES">ARM_SAI_CAPABILITIES</a> ARM_SAI_GetCapabilities </td>
809           <td>(</td>
810           <td class="paramtype">void&#160;</td>
811           <td class="paramname"></td><td>)</td>
812           <td></td>
813         </tr>
814       </table>
815 </div><div class="memdoc">
816
817 <p>Get driver capabilities. </p>
818 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__sai__interface__gr.html#structARM__SAI__CAPABILITIES">ARM_SAI_CAPABILITIES</a></dd></dl>
819 <p>The function <b>ARM_SAI_GetCapabilities</b> retrieves information about the capabilities in this driver implementation. The data fields of the struct <a class="el" href="group__sai__interface__gr.html#structARM__SAI__CAPABILITIES">ARM_SAI_CAPABILITIES</a> encode various capabilities, for example supported protocols, or if a hardware is capable to create signal events using the <a class="el" href="group__sai__interface__gr.html#gaedf3347cb25d6bf2faad1bbb35ad79f4">ARM_SAI_SignalEvent</a> callback function.</p>
820 <p><b>Example:</b> </p><div class="fragment"><div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__sai__interface__gr.html#structARM__DRIVER__SAI">ARM_DRIVER_SAI</a> Driver_SAI0;</div>
821 <div class="line"><a class="code hl_struct" href="group__sai__interface__gr.html#structARM__DRIVER__SAI">ARM_DRIVER_SAI</a> *drv_info;</div>
822 <div class="line">  </div>
823 <div class="line"><span class="keywordtype">void</span> read_capabilities (<span class="keywordtype">void</span>)  {</div>
824 <div class="line">  <a class="code hl_struct" href="group__sai__interface__gr.html#structARM__SAI__CAPABILITIES">ARM_SAI_CAPABILITIES</a> drv_capabilities;</div>
825 <div class="line"> </div>
826 <div class="line">  drv_info = &amp;Driver_SAI0;  </div>
827 <div class="line">  drv_capabilities = drv_info-&gt;<a class="code hl_variable" href="group__sai__interface__gr.html#aec1182b4c3d0fec4e022ee09ca9afd13">GetCapabilities</a> ();</div>
828 <div class="line">  <span class="comment">// interrogate capabilities</span></div>
829 <div class="line"> </div>
830 <div class="line">}</div>
831 <div class="ttc" id="agroup__sai__interface__gr_html_aec1182b4c3d0fec4e022ee09ca9afd13"><div class="ttname"><a href="group__sai__interface__gr.html#aec1182b4c3d0fec4e022ee09ca9afd13">ARM_DRIVER_SAI::GetCapabilities</a></div><div class="ttdeci">ARM_SAI_CAPABILITIES(* GetCapabilities)(void)</div><div class="ttdoc">Pointer to ARM_SAI_GetCapabilities : Get driver capabilities.</div><div class="ttdef"><b>Definition:</b> Driver_SAI.h:299</div></div>
832 <div class="ttc" id="agroup__sai__interface__gr_html_structARM__SAI__CAPABILITIES"><div class="ttname"><a href="group__sai__interface__gr.html#structARM__SAI__CAPABILITIES">ARM_SAI_CAPABILITIES</a></div><div class="ttdoc">SAI Driver Capabilities.</div><div class="ttdef"><b>Definition:</b> Driver_SAI.h:278</div></div>
833 </div><!-- fragment --> 
834 </div>
835 </div>
836 <a id="ga89622a02ca1e7affb1a01eefacb6f54c" name="ga89622a02ca1e7affb1a01eefacb6f54c"></a>
837 <h2 class="memtitle"><span class="permalink"><a href="#ga89622a02ca1e7affb1a01eefacb6f54c">&#9670;&#160;</a></span>ARM_SAI_Initialize()</h2>
838
839 <div class="memitem">
840 <div class="memproto">
841       <table class="memname">
842         <tr>
843           <td class="memname">int32_t ARM_SAI_Initialize </td>
844           <td>(</td>
845           <td class="paramtype"><a class="el" href="group__sai__interface__gr.html#gad8ca8e2459e540928f6315b3df6da0ee">ARM_SAI_SignalEvent_t</a>&#160;</td>
846           <td class="paramname"><em>cb_event</em></td><td>)</td>
847           <td></td>
848         </tr>
849       </table>
850 </div><div class="memdoc">
851
852 <p>Initialize SAI Interface. </p>
853 <dl class="params"><dt>Parameters</dt><dd>
854   <table class="params">
855     <tr><td class="paramdir">[in]</td><td class="paramname">cb_event</td><td>Pointer to <a class="el" href="group__sai__interface__gr.html#gaedf3347cb25d6bf2faad1bbb35ad79f4">ARM_SAI_SignalEvent</a> </td></tr>
856   </table>
857   </dd>
858 </dl>
859 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
860 <p>The function <b>ARM_SAI_Initialize</b> initializes the SAI interface. It is called when the middleware component starts operation.</p>
861 <p>The function performs the following operations:</p><ul>
862 <li>Initializes the required resources of the SAI interface.</li>
863 <li>Registers the <a class="el" href="group__sai__interface__gr.html#gaedf3347cb25d6bf2faad1bbb35ad79f4">ARM_SAI_SignalEvent</a> callback function.</li>
864 </ul>
865 <p>The parameter <em>cb_event</em> is a pointer to the <a class="el" href="group__sai__interface__gr.html#gaedf3347cb25d6bf2faad1bbb35ad79f4">ARM_SAI_SignalEvent</a> callback function; use a NULL pointer when no callback signals are required. </p>
866
867 </div>
868 </div>
869 <a id="gabdefafaba6f072cfd7ed6f8f132422b6" name="gabdefafaba6f072cfd7ed6f8f132422b6"></a>
870 <h2 class="memtitle"><span class="permalink"><a href="#gabdefafaba6f072cfd7ed6f8f132422b6">&#9670;&#160;</a></span>ARM_SAI_Uninitialize()</h2>
871
872 <div class="memitem">
873 <div class="memproto">
874       <table class="memname">
875         <tr>
876           <td class="memname">int32_t ARM_SAI_Uninitialize </td>
877           <td>(</td>
878           <td class="paramtype">void&#160;</td>
879           <td class="paramname"></td><td>)</td>
880           <td></td>
881         </tr>
882       </table>
883 </div><div class="memdoc">
884
885 <p>De-initialize SAI Interface. </p>
886 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
887 <p>The function <b>ARM_SAI_Uninitialize</b> de-initializes the resources of SAI interface.</p>
888 <p>It is called when the middleware component stops operation and releases the software resources used by the interface. </p>
889
890 </div>
891 </div>
892 <a id="gacdec50a3dd5902de601caa7397c1dabc" name="gacdec50a3dd5902de601caa7397c1dabc"></a>
893 <h2 class="memtitle"><span class="permalink"><a href="#gacdec50a3dd5902de601caa7397c1dabc">&#9670;&#160;</a></span>ARM_SAI_PowerControl()</h2>
894
895 <div class="memitem">
896 <div class="memproto">
897       <table class="memname">
898         <tr>
899           <td class="memname">int32_t ARM_SAI_PowerControl </td>
900           <td>(</td>
901           <td class="paramtype"><a class="el" href="group__common__drv__gr.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5">ARM_POWER_STATE</a>&#160;</td>
902           <td class="paramname"><em>state</em></td><td>)</td>
903           <td></td>
904         </tr>
905       </table>
906 </div><div class="memdoc">
907
908 <p>Control SAI Interface Power. </p>
909 <dl class="params"><dt>Parameters</dt><dd>
910   <table class="params">
911     <tr><td class="paramdir">[in]</td><td class="paramname">state</td><td>Power state </td></tr>
912   </table>
913   </dd>
914 </dl>
915 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
916 <p>The function <b>ARM_SAI_PowerControl</b> allows you to control the power modes of the SAI interface. <br  />
917 </p>
918 <p>The parameter <em>state</em> sets the operation and can have the following values:</p><ul>
919 <li><a class="el" href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5abed52b77a9ce4775570e44a842b1295e">ARM_POWER_FULL</a> : set-up peripheral for data transfers, enable interrupts (NVIC) and optionally DMA. Can be called multiple times. If the peripheral is already in this mode the function performs no operation and returns with <a class="el" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>.</li>
920 <li><a class="el" href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5a9ef9e57cbcc948d0e22314e73dc8c434">ARM_POWER_LOW</a> : may use power saving. Returns <a class="el" href="group__execution__status.html#ga2efa59e480d82697795439220e6884e4">ARM_DRIVER_ERROR_UNSUPPORTED</a> when not implemented.</li>
921 <li><a class="el" href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5ab6f5becc85ebd51c3dd2524a95d2ca35">ARM_POWER_OFF</a> : terminates any pending data transfers, disables peripheral, disables related interrupts and DMA.</li>
922 </ul>
923 <p>Refer to <a class="el" href="theoryOperation.html#CallSequence">Function Call Sequence</a> for more information. </p>
924
925 </div>
926 </div>
927 <a id="ga8bb6866c535adeb930bc4a847d476fcd" name="ga8bb6866c535adeb930bc4a847d476fcd"></a>
928 <h2 class="memtitle"><span class="permalink"><a href="#ga8bb6866c535adeb930bc4a847d476fcd">&#9670;&#160;</a></span>ARM_SAI_Send()</h2>
929
930 <div class="memitem">
931 <div class="memproto">
932       <table class="memname">
933         <tr>
934           <td class="memname">int32_t ARM_SAI_Send </td>
935           <td>(</td>
936           <td class="paramtype">const void *&#160;</td>
937           <td class="paramname"><em>data</em>, </td>
938         </tr>
939         <tr>
940           <td class="paramkey"></td>
941           <td></td>
942           <td class="paramtype">uint32_t&#160;</td>
943           <td class="paramname"><em>num</em>&#160;</td>
944         </tr>
945         <tr>
946           <td></td>
947           <td>)</td>
948           <td></td><td></td>
949         </tr>
950       </table>
951 </div><div class="memdoc">
952
953 <p>Start sending data to SAI transmitter. </p>
954 <dl class="params"><dt>Parameters</dt><dd>
955   <table class="params">
956     <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>Pointer to buffer with data to send to SAI transmitter </td></tr>
957     <tr><td class="paramdir">[in]</td><td class="paramname">num</td><td>Number of data items to send </td></tr>
958   </table>
959   </dd>
960 </dl>
961 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
962 <p>The function <b>ARM_SAI_Send</b> sends data to the SAI transmitter.</p>
963 <p>The function parameters specify the buffer with <em>data</em> and the number <em>num</em> of items to send. The item size is defined by the data type which depends on the configured number of data bits.</p>
964 <p>Data type is:</p><ul>
965 <li><em>uint8_t</em> when configured for <span class="XML-Token">8</span> data bits</li>
966 <li><em>uint16_t</em> when configured for <span class="XML-Token">9..16</span> data bits</li>
967 <li><em>uint32_t</em> when configured for <span class="XML-Token">17..32</span> data bits</li>
968 </ul>
969 <p>Transmitter is enabled by calling <a class="el" href="group__sai__interface__gr.html#ga405a0769c33da6801055db0fb9b6c869">ARM_SAI_Control</a> with <a class="el" href="group__sai__controls.html#ga74d7850973c095bb8dbffa880b4af1bc">ARM_SAI_CONTROL_TX</a> as the control parameter and <span class="XML-Token">1</span> as an argument. This starts the transmit engine which, generates a clock and frame sync signal in master mode and transmits the data. In slave mode, clock and frame sync are generated by the external master. When mute is active, data is discarded and zero values are transmitted.</p>
970 <p>Calling the function <b>ARM_SAI_Send</b> only starts the send operation. The function is non-blocking and returns as soon as the driver has started the operation (the driver typically configures DMA or the interrupt system for continuous transfer). During the operation it is not allowed to call this function again. Also, the data buffer must stay allocated and the contents of unsent data must not be modified. When the send operation is completed (requested number of items have been sent), the event <a class="el" href="group__SAI__events.html#ga3dfa64375859f40d157c224187d2885e">ARM_SAI_EVENT_SEND_COMPLETE</a> is generated. Progress of the send operation can be monitored by reading the number of already sent items by calling the function <a class="el" href="group__sai__interface__gr.html#gaa9805f9d32aee205f787e625a58e8898">ARM_SAI_GetTxCount</a>.</p>
971 <p>The status of the transmitter can also be monitored by calling the function <a class="el" href="group__sai__interface__gr.html#ga6a202b57697f0f7a9742e76b33d5eeec">ARM_SAI_GetStatus</a> and checking the <em>tx_busy</em> flag, which indicates if a transmission is still in progress.</p>
972 <p>If the transmitter is enabled and data is to be sent but the send operation has not been started yet, then the event <a class="el" href="group__SAI__events.html#ga6a0be7aaf9d700e5259f741641bc37ca">ARM_SAI_EVENT_TX_UNDERFLOW</a> is generated.</p>
973 <p>If an invalid synchronization frame is detected in slave mode, then the event <a class="el" href="group__SAI__events.html#ga6ffcf96fe404b48421a57fbd122b26bc">ARM_SAI_EVENT_FRAME_ERROR</a> is generated (if supported and reported by <em>event_frame_error</em> in <a class="el" href="group__sai__interface__gr.html#structARM__SAI__CAPABILITIES">ARM_SAI_CAPABILITIES</a>).</p>
974 <p>The send operation can be aborted by calling the function <a class="el" href="group__sai__interface__gr.html#ga405a0769c33da6801055db0fb9b6c869">ARM_SAI_Control</a> with the control parameter <a class="el" href="group__sai__controls.html#gab3ec8ef9e5e5a190bd2131ac8c99a240">ARM_SAI_ABORT_SEND</a>. </p>
975
976 </div>
977 </div>
978 <a id="ga2d55f506cef9d2849cbe418146086d98" name="ga2d55f506cef9d2849cbe418146086d98"></a>
979 <h2 class="memtitle"><span class="permalink"><a href="#ga2d55f506cef9d2849cbe418146086d98">&#9670;&#160;</a></span>ARM_SAI_Receive()</h2>
980
981 <div class="memitem">
982 <div class="memproto">
983       <table class="memname">
984         <tr>
985           <td class="memname">int32_t ARM_SAI_Receive </td>
986           <td>(</td>
987           <td class="paramtype">void *&#160;</td>
988           <td class="paramname"><em>data</em>, </td>
989         </tr>
990         <tr>
991           <td class="paramkey"></td>
992           <td></td>
993           <td class="paramtype">uint32_t&#160;</td>
994           <td class="paramname"><em>num</em>&#160;</td>
995         </tr>
996         <tr>
997           <td></td>
998           <td>)</td>
999           <td></td><td></td>
1000         </tr>
1001       </table>
1002 </div><div class="memdoc">
1003
1004 <p>Start receiving data from SAI receiver. </p>
1005 <dl class="params"><dt>Parameters</dt><dd>
1006   <table class="params">
1007     <tr><td class="paramdir">[out]</td><td class="paramname">data</td><td>Pointer to buffer for data to receive from SAI receiver </td></tr>
1008     <tr><td class="paramdir">[in]</td><td class="paramname">num</td><td>Number of data items to receive </td></tr>
1009   </table>
1010   </dd>
1011 </dl>
1012 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1013 <p>The function <b>ARM_SAI_Receive</b> is used to receive data from the SAI receiver. The function parameters specify the buffer for <em>data</em> and the number <em>num</em> of items to receive. The item size is defined by the data type, which depends on the configured number of data bits.</p>
1014 <p>Data type is:</p><ul>
1015 <li><em>uint8_t</em> when configured for <span class="XML-Token">8</span> data bits</li>
1016 <li><em>uint16_t</em> when configured for <span class="XML-Token">9..16</span> data bits</li>
1017 <li><em>uint32_t</em> when configured for <span class="XML-Token">17..32</span> data bits</li>
1018 </ul>
1019 <p>The receiver is enabled by calling the function <a class="el" href="group__sai__interface__gr.html#ga405a0769c33da6801055db0fb9b6c869">ARM_SAI_Control</a> with the control parameter <a class="el" href="group__sai__controls.html#gaa40390b6dd0df3b140fdc45bb7b1439d">ARM_SAI_CONTROL_RX</a> and the value <span class="XML-Token">1</span> for the parameter <em>arg1</em>. This starts the receive engine, which generates a clock and frame sync signal in master mode and receives data. In slave mode, clock and frame sync are generated by the external master.</p>
1020 <p>Calling the function <b>ARM_SAI_Receive</b> only starts the receive operation. The function is non-blocking and returns as soon as the driver has started the operation (the driver typically configures DMA or the interrupt system for continuous transfer). During the operation, it is not allowed to call this function again. The data buffer must also stay allocated. When receive operation is completed (the requested number of items have been received), the <a class="el" href="group__SAI__events.html#ga5a9bde0b096aafe53279529a0adbef55">ARM_SAI_EVENT_RECEIVE_COMPLETE</a> event is generated. Progress of the receive operation can also be monitored by reading the number of items already received by calling the function <a class="el" href="group__sai__interface__gr.html#ga2c571fcc8b9632c25a64043bc2b2baec">ARM_SAI_GetRxCount</a>.</p>
1021 <p>The status of the receiver can also be monitored by calling the function <a class="el" href="group__sai__interface__gr.html#ga6a202b57697f0f7a9742e76b33d5eeec">ARM_SAI_GetStatus</a> and checking the <em>rx_busy</em> flag, which indicates whether a reception is still in progress.</p>
1022 <p>When the receiver is enabled and data is received but the receive operation has not been started yet, then the event <a class="el" href="group__SAI__events.html#gac83e9df0238803ef2c88f16605f73bf5">ARM_SAI_EVENT_RX_OVERFLOW</a> is generated.</p>
1023 <p>If an invalid synchronization frame is detected in slave mode, then the event <a class="el" href="group__SAI__events.html#ga6ffcf96fe404b48421a57fbd122b26bc">ARM_SAI_EVENT_FRAME_ERROR</a> is generated (if supported and reported by <em>event_frame_error</em> in <a class="el" href="group__sai__interface__gr.html#structARM__SAI__CAPABILITIES">ARM_SAI_CAPABILITIES</a>).</p>
1024 <p>The receive operation can be aborted by calling the function <a class="el" href="group__sai__interface__gr.html#ga405a0769c33da6801055db0fb9b6c869">ARM_SAI_Control</a> with the control parameter <a class="el" href="group__sai__controls.html#ga2b8d3d85c1e60f137f8c433f319244cb">ARM_SAI_ABORT_RECEIVE</a>. </p>
1025
1026 </div>
1027 </div>
1028 <a id="gaa9805f9d32aee205f787e625a58e8898" name="gaa9805f9d32aee205f787e625a58e8898"></a>
1029 <h2 class="memtitle"><span class="permalink"><a href="#gaa9805f9d32aee205f787e625a58e8898">&#9670;&#160;</a></span>ARM_SAI_GetTxCount()</h2>
1030
1031 <div class="memitem">
1032 <div class="memproto">
1033       <table class="memname">
1034         <tr>
1035           <td class="memname">uint32_t ARM_SAI_GetTxCount </td>
1036           <td>(</td>
1037           <td class="paramtype">void&#160;</td>
1038           <td class="paramname"></td><td>)</td>
1039           <td></td>
1040         </tr>
1041       </table>
1042 </div><div class="memdoc">
1043
1044 <p>Get transmitted data count. </p>
1045 <dl class="section return"><dt>Returns</dt><dd>number of data items transmitted</dd></dl>
1046 <p>The function <b>ARM_SAI_GetTxCount</b> returns the number of the currently transmitted data items during an <a class="el" href="group__sai__interface__gr.html#ga8bb6866c535adeb930bc4a847d476fcd">ARM_SAI_Send</a> operation. </p>
1047
1048 </div>
1049 </div>
1050 <a id="ga2c571fcc8b9632c25a64043bc2b2baec" name="ga2c571fcc8b9632c25a64043bc2b2baec"></a>
1051 <h2 class="memtitle"><span class="permalink"><a href="#ga2c571fcc8b9632c25a64043bc2b2baec">&#9670;&#160;</a></span>ARM_SAI_GetRxCount()</h2>
1052
1053 <div class="memitem">
1054 <div class="memproto">
1055       <table class="memname">
1056         <tr>
1057           <td class="memname">uint32_t ARM_SAI_GetRxCount </td>
1058           <td>(</td>
1059           <td class="paramtype">void&#160;</td>
1060           <td class="paramname"></td><td>)</td>
1061           <td></td>
1062         </tr>
1063       </table>
1064 </div><div class="memdoc">
1065
1066 <p>Get received data count. </p>
1067 <dl class="section return"><dt>Returns</dt><dd>number of data items received</dd></dl>
1068 <p>The function <b>ARM_SAI_GetRxCount</b> returns the number of the currently received data items during an <a class="el" href="group__sai__interface__gr.html#ga2d55f506cef9d2849cbe418146086d98">ARM_SAI_Receive</a> operation. </p>
1069
1070 </div>
1071 </div>
1072 <a id="ga405a0769c33da6801055db0fb9b6c869" name="ga405a0769c33da6801055db0fb9b6c869"></a>
1073 <h2 class="memtitle"><span class="permalink"><a href="#ga405a0769c33da6801055db0fb9b6c869">&#9670;&#160;</a></span>ARM_SAI_Control()</h2>
1074
1075 <div class="memitem">
1076 <div class="memproto">
1077       <table class="memname">
1078         <tr>
1079           <td class="memname">int32_t ARM_SAI_Control </td>
1080           <td>(</td>
1081           <td class="paramtype">uint32_t&#160;</td>
1082           <td class="paramname"><em>control</em>, </td>
1083         </tr>
1084         <tr>
1085           <td class="paramkey"></td>
1086           <td></td>
1087           <td class="paramtype">uint32_t&#160;</td>
1088           <td class="paramname"><em>arg1</em>, </td>
1089         </tr>
1090         <tr>
1091           <td class="paramkey"></td>
1092           <td></td>
1093           <td class="paramtype">uint32_t&#160;</td>
1094           <td class="paramname"><em>arg2</em>&#160;</td>
1095         </tr>
1096         <tr>
1097           <td></td>
1098           <td>)</td>
1099           <td></td><td></td>
1100         </tr>
1101       </table>
1102 </div><div class="memdoc">
1103
1104 <p>Control SAI Interface. </p>
1105 <dl class="params"><dt>Parameters</dt><dd>
1106   <table class="params">
1107     <tr><td class="paramdir">[in]</td><td class="paramname">control</td><td>Operation </td></tr>
1108     <tr><td class="paramdir">[in]</td><td class="paramname">arg1</td><td>Argument 1 of operation (optional) </td></tr>
1109     <tr><td class="paramdir">[in]</td><td class="paramname">arg2</td><td>Argument 2 of operation (optional) </td></tr>
1110   </table>
1111   </dd>
1112 </dl>
1113 <dl class="section return"><dt>Returns</dt><dd>common <a class="el" href="group__execution__status.html">Status Error Codes</a> and driver specific <a class="el" href="group__sai__execution__status.html">SAI Status Error Codes</a></dd></dl>
1114 <p>The function <b>ARM_SAI_Control</b> controls the SAI interface and executes various operations.</p>
1115 <p>The parameter <em>control</em> specifies the operation. Values are listed in the table <a href="#sai_contrl_tab"><b>Parameter <em>control</em></b></a>.<br  />
1116 The parameter <em>arg1</em> provides, depending on the operation, additional information or sets values. Refer to table <a href="#sai_arg1_tab"><b>Parameter <em>arg1</em></b></a>. <br  />
1117 The parameter <em>arg2</em> provides, depending on the operation and/or <em>arg1</em>, additional information or sets values.</p>
1118 <p>The driver provides a receiver/transmitter pair of signals. In asynchronous operation mode, they operate completely independent from each other. In synchronous operation mode, the synchronous channel uses the Clock (SCK) and Frame Sync (WS) signal from the asynchronous one (control category <a href="#sai_sync"><b>Synchronization</b></a>).</p>
1119 <p>The clock polarity can be set for every protocol, regardless whether it is already predefined for I2S, MSB/LSB Jusitified (control category <a href="#sai_clk_polarity"><b>Clock Polarity</b></a>).</p>
1120 <p>A master clock provides a faster clock from which the frame can be derived (usually 256 x faster than the normal frame clock). You can use a master clock only in master mode. A slave will always have only one clock (control category <a href="#master_clock"><b>Master Clock pin (MCLK)</b></a>).</p>
1121 <p><a class="anchor" id="sai_contrl_tab"></a> <br  />
1122  The table lists the operation values for <em>control</em>. Values from different categories can be ORed. </p><table class="cmtable">
1123 <tr>
1124 <th>Parameter <em>control</em> </th><th>Bit </th><th>Category  </th><th>Description  </th></tr>
1125 <tr>
1126 <td><a class="el" href="group__sai__controls.html#ga14ac7775060e731b26bc5b3acd2f317a">ARM_SAI_CONFIGURE_TX</a> </td><td rowspan="8" style="text-align:right">0..7 </td><td rowspan="8">Operation  </td><td>Configure transmitter. <em>arg1</em> (see <a href="#sai_arg1_tab"><b>Parameter <em>arg1</em></b></a>) and <em>arg2</em> provide additional configuration.  </td></tr>
1127 <tr>
1128 <td><a class="el" href="group__sai__controls.html#gaba3e824e022fe2a5736de5dcbbd3d291">ARM_SAI_CONFIGURE_RX</a>  </td><td>Configure receiver. <em>arg1</em> (see <a href="#sai_arg1_tab"><b>Parameter <em>arg1</em></b></a>) and <em>arg2</em> provide additional configuration.  </td></tr>
1129 <tr>
1130 <td><a class="el" href="group__sai__controls.html#ga74d7850973c095bb8dbffa880b4af1bc">ARM_SAI_CONTROL_TX</a>  </td><td>Enable or disable transmitter and control mute; <em>arg1.0</em> : <span class="XML-Token">0=disable (default); 1=enable;</span> <em>arg1.1</em> : <span class="XML-Token">mute</span> (see <a class="el" href="group__sai__interface__gr.html#ga8bb6866c535adeb930bc4a847d476fcd">ARM_SAI_Send</a>)  </td></tr>
1131 <tr>
1132 <td><a class="el" href="group__sai__controls.html#gaa40390b6dd0df3b140fdc45bb7b1439d">ARM_SAI_CONTROL_RX</a>  </td><td>Enable or disable receiver; <em>arg1.0</em> : <span class="XML-Token">0=disable (default); 1=enable</span> (see <a class="el" href="group__sai__interface__gr.html#ga2d55f506cef9d2849cbe418146086d98">ARM_SAI_Receive</a>)  </td></tr>
1133 <tr>
1134 <td><a class="el" href="group__sai__controls.html#ga8675b9776189caf4df7d558b3e18fcba">ARM_SAI_MASK_SLOTS_TX</a>  </td><td>Mask transmitter slots; <em>arg1</em> = <span class="XML-Token">mask</span> (bit: 0=active, 1=inactive); all configured slots are active by default.  </td></tr>
1135 <tr>
1136 <td><a class="el" href="group__sai__controls.html#ga84302d372185665852c9ed941c6545e0">ARM_SAI_MASK_SLOTS_RX</a>  </td><td>Mask receiver slots; <em>arg1</em> = <span class="XML-Token">mask</span> (bit: 0=active, 1=inactive); all configured slots are active by default.  </td></tr>
1137 <tr>
1138 <td><a class="el" href="group__sai__controls.html#gab3ec8ef9e5e5a190bd2131ac8c99a240">ARM_SAI_ABORT_SEND</a>  </td><td>Abort send operation (see <a class="el" href="group__sai__interface__gr.html#ga8bb6866c535adeb930bc4a847d476fcd">ARM_SAI_Send</a>).  </td></tr>
1139 <tr>
1140 <td><a class="el" href="group__sai__controls.html#ga2b8d3d85c1e60f137f8c433f319244cb">ARM_SAI_ABORT_RECEIVE</a>  </td><td>Abort receive operation (see <a class="el" href="group__sai__interface__gr.html#ga2d55f506cef9d2849cbe418146086d98">ARM_SAI_Receive</a>).  </td></tr>
1141 <tr>
1142 <td><a class="el" href="group__sai__mode__control.html#ga5bedff714ea0f90139665b72d44daddc">ARM_SAI_MODE_MASTER</a> </td><td rowspan="2" style="text-align:right">8 </td><td rowspan="2">Mode  </td><td>Master mode. <em>arg2</em> specifies the audio frequency in [Hz]. You can also set the <a href="#master_clock"><b>Master Clock pin</b></a>. </td></tr>
1143 <tr>
1144 <td><a class="el" href="group__sai__mode__control.html#ga5956c12a24a506754ecc7999f0660bb5">ARM_SAI_MODE_SLAVE</a> (default)  </td><td>Slave mode.  </td></tr>
1145 <tr>
1146 <td><a class="el" href="group__sai__sync__control.html#gad123537cb6ab9eefd6feab193ed74655">ARM_SAI_ASYNCHRONOUS</a> (default)<a class="anchor" id="sai_sync"></a></td><td rowspan="2" style="text-align:right">9 </td><td rowspan="2">Synchronization  </td><td>Asynchronous operation using own clock and sync signal.  </td></tr>
1147 <tr>
1148 <td><a class="el" href="group__sai__sync__control.html#gad2ad5406c30c353e80f54b40b3de5db8">ARM_SAI_SYNCHRONOUS</a>  </td><td>Synchronous operation using clock and sync signal from other transmitter/receiver.  </td></tr>
1149 <tr>
1150 <td><a class="el" href="group__sai__protocol__control.html#gacef87941052c21ebacd3dde6ce9d6925">ARM_SAI_PROTOCOL_USER</a> (default) </td><td rowspan="7" style="text-align:right">10..12 </td><td rowspan="7">Protocol  </td><td>User defined  </td></tr>
1151 <tr>
1152 <td><a class="el" href="group__sai__protocol__control.html#gaaaf423bbe59920b3c7813e22ce083ddc">ARM_SAI_PROTOCOL_I2S</a>  </td><td>I2C  </td></tr>
1153 <tr>
1154 <td><a class="el" href="group__sai__protocol__control.html#gad931f9e8aedff4e6040d726d707862f0">ARM_SAI_PROTOCOL_MSB_JUSTIFIED</a>  </td><td>MSB (left) justified  </td></tr>
1155 <tr>
1156 <td><a class="el" href="group__sai__protocol__control.html#gab88b6f9b61a20927ac8f8d39e46c6349">ARM_SAI_PROTOCOL_LSB_JUSTIFIED</a>  </td><td>LSB (right) justified  </td></tr>
1157 <tr>
1158 <td><a class="el" href="group__sai__protocol__control.html#ga3762437e0b1402b5d4fd293ae745f103">ARM_SAI_PROTOCOL_PCM_SHORT</a>  </td><td>PCM with short frame  </td></tr>
1159 <tr>
1160 <td><a class="el" href="group__sai__protocol__control.html#gad43530c5b6ae1e89db587b20d71440b4">ARM_SAI_PROTOCOL_PCM_LONG</a>  </td><td>PCM with long frame  </td></tr>
1161 <tr>
1162 <td><a class="el" href="group__sai__protocol__control.html#ga8b1669910f4db4bb3584543e7eb04d7a">ARM_SAI_PROTOCOL_AC97</a>  </td><td>AC'97  </td></tr>
1163 <tr>
1164 <td><a class="el" href="group__sai__data__bits__control.html#ga1a7529e4b46d69dbd57ccef84552a3f4">ARM_SAI_DATA_SIZE(n)</a> </td><td style="text-align:right">13..17 </td><td>Data Size  <br  />
1165  </td><td>Data size in bits; the range for <em>n</em> is <span class="XML-Token">8..32</span>. See also: <a href="#frame_slot_size"><b>Frame Slot Size</b></a>.  </td></tr>
1166 <tr>
1167 <td><a class="el" href="group__sai__bit__order__control.html#gaf74bfe9c3005bf3b80d69f112ea9e62b">ARM_SAI_MSB_FIRST</a> </td><td rowspan="2" style="text-align:right">18 </td><td rowspan="2">Bit Order  <br  />
1168  </td><td>Data is transferred with MSB first.  </td></tr>
1169 <tr>
1170 <td><a class="el" href="group__sai__bit__order__control.html#ga19b51b75537b030b975efcf68f3db78b">ARM_SAI_LSB_FIRST</a>  </td><td>Data is transferred with LSB first (User protocol only, ignored otherwise).  </td></tr>
1171 <tr>
1172 <td><a class="el" href="group__sai__mono__control.html#ga0adcd27875d92add813b9664e9cb0b4b">ARM_SAI_MONO_MODE</a> </td><td style="text-align:right">19 </td><td>Mono Mode <br  />
1173  </td><td>Only for I2S, MSB/LSB justified. When using <a class="el" href="group__sai__interface__gr.html#Driver_SAI_I2S">I2S</a> in mono mode, only data for a single channel is sent to and received from the driver. Hardware will duplicate the data for the second channel on transmit and ignore the second channel on receive.  </td></tr>
1174 <tr>
1175 <td><a class="el" href="group__sai__companding__control.html#ga185919d553cf9204e514136eb375ef08">ARM_SAI_COMPANDING_NONE</a> (default) </td><td rowspan="3" style="text-align:right">20..22 </td><td rowspan="3">Companding  </td><td>No companding  </td></tr>
1176 <tr>
1177 <td><a class="el" href="group__sai__companding__control.html#gacfd6c74148c0ae90aa6eaaf8e69da3a9">ARM_SAI_COMPANDING_A_LAW</a>  <br  />
1178  </td><td>A-Law companding (8-bit data)  </td></tr>
1179 <tr>
1180 <td><a class="el" href="group__sai__companding__control.html#ga7b571406bcce383140198e53312faee5">ARM_SAI_COMPANDING_U_LAW</a>  <br  />
1181  </td><td>u-Law companding (8-bit data)  </td></tr>
1182 <tr>
1183 <td><a class="el" href="group__sai__clock__pol__control.html#ga4311b6b6fd937d6ac37aa2d031a5d5ee">ARM_SAI_CLOCK_POLARITY_0</a> &#160;(default)<a class="anchor" id="sai_clk_polarity"></a>&gt; </td><td rowspan="2" style="text-align:right">23 </td><td rowspan="2">Clock Polarity  </td><td>Drive on falling edge, capture on rising edge.  </td></tr>
1184 <tr>
1185 <td><a class="el" href="group__sai__clock__pol__control.html#gae4c9b9abd3b7390810a5494363875a53">ARM_SAI_CLOCK_POLARITY_1</a> &#160;<a class="anchor" id="master_clock"></a> </td><td>Drive on rising edge, capture on falling edge.  </td></tr>
1186 <tr>
1187 <td><a class="el" href="group__sai__mclk__pin__control.html#ga7654bffb42e96d48df57c598323337d6">ARM_SAI_MCLK_PIN_INACTIVE</a> &#160;(default) </td><td rowspan="3" style="text-align:right">24..26 </td><td rowspan="3">Master Clock pin (MCLK)  </td><td>MCLK not used.  </td></tr>
1188 <tr>
1189 <td><a class="el" href="group__sai__mclk__pin__control.html#ga24d99edf05699eff32da02742fb04ced">ARM_SAI_MCLK_PIN_OUTPUT</a>  <br  />
1190  </td><td>MCLK is output (Master mode only).  </td></tr>
1191 <tr>
1192 <td><a class="el" href="group__sai__mclk__pin__control.html#ga2cd610be9ba9532b2926376deaacf5ad">ARM_SAI_MCLK_PIN_INPUT</a>  <br  />
1193  </td><td>MCLK is input (Master mode only).  </td></tr>
1194 </table>
1195 <p><a class="anchor" id="sai_arg1_tab"></a>The parameter <em>arg1</em> provides frame-specific values depending on the <em>control</em> operation. Values from different categories can be ORed. </p><table class="cmtable">
1196 <tr>
1197 <th nowrap="nowrap">Parameter <em>arg1</em>  </th><th style="text-align:right">Bit  </th><th>Category  </th><th>Description  </th></tr>
1198 <tr>
1199 <td><a class="el" href="group__sai__frame__control.html#ga4c557aa02c83b8595be23a6c58d284e9">ARM_SAI_FRAME_LENGTH(n)</a>  </td><td style="text-align:right">0..9  </td><td>Frame Length  </td><td>Frame length in bits; the possible range for <em>n</em> is <span class="XML-Token">8..1024</span>; default depends on protocol and data.  </td></tr>
1200 <tr>
1201 <td><a class="el" href="group__sai__frame__control.html#gae165fd96e6a5b06b362954fadeabcb7a">ARM_SAI_FRAME_SYNC_WIDTH(n)</a> </td><td style="text-align:right">10..17  </td><td>Frame Sync Width  </td><td>Frame Sync width in bits; the possible range for <em>n</em> is <span class="XML-Token">1..256</span>; <span class="XML-Token">default=1</span>; User protocol only, ignored otherwise.  </td></tr>
1202 <tr>
1203 <td><a class="el" href="group__sai__frame__control.html#ga7be0326e15d61d6c67febb22f5b14d58">ARM_SAI_FRAME_SYNC_POLARITY_HIGH</a>  </td><td rowspan="2" style="text-align:right">18  </td><td rowspan="2" style="white-spaces:nowrap">Frame Sync Polarity  </td><td>Frame Sync is active high (default).  </td></tr>
1204 <tr>
1205 <td><a class="el" href="group__sai__frame__control.html#gaf3d6bdbc05379ac30905cecf1b2d917e">ARM_SAI_FRAME_SYNC_POLARITY_LOW</a>  </td><td>Frame Sync is active low (User protocol only, ignored otherwise).  </td></tr>
1206 <tr>
1207 <td><a class="el" href="group__sai__frame__control.html#gabec3992447436a2a8ed99108908ae208">ARM_SAI_FRAME_SYNC_EARLY</a>  </td><td style="text-align:right">19  </td><td>Frame Sync Early  </td><td>Frame Sync one bit before the first bit of the frame (User protocol only, ignored otherwise).  </td></tr>
1208 <tr>
1209 <td><a class="el" href="group__sai__slot__control.html#ga8f2cf3a212ca7fe389e00b082efb5d0b">ARM_SAI_SLOT_COUNT(n)</a>  </td><td style="text-align:right">20..24  </td><td>Frame Sync Count  </td><td>Number of slots in frame; the possible range for <em>n</em> is <span class="XML-Token">1..32</span>; default=<span class="XML-Token">1</span>; User protocol only, ignored otherwise.  </td></tr>
1210 <tr>
1211 <td><a class="el" href="group__sai__slot__control.html#gad77c6c0de2a4e7223a0c42e1594f0a2c">ARM_SAI_SLOT_SIZE_DEFAULT</a> &#160;<a class="anchor" id="frame_slot_size"></a>  </td><td rowspan="3" style="text-align:right">25..26  </td><td rowspan="3">Frame Slot Size  </td><td>Slot size is equal to data size (default).  </td></tr>
1212 <tr>
1213 <td><a class="el" href="group__sai__slot__control.html#ga2bb9cf53b07cac81fb0fe71de6c97c83">ARM_SAI_SLOT_SIZE_16</a>  </td><td>Slot size is <span class="XML-Token">16 bits</span> (User protocol only, ignored otherwise).  </td></tr>
1214 <tr>
1215 <td><a class="el" href="group__sai__slot__control.html#gaaa5c4cc18a0f5668bc9f117874cd83dd">ARM_SAI_SLOT_SIZE_32</a>  </td><td>Slot size is <span class="XML-Token">32 bits</span> (User protocol only, ignored otherwise).  </td></tr>
1216 <tr>
1217 <td><a class="el" href="group__sai__slot__control.html#ga48d4a142f3a1bb0fa4e88c9e427932a0">ARM_SAI_SLOT_OFFSET(n)</a>  </td><td style="text-align:right">27..31  </td><td>Frame Slot Offset  </td><td>Offset of first data bit in slot; The range for <em>n</em> is <span class="XML-Token">0..31</span>; default=<span class="XML-Token">0</span>; User protocol only, ignored otherwise.  </td></tr>
1218 </table>
1219 <p><a class="anchor" id="mckl_prescaler"></a>Depending on the <em>control</em> operation, the parameter <em>arg2</em> specifies the Master Clock (MCLK) prescaler and calculates the audio frequency automatically.</p>
1220 <table class="markdownTable">
1221 <tr class="markdownTableHead">
1222 <th class="markdownTableHeadLeft">Parameter <em>arg2</em>   </th><th class="markdownTableHeadLeft">MCLK Prescaler    </th></tr>
1223 <tr class="markdownTableRowOdd">
1224 <td class="markdownTableBodyLeft"><a class="el" href="group__sai__mclk__pres__control.html#ga2afa85cd335e75d8b9b06c9f47f3f4b0">ARM_SAI_MCLK_PRESCALER(n)</a>   </td><td class="markdownTableBodyLeft">MCLK prescaler; Audio frequency = MCLK/n; the range for <em>n</em> is <span class="XML-Token">1..4096</span>; default=<span class="XML-Token">1</span>.   </td></tr>
1225 </table>
1226 <p><b>Example</b> </p>
1227 <div class="fragment"><div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__sai__interface__gr.html#structARM__DRIVER__SAI">ARM_DRIVER_SAI</a> Driver_SAI0;</div>
1228 <div class="line"> </div>
1229 <div class="line"><span class="comment">// configure Transmitter to Asynchronous Master: I2S Protocol, 16-bit data, 16kHz Audio frequency</span></div>
1230 <div class="line">status = Driver_SAI0.<a class="code hl_variable" href="group__sai__interface__gr.html#a35af88ef40558504080c3f2a1d5af55a">Control</a>(<a class="code hl_define" href="group__sai__controls.html#ga14ac7775060e731b26bc5b3acd2f317a">ARM_SAI_CONFIGURE_TX</a> | </div>
1231 <div class="line">                             <a class="code hl_define" href="group__sai__mode__control.html#ga5bedff714ea0f90139665b72d44daddc">ARM_SAI_MODE_MASTER</a>  | </div>
1232 <div class="line">                             <a class="code hl_define" href="group__sai__sync__control.html#gad123537cb6ab9eefd6feab193ed74655">ARM_SAI_ASYNCHRONOUS</a> | </div>
1233 <div class="line">                             <a class="code hl_define" href="group__sai__protocol__control.html#gaaaf423bbe59920b3c7813e22ce083ddc">ARM_SAI_PROTOCOL_I2S</a> | </div>
1234 <div class="line">                             <a class="code hl_define" href="group__sai__data__bits__control.html#ga1a7529e4b46d69dbd57ccef84552a3f4">ARM_SAI_DATA_SIZE</a>(16), 0, 16000);</div>
1235 <div class="line"> </div>
1236 <div class="line"><span class="comment">// configure Receiver to Asynchronous Master: I2S Protocol, 16-bit data, 16kHz Audio frequency</span></div>
1237 <div class="line">status = Driver_SAI0.<a class="code hl_variable" href="group__sai__interface__gr.html#a35af88ef40558504080c3f2a1d5af55a">Control</a>(<a class="code hl_define" href="group__sai__controls.html#gaba3e824e022fe2a5736de5dcbbd3d291">ARM_SAI_CONFIGURE_RX</a> | </div>
1238 <div class="line">                             <a class="code hl_define" href="group__sai__mode__control.html#ga5bedff714ea0f90139665b72d44daddc">ARM_SAI_MODE_MASTER</a>  | </div>
1239 <div class="line">                             <a class="code hl_define" href="group__sai__sync__control.html#gad123537cb6ab9eefd6feab193ed74655">ARM_SAI_ASYNCHRONOUS</a> | </div>
1240 <div class="line">                             <a class="code hl_define" href="group__sai__protocol__control.html#gaaaf423bbe59920b3c7813e22ce083ddc">ARM_SAI_PROTOCOL_I2S</a> | </div>
1241 <div class="line">                             <a class="code hl_define" href="group__sai__data__bits__control.html#ga1a7529e4b46d69dbd57ccef84552a3f4">ARM_SAI_DATA_SIZE</a>(16), 0, 16000);</div>
1242 <div class="line"> </div>
1243 <div class="line"><span class="comment">// enable Transmitter</span></div>
1244 <div class="line">status = Driver_SAI0.<a class="code hl_variable" href="group__sai__interface__gr.html#a35af88ef40558504080c3f2a1d5af55a">Control</a>(<a class="code hl_define" href="group__sai__controls.html#ga74d7850973c095bb8dbffa880b4af1bc">ARM_SAI_CONTROL_TX</a>, 1, 0);</div>
1245 <div class="line"> </div>
1246 <div class="line"><span class="comment">// enable Receiver</span></div>
1247 <div class="line">status = Driver_SAI0.<a class="code hl_variable" href="group__sai__interface__gr.html#a35af88ef40558504080c3f2a1d5af55a">Control</a>(<a class="code hl_define" href="group__sai__controls.html#gaa40390b6dd0df3b140fdc45bb7b1439d">ARM_SAI_CONTROL_RX</a>, 1, 0);</div>
1248 <div class="ttc" id="agroup__sai__controls_html_ga14ac7775060e731b26bc5b3acd2f317a"><div class="ttname"><a href="group__sai__controls.html#ga14ac7775060e731b26bc5b3acd2f317a">ARM_SAI_CONFIGURE_TX</a></div><div class="ttdeci">#define ARM_SAI_CONFIGURE_TX</div><div class="ttdoc">Configure Transmitter; arg1 and arg2 provide additional configuration.</div></div>
1249 <div class="ttc" id="agroup__sai__controls_html_ga74d7850973c095bb8dbffa880b4af1bc"><div class="ttname"><a href="group__sai__controls.html#ga74d7850973c095bb8dbffa880b4af1bc">ARM_SAI_CONTROL_TX</a></div><div class="ttdeci">#define ARM_SAI_CONTROL_TX</div><div class="ttdoc">Control Transmitter; arg1.0: 0=disable (default), 1=enable; arg1.1: mute.</div></div>
1250 <div class="ttc" id="agroup__sai__controls_html_gaa40390b6dd0df3b140fdc45bb7b1439d"><div class="ttname"><a href="group__sai__controls.html#gaa40390b6dd0df3b140fdc45bb7b1439d">ARM_SAI_CONTROL_RX</a></div><div class="ttdeci">#define ARM_SAI_CONTROL_RX</div><div class="ttdoc">Control Receiver; arg1.0: 0=disable (default), 1=enable.</div></div>
1251 <div class="ttc" id="agroup__sai__controls_html_gaba3e824e022fe2a5736de5dcbbd3d291"><div class="ttname"><a href="group__sai__controls.html#gaba3e824e022fe2a5736de5dcbbd3d291">ARM_SAI_CONFIGURE_RX</a></div><div class="ttdeci">#define ARM_SAI_CONFIGURE_RX</div><div class="ttdoc">Configure Receiver; arg1 and arg2 provide additional configuration.</div></div>
1252 <div class="ttc" id="agroup__sai__data__bits__control_html_ga1a7529e4b46d69dbd57ccef84552a3f4"><div class="ttname"><a href="group__sai__data__bits__control.html#ga1a7529e4b46d69dbd57ccef84552a3f4">ARM_SAI_DATA_SIZE</a></div><div class="ttdeci">#define ARM_SAI_DATA_SIZE(n)</div><div class="ttdoc">Data size in bits (8..32)</div></div>
1253 <div class="ttc" id="agroup__sai__interface__gr_html_a35af88ef40558504080c3f2a1d5af55a"><div class="ttname"><a href="group__sai__interface__gr.html#a35af88ef40558504080c3f2a1d5af55a">ARM_DRIVER_SAI::Control</a></div><div class="ttdeci">int32_t(* Control)(uint32_t control, uint32_t arg1, uint32_t arg2)</div><div class="ttdoc">Pointer to ARM_SAI_Control : Control SAI Interface.</div><div class="ttdef"><b>Definition:</b> Driver_SAI.h:307</div></div>
1254 <div class="ttc" id="agroup__sai__mode__control_html_ga5bedff714ea0f90139665b72d44daddc"><div class="ttname"><a href="group__sai__mode__control.html#ga5bedff714ea0f90139665b72d44daddc">ARM_SAI_MODE_MASTER</a></div><div class="ttdeci">#define ARM_SAI_MODE_MASTER</div><div class="ttdoc">Master Mode.</div></div>
1255 <div class="ttc" id="agroup__sai__protocol__control_html_gaaaf423bbe59920b3c7813e22ce083ddc"><div class="ttname"><a href="group__sai__protocol__control.html#gaaaf423bbe59920b3c7813e22ce083ddc">ARM_SAI_PROTOCOL_I2S</a></div><div class="ttdeci">#define ARM_SAI_PROTOCOL_I2S</div><div class="ttdoc">I2S.</div></div>
1256 <div class="ttc" id="agroup__sai__sync__control_html_gad123537cb6ab9eefd6feab193ed74655"><div class="ttname"><a href="group__sai__sync__control.html#gad123537cb6ab9eefd6feab193ed74655">ARM_SAI_ASYNCHRONOUS</a></div><div class="ttdeci">#define ARM_SAI_ASYNCHRONOUS</div><div class="ttdoc">Asynchronous (default)</div></div>
1257 </div><!-- fragment --> 
1258 </div>
1259 </div>
1260 <a id="ga6a202b57697f0f7a9742e76b33d5eeec" name="ga6a202b57697f0f7a9742e76b33d5eeec"></a>
1261 <h2 class="memtitle"><span class="permalink"><a href="#ga6a202b57697f0f7a9742e76b33d5eeec">&#9670;&#160;</a></span>ARM_SAI_GetStatus()</h2>
1262
1263 <div class="memitem">
1264 <div class="memproto">
1265       <table class="memname">
1266         <tr>
1267           <td class="memname"><a class="el" href="group__sai__interface__gr.html#structARM__SAI__STATUS">ARM_SAI_STATUS</a> ARM_SAI_GetStatus </td>
1268           <td>(</td>
1269           <td class="paramtype">void&#160;</td>
1270           <td class="paramname"></td><td>)</td>
1271           <td></td>
1272         </tr>
1273       </table>
1274 </div><div class="memdoc">
1275
1276 <p>Get SAI status. </p>
1277 <dl class="section return"><dt>Returns</dt><dd>SAI status <a class="el" href="group__sai__interface__gr.html#structARM__SAI__STATUS">ARM_SAI_STATUS</a></dd></dl>
1278 <p>The function <b>ARM_SAI_GetStatus</b> retrieves the current SAI interface status. </p>
1279
1280 </div>
1281 </div>
1282 <a id="gaedf3347cb25d6bf2faad1bbb35ad79f4" name="gaedf3347cb25d6bf2faad1bbb35ad79f4"></a>
1283 <h2 class="memtitle"><span class="permalink"><a href="#gaedf3347cb25d6bf2faad1bbb35ad79f4">&#9670;&#160;</a></span>ARM_SAI_SignalEvent()</h2>
1284
1285 <div class="memitem">
1286 <div class="memproto">
1287       <table class="memname">
1288         <tr>
1289           <td class="memname">void ARM_SAI_SignalEvent </td>
1290           <td>(</td>
1291           <td class="paramtype">uint32_t&#160;</td>
1292           <td class="paramname"><em>event</em></td><td>)</td>
1293           <td></td>
1294         </tr>
1295       </table>
1296 </div><div class="memdoc">
1297
1298 <p>Signal SAI Events. </p>
1299 <dl class="params"><dt>Parameters</dt><dd>
1300   <table class="params">
1301     <tr><td class="paramdir">[in]</td><td class="paramname">event</td><td><a class="el" href="group__SAI__events.html">SAI Events</a> notification mask </td></tr>
1302   </table>
1303   </dd>
1304 </dl>
1305 <dl class="section return"><dt>Returns</dt><dd>none</dd></dl>
1306 <p>The function <b>ARM_SAI_SignalEvent</b> is a callback function registered by the function <a class="el" href="group__sai__interface__gr.html#ga89622a02ca1e7affb1a01eefacb6f54c">ARM_SAI_Initialize</a>.</p>
1307 <p>The parameter <em>event</em> indicates one or more events that occurred during driver operation. Each event is encoded in a separate bit and therefore it is possible to signal multiple events within the same call.</p>
1308 <p>The following events can be generated:</p>
1309 <table class="markdownTable">
1310 <tr class="markdownTableHead">
1311 <th class="markdownTableHeadNone">Parameter <em>event</em>   </th><th class="markdownTableHeadCenter">Bit   </th><th class="markdownTableHeadLeft">Description    </th></tr>
1312 <tr class="markdownTableRowOdd">
1313 <td class="markdownTableBodyNone"><a class="el" href="group__SAI__events.html#ga3dfa64375859f40d157c224187d2885e">ARM_SAI_EVENT_SEND_COMPLETE</a>   </td><td class="markdownTableBodyCenter">0   </td><td class="markdownTableBodyLeft">Occurs after call to <a class="el" href="group__sai__interface__gr.html#ga8bb6866c535adeb930bc4a847d476fcd">ARM_SAI_Send</a> to indicate that all the data has been sent (or queued in transmit buffers). The driver is ready for the next call to <a class="el" href="group__sai__interface__gr.html#ga8bb6866c535adeb930bc4a847d476fcd">ARM_SAI_Send</a>.    </td></tr>
1314 <tr class="markdownTableRowEven">
1315 <td class="markdownTableBodyNone"><a class="el" href="group__SAI__events.html#ga5a9bde0b096aafe53279529a0adbef55">ARM_SAI_EVENT_RECEIVE_COMPLETE</a>   </td><td class="markdownTableBodyCenter">1   </td><td class="markdownTableBodyLeft">Occurs after call to <a class="el" href="group__sai__interface__gr.html#ga2d55f506cef9d2849cbe418146086d98">ARM_SAI_Receive</a> to indicate that all the data has been received. The driver is ready for the next call to <a class="el" href="group__sai__interface__gr.html#ga2d55f506cef9d2849cbe418146086d98">ARM_SAI_Receive</a>.    </td></tr>
1316 <tr class="markdownTableRowOdd">
1317 <td class="markdownTableBodyNone"><a class="el" href="group__SAI__events.html#ga6a0be7aaf9d700e5259f741641bc37ca">ARM_SAI_EVENT_TX_UNDERFLOW</a>   </td><td class="markdownTableBodyCenter">2   </td><td class="markdownTableBodyLeft">Occurs when data is to be sent but send operation has not been started. Data field <em>tx_underflow</em> = <span class="XML-Token">1</span> of <a class="el" href="group__sai__interface__gr.html#structARM__SAI__STATUS">ARM_SAI_STATUS</a>.    </td></tr>
1318 <tr class="markdownTableRowEven">
1319 <td class="markdownTableBodyNone"><a class="el" href="group__SAI__events.html#gac83e9df0238803ef2c88f16605f73bf5">ARM_SAI_EVENT_RX_OVERFLOW</a>   </td><td class="markdownTableBodyCenter">3   </td><td class="markdownTableBodyLeft">Occurs when data is received but receive operation has not been started. Data field <em>rx_underflow</em> = <span class="XML-Token">1</span> of <a class="el" href="group__sai__interface__gr.html#structARM__SAI__STATUS">ARM_SAI_STATUS</a>.    </td></tr>
1320 <tr class="markdownTableRowOdd">
1321 <td class="markdownTableBodyNone"><a class="el" href="group__SAI__events.html#ga6ffcf96fe404b48421a57fbd122b26bc">ARM_SAI_EVENT_FRAME_ERROR</a>   </td><td class="markdownTableBodyCenter">4   </td><td class="markdownTableBodyLeft">Occurs in slave mode when invalid synchronization frame is detected. Data field <em>event_frame_error</em> = <span class="XML-Token">1</span> of <a class="el" href="group__sai__interface__gr.html#structARM__SAI__STATUS">ARM_SAI_STATUS</a>.   </td></tr>
1322 </table>
1323
1324 </div>
1325 </div>
1326 </div><!-- contents -->
1327 </div><!-- doc-content -->
1328 <!-- start footer part -->
1329 <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
1330   <ul>
1331     <li class="footer">
1332       <script type="text/javascript">
1333         <!--
1334         writeFooter.call(this);
1335         //-->
1336       </script> 
1337     </li>
1338   </ul>
1339 </div>
1340 </body>
1341 </html>