MCUXpresso_LPC55S69/docs/MCUXpresso SDK API Referenc.../a00251.html

366 lines
28 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>MCUXpresso SDK API Reference Manual: USART: Universal Synchronous/Asynchronous Receiver/Transmitter Driver</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="fs_logo.gif"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">MCUXpresso SDK API Reference Manual
&#160;<span id="projectnumber">Rev 2.15.000</span>
</div>
<div id="projectbrief">NXP Semiconductors</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="modules.html"><span>API&#160;Reference</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('a00251.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#groups">Modules</a> </div>
<div class="headertitle">
<div class="title">USART: Universal Synchronous/Asynchronous Receiver/Transmitter Driver</div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Overview</h2>
<p>The MCUXpresso SDK provides a peripheral UART driver for the Universal Synchronous Receiver/Transmitter (USART) module of MCUXpresso SDK devices. Driver does not support synchronous mode.</p>
<p>The USART driver includes two parts: functional APIs and transactional APIs.</p>
<p>Functional APIs are used for USART initialization/configuration/operation for optimization/customization purpose. Using the functional API requires the knowledge of the USART peripheral and know how to organize functional APIs to meet the application requirements. All functional API use the peripheral base address as the first parameter. USART functional operation groups provide the functional APIs set.</p>
<p>Transactional APIs can be used to enable the peripheral quickly and in the application if the code size and performance of transactional APIs can satisfy the requirements. If the code size and performance are critical requirements, see the transactional API implementation and write custom code. All transactional APIs use the usart_handle_t as the second parameter. Initialize the handle by calling the <a class="el" href="a00062.html#ga9aed876794d5c2ab2e37196242602b89" title="Initializes the USART handle. ">USART_TransferCreateHandle()</a> API.</p>
<p>Transactional APIs support asynchronous transfer, which means that the functions <a class="el" href="a00062.html#ga7f5a4e7e831ab0dc869637494a57362e" title="Transmits a buffer of data using the interrupt method. ">USART_TransferSendNonBlocking()</a> and <a class="el" href="a00062.html#ga34c6c819c9e2d8608a6d7e63103fa542" title="Receives a buffer of data using an interrupt method. ">USART_TransferReceiveNonBlocking()</a> set up an interrupt for data transfer. When the transfer completes, the upper layer is notified through a callback function with the kStatus_USART_TxIdle and kStatus_USART_RxIdle.</p>
<p>Transactional receive APIs support the ring buffer. Prepare the memory for the ring buffer and pass in the start address and size while calling the <a class="el" href="a00062.html#ga9aed876794d5c2ab2e37196242602b89" title="Initializes the USART handle. ">USART_TransferCreateHandle()</a>. If passing NULL, the ring buffer feature is disabled. When the ring buffer is enabled, the received data is saved to the ring buffer in the background. The <a class="el" href="a00062.html#ga34c6c819c9e2d8608a6d7e63103fa542" title="Receives a buffer of data using an interrupt method. ">USART_TransferReceiveNonBlocking()</a> function first gets data from the ring buffer. If the ring buffer does not have enough data, the function first returns the data in the ring buffer and then saves the received data to user memory. When all data is received, the upper layer is informed through a callback with the kStatus_USART_RxIdle.</p>
<p>If the receive ring buffer is full, the upper layer is informed through a callback with the kStatus_USART_RxRingBufferOverrun. In the callback function, the upper layer reads data out from the ring buffer. If not, the oldest data is overwritten by the new data.</p>
<p>The ring buffer size is specified when creating the handle. Note that one byte is reserved for the ring buffer maintenance. When creating handle using the following code:</p>
<div class="fragment"><div class="line"><a class="code" href="a00062.html#ga9aed876794d5c2ab2e37196242602b89">USART_TransferCreateHandle</a>(USART0, &amp;handle, USART_UserCallback, NULL);</div>
</div><!-- fragment --><p>In this example, the buffer size is 32, but only 31 bytes are used for saving data.</p>
<h1><a class="anchor" id="USARTCase"></a>
Typical use case</h1>
<h2><a class="anchor" id="USARTCasePolling"></a>
USART Send/receive using a polling method</h2>
<div class="fragment"><div class="line">uint8_t ch;</div>
<div class="line"><a class="code" href="a00062.html#ga74464f9357e585e42e5f3c909eb6e9b3">USART_GetDefaultConfig</a>(&amp;user_config);</div>
<div class="line">user_config.baudRate_Bps = 115200U;</div>
<div class="line">user_config.enableTx = <span class="keyword">true</span>;</div>
<div class="line">user_config.enableRx = <span class="keyword">true</span>;</div>
<div class="line"></div>
<div class="line"><a class="code" href="a00062.html#ga2aeb4e11fdf0eb515d090865ffcf2ba2">USART_Init</a>(USART1,&amp;user_config,120000000U);</div>
<div class="line"></div>
<div class="line"><span class="keywordflow">while</span>(1)</div>
<div class="line">{</div>
<div class="line"> <a class="code" href="a00062.html#ga09c3b588e2099ffa6b999c5ca7fb8d58">USART_ReadBlocking</a>(USART1, &amp;ch, 1);</div>
<div class="line"> <a class="code" href="a00062.html#ga95abde78d5cbf569f2b6e4d7942b64df">USART_WriteBlocking</a>(USART1, &amp;ch, 1);</div>
<div class="line">}</div>
</div><!-- fragment --><h2><a class="anchor" id="USARTCaseInterrupt"></a>
USART Send/receive using an interrupt method</h2>
<div class="fragment"><div class="line"><a class="code" href="a00062.html#a00436">usart_handle_t</a> g_usartHandle;</div>
<div class="line"><a class="code" href="a00062.html#a00434">usart_config_t</a> user_config;</div>
<div class="line"><a class="code" href="a00062.html#a00437">usart_transfer_t</a> sendXfer;</div>
<div class="line"><a class="code" href="a00062.html#a00437">usart_transfer_t</a> receiveXfer;</div>
<div class="line"><span class="keyword">volatile</span> <span class="keywordtype">bool</span> txFinished;</div>
<div class="line"><span class="keyword">volatile</span> <span class="keywordtype">bool</span> rxFinished;</div>
<div class="line">uint8_t sendData[] = [<span class="charliteral">&#39;H&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;l&#39;</span>, <span class="charliteral">&#39;l&#39;</span>, <span class="charliteral">&#39;o&#39;</span>];</div>
<div class="line">uint8_t receiveData[32];</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">void</span> USART_UserCallback(<a class="code" href="a00062.html#a00436">usart_handle_t</a> *handle, <a class="code" href="a00242.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a> status, <span class="keywordtype">void</span> *userData)</div>
<div class="line">{</div>
<div class="line"> userData = userData;</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span> (<a class="code" href="a00062.html#gga726ca809ffd3d67ab4b8476646f26635a539a0ebaa0137fdf6d7cc9b984acb13f">kStatus_USART_TxIdle</a> == status)</div>
<div class="line"> {</div>
<div class="line"> txFinished = <span class="keyword">true</span>;</div>
<div class="line"> }</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span> (<a class="code" href="a00062.html#gga726ca809ffd3d67ab4b8476646f26635a3cb7112c821c89d7fbb1c048a86756aa">kStatus_USART_RxIdle</a> == status)</div>
<div class="line"> {</div>
<div class="line"> rxFinished = <span class="keyword">true</span>;</div>
<div class="line"> }</div>
<div class="line">}</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">void</span> main(<span class="keywordtype">void</span>)</div>
<div class="line">{</div>
<div class="line"> <span class="comment">//...</span></div>
<div class="line"></div>
<div class="line"> <a class="code" href="a00062.html#ga74464f9357e585e42e5f3c909eb6e9b3">USART_GetDefaultConfig</a>(&amp;user_config);</div>
<div class="line"> user_config.<a class="code" href="a00062.html#a80339c90b740ca4d4417a97328641ec5">baudRate_Bps</a> = 115200U;</div>
<div class="line"> user_config.<a class="code" href="a00062.html#a1d7ec8bb576610aa864cbc0107349a21">enableTx</a> = <span class="keyword">true</span>;</div>
<div class="line"> user_config.<a class="code" href="a00062.html#a370b6e0a9f1c05e037f9e940d7e36694">enableRx</a> = <span class="keyword">true</span>;</div>
<div class="line"></div>
<div class="line"> <a class="code" href="a00062.html#ga2aeb4e11fdf0eb515d090865ffcf2ba2">USART_Init</a>(USART1, &amp;user_config, 120000000U);</div>
<div class="line"> <a class="code" href="a00062.html#ga9aed876794d5c2ab2e37196242602b89">USART_TransferCreateHandle</a>(USART1, &amp;g_usartHandle, USART_UserCallback, NULL);</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Prepare to send.</span></div>
<div class="line"> sendXfer.<a class="code" href="a00062.html#af4347f3022beb6cb6d930582eaa7d284">data</a> = sendData</div>
<div class="line"> sendXfer.<a class="code" href="a00062.html#a772fe840060516d61371497eeda93bca">dataSize</a> = <span class="keyword">sizeof</span>(sendData);</div>
<div class="line"> txFinished = <span class="keyword">false</span>;</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Send out.</span></div>
<div class="line"> <a class="code" href="a00062.html#ga7f5a4e7e831ab0dc869637494a57362e">USART_TransferSendNonBlocking</a>(USART1, &amp;g_usartHandle, &amp;sendXfer);</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Wait send finished.</span></div>
<div class="line"> <span class="keywordflow">while</span> (!txFinished)</div>
<div class="line"> {</div>
<div class="line"> }</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Prepare to receive.</span></div>
<div class="line"> receiveXfer.<a class="code" href="a00062.html#af4347f3022beb6cb6d930582eaa7d284">data</a> = receiveData;</div>
<div class="line"> receiveXfer.<a class="code" href="a00062.html#a772fe840060516d61371497eeda93bca">dataSize</a> = <span class="keyword">sizeof</span>(receiveData);</div>
<div class="line"> rxFinished = <span class="keyword">false</span>;</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Receive.</span></div>
<div class="line"> <a class="code" href="a00062.html#ga34c6c819c9e2d8608a6d7e63103fa542">USART_TransferReceiveNonBlocking</a>(USART1, &amp;g_usartHandle, &amp;receiveXfer, NULL);</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Wait receive finished.</span></div>
<div class="line"> <span class="keywordflow">while</span> (!rxFinished)</div>
<div class="line"> {</div>
<div class="line"> }</div>
<div class="line"></div>
<div class="line"> <span class="comment">// ...</span></div>
<div class="line">}</div>
</div><!-- fragment --><h2><a class="anchor" id="USARTCaseRing"></a>
USART Receive using the ringbuffer feature</h2>
<div class="fragment"><div class="line"><span class="preprocessor">#define RING_BUFFER_SIZE 64</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#define RX_DATA_SIZE 32</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><a class="code" href="a00062.html#a00436">usart_handle_t</a> g_usartHandle;</div>
<div class="line"><a class="code" href="a00062.html#a00434">usart_config_t</a> user_config;</div>
<div class="line"><a class="code" href="a00062.html#a00437">usart_transfer_t</a> sendXfer;</div>
<div class="line"><a class="code" href="a00062.html#a00437">usart_transfer_t</a> receiveXfer;</div>
<div class="line"><span class="keyword">volatile</span> <span class="keywordtype">bool</span> txFinished;</div>
<div class="line"><span class="keyword">volatile</span> <span class="keywordtype">bool</span> rxFinished;</div>
<div class="line">uint8_t receiveData[RX_DATA_SIZE];</div>
<div class="line">uint8_t ringBuffer[RING_BUFFER_SIZE];</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">void</span> USART_UserCallback(<a class="code" href="a00062.html#a00436">usart_handle_t</a> *handle, <a class="code" href="a00242.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a> status, <span class="keywordtype">void</span> *userData)</div>
<div class="line">{</div>
<div class="line"> userData = userData;</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span> (<a class="code" href="a00062.html#gga726ca809ffd3d67ab4b8476646f26635a3cb7112c821c89d7fbb1c048a86756aa">kStatus_USART_RxIdle</a> == status)</div>
<div class="line"> {</div>
<div class="line"> rxFinished = <span class="keyword">true</span>;</div>
<div class="line"> }</div>
<div class="line">}</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">void</span> main(<span class="keywordtype">void</span>)</div>
<div class="line">{</div>
<div class="line"> <span class="keywordtype">size_t</span> bytesRead;</div>
<div class="line"> <span class="comment">//...</span></div>
<div class="line"></div>
<div class="line"> <a class="code" href="a00062.html#ga74464f9357e585e42e5f3c909eb6e9b3">USART_GetDefaultConfig</a>(&amp;user_config);</div>
<div class="line"> user_config.<a class="code" href="a00062.html#a80339c90b740ca4d4417a97328641ec5">baudRate_Bps</a> = 115200U;</div>
<div class="line"> user_config.<a class="code" href="a00062.html#a1d7ec8bb576610aa864cbc0107349a21">enableTx</a> = <span class="keyword">true</span>;</div>
<div class="line"> user_config.<a class="code" href="a00062.html#a370b6e0a9f1c05e037f9e940d7e36694">enableRx</a> = <span class="keyword">true</span>;</div>
<div class="line"></div>
<div class="line"> <a class="code" href="a00062.html#ga2aeb4e11fdf0eb515d090865ffcf2ba2">USART_Init</a>(USART1, &amp;user_config, 120000000U);</div>
<div class="line"> <a class="code" href="a00062.html#ga9aed876794d5c2ab2e37196242602b89">USART_TransferCreateHandle</a>(USART1, &amp;g_usartHandle, USART_UserCallback, NULL);</div>
<div class="line"> <a class="code" href="a00062.html#ga8500107ace3179c85e66d73fa1f41d16">USART_TransferStartRingBuffer</a>(USART1, &amp;g_usartHandle, ringBuffer, RING_BUFFER_SIZE);</div>
<div class="line"> <span class="comment">// Now the RX is working in background, receive in to ring buffer.</span></div>
<div class="line"></div>
<div class="line"> <span class="comment">// Prepare to receive.</span></div>
<div class="line"> receiveXfer.<a class="code" href="a00062.html#af4347f3022beb6cb6d930582eaa7d284">data</a> = receiveData;</div>
<div class="line"> receiveXfer.<a class="code" href="a00062.html#a772fe840060516d61371497eeda93bca">dataSize</a> = <span class="keyword">sizeof</span>(receiveData);</div>
<div class="line"> rxFinished = <span class="keyword">false</span>;</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Receive.</span></div>
<div class="line"> <a class="code" href="a00062.html#ga34c6c819c9e2d8608a6d7e63103fa542">USART_TransferReceiveNonBlocking</a>(USART1, &amp;g_usartHandle, &amp;receiveXfer);</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span> (bytesRead = RX_DATA_SIZE) <span class="comment">/* Have read enough data. */</span></div>
<div class="line"> {</div>
<div class="line"> ;</div>
<div class="line"> }</div>
<div class="line"> <span class="keywordflow">else</span></div>
<div class="line"> {</div>
<div class="line"> <span class="keywordflow">if</span> (bytesRead) <span class="comment">/* Received some data, process first. */</span></div>
<div class="line"> {</div>
<div class="line"> ;</div>
<div class="line"> }</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Wait receive finished.</span></div>
<div class="line"> <span class="keywordflow">while</span> (!rxFinished)</div>
<div class="line"> {</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line"></div>
<div class="line"> <span class="comment">// ...</span></div>
<div class="line">}</div>
</div><!-- fragment --><h2><a class="anchor" id="USARTCaseDma"></a>
USART Send/Receive using the DMA method</h2>
<div class="fragment"><div class="line"><a class="code" href="a00062.html#a00436">usart_handle_t</a> g_usartHandle;</div>
<div class="line"><a class="code" href="a00017.html#a00319">dma_handle_t</a> g_usartTxDmaHandle;</div>
<div class="line"><a class="code" href="a00017.html#a00319">dma_handle_t</a> g_usartRxDmaHandle;</div>
<div class="line"><a class="code" href="a00062.html#a00434">usart_config_t</a> user_config;</div>
<div class="line"><a class="code" href="a00062.html#a00437">usart_transfer_t</a> sendXfer;</div>
<div class="line"><a class="code" href="a00062.html#a00437">usart_transfer_t</a> receiveXfer;</div>
<div class="line"><span class="keyword">volatile</span> <span class="keywordtype">bool</span> txFinished;</div>
<div class="line"><span class="keyword">volatile</span> <span class="keywordtype">bool</span> rxFinished;</div>
<div class="line">uint8_t sendData[] = [<span class="charliteral">&#39;H&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;l&#39;</span>, <span class="charliteral">&#39;l&#39;</span>, <span class="charliteral">&#39;o&#39;</span>];</div>
<div class="line">uint8_t receiveData[32];</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">void</span> USART_UserCallback(<a class="code" href="a00062.html#a00436">usart_handle_t</a> *handle, <a class="code" href="a00242.html#gaaabdaf7ee58ca7269bd4bf24efcde092">status_t</a> status, <span class="keywordtype">void</span> *userData)</div>
<div class="line">{</div>
<div class="line"> userData = userData;</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span> (<a class="code" href="a00062.html#gga726ca809ffd3d67ab4b8476646f26635a539a0ebaa0137fdf6d7cc9b984acb13f">kStatus_USART_TxIdle</a> == status)</div>
<div class="line"> {</div>
<div class="line"> txFinished = <span class="keyword">true</span>;</div>
<div class="line"> }</div>
<div class="line"></div>
<div class="line"> <span class="keywordflow">if</span> (<a class="code" href="a00062.html#gga726ca809ffd3d67ab4b8476646f26635a3cb7112c821c89d7fbb1c048a86756aa">kStatus_USART_RxIdle</a> == status)</div>
<div class="line"> {</div>
<div class="line"> rxFinished = <span class="keyword">true</span>;</div>
<div class="line"> }</div>
<div class="line">}</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">void</span> main(<span class="keywordtype">void</span>)</div>
<div class="line">{</div>
<div class="line"> <span class="comment">//...</span></div>
<div class="line"></div>
<div class="line"> <a class="code" href="a00062.html#ga74464f9357e585e42e5f3c909eb6e9b3">USART_GetDefaultConfig</a>(&amp;user_config);</div>
<div class="line"> user_config.<a class="code" href="a00062.html#a80339c90b740ca4d4417a97328641ec5">baudRate_Bps</a> = 115200U;</div>
<div class="line"> user_config.<a class="code" href="a00062.html#a1d7ec8bb576610aa864cbc0107349a21">enableTx</a> = <span class="keyword">true</span>;</div>
<div class="line"> user_config.<a class="code" href="a00062.html#a370b6e0a9f1c05e037f9e940d7e36694">enableRx</a> = <span class="keyword">true</span>;</div>
<div class="line"></div>
<div class="line"> <a class="code" href="a00062.html#ga2aeb4e11fdf0eb515d090865ffcf2ba2">USART_Init</a>(USART1, &amp;user_config, 120000000U);</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Set up the DMA</span></div>
<div class="line"> <a class="code" href="a00017.html#gade1b5efa61054ce538b37b181dd075bb">DMA_Init</a>(DMA0);</div>
<div class="line"> <a class="code" href="a00017.html#gaa0293771d55ee1a7c42a8ffecb0728e7">DMA_EnableChannel</a>(DMA0, USART_TX_DMA_CHANNEL);</div>
<div class="line"> <a class="code" href="a00017.html#gaa0293771d55ee1a7c42a8ffecb0728e7">DMA_EnableChannel</a>(DMA0, USART_RX_DMA_CHANNEL);</div>
<div class="line"></div>
<div class="line"> <a class="code" href="a00017.html#ga5354ff2c0c1ec53e2cbd712169fc5558">DMA_CreateHandle</a>(&amp;g_usartTxDmaHandle, DMA0, USART_TX_DMA_CHANNEL);</div>
<div class="line"> <a class="code" href="a00017.html#ga5354ff2c0c1ec53e2cbd712169fc5558">DMA_CreateHandle</a>(&amp;g_usartRxDmaHandle, DMA0, USART_RX_DMA_CHANNEL);</div>
<div class="line"></div>
<div class="line"> <a class="code" href="a00063.html#ga3108003aa0b8bd3ec34b8235041d1466">USART_TransferCreateHandleDMA</a>(USART1, &amp;g_usartHandle, USART_UserCallback, NULL, &amp;g_usartTxDmaHandle, &amp;g_usartRxDmaHandle);</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Prepare to send.</span></div>
<div class="line"> sendXfer.<a class="code" href="a00062.html#af4347f3022beb6cb6d930582eaa7d284">data</a> = sendData</div>
<div class="line"> sendXfer.<a class="code" href="a00062.html#a772fe840060516d61371497eeda93bca">dataSize</a> = <span class="keyword">sizeof</span>(sendData);</div>
<div class="line"> txFinished = <span class="keyword">false</span>;</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Send out.</span></div>
<div class="line"> <a class="code" href="a00063.html#ga767c45246b3981930e391837bf627e68">USART_TransferSendDMA</a>(USART1, &amp;g_usartHandle, &amp;sendXfer);</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Wait send finished.</span></div>
<div class="line"> <span class="keywordflow">while</span> (!txFinished)</div>
<div class="line"> {</div>
<div class="line"> }</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Prepare to receive.</span></div>
<div class="line"> receiveXfer.<a class="code" href="a00062.html#af4347f3022beb6cb6d930582eaa7d284">data</a> = receiveData;</div>
<div class="line"> receiveXfer.<a class="code" href="a00062.html#a772fe840060516d61371497eeda93bca">dataSize</a> = <span class="keyword">sizeof</span>(receiveData);</div>
<div class="line"> rxFinished = <span class="keyword">false</span>;</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Receive.</span></div>
<div class="line"> <a class="code" href="a00063.html#ga4b68b4d54821ef43a671dabf432a48ae">USART_TransferReceiveDMA</a>(USART1, &amp;g_usartHandle, &amp;receiveXfer);</div>
<div class="line"></div>
<div class="line"> <span class="comment">// Wait receive finished.</span></div>
<div class="line"> <span class="keywordflow">while</span> (!rxFinished)</div>
<div class="line"> {</div>
<div class="line"> }</div>
<div class="line"></div>
<div class="line"> <span class="comment">// ...</span></div>
<div class="line">}</div>
</div><!-- fragment --> <table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
Modules</h2></td></tr>
<tr class="memitem:a00252"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00252.html">USART CMSIS Driver</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a00063"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00063.html">USART DMA Driver</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a00062"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00062.html">USART Driver</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.5-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul class="foot">
<li class="footer">&copy; 2016 NXP Semiconductors. All rights reserved.
</li>
</ul>
</div>
</body>
</html>