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

687 lines
42 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: Timer_Adapter</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('a00024.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Timer_Adapter</div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Overview</h2>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:a00337"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a00337">_hal_timer_config</a></td></tr>
<tr class="memdesc:a00337"><td class="mdescLeft">&#160;</td><td class="mdescRight">HAL timer configuration structure for HAL timer setting. <a href="a00024.html#a00337">More...</a><br/></td></tr>
<tr class="separator:a00337"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga1b653fd9fc025c14e906f140569e13a0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ga1b653fd9fc025c14e906f140569e13a0">HAL_TIMER_HANDLE_SIZE</a>&#160;&#160;&#160;(20U)</td></tr>
<tr class="memdesc:ga1b653fd9fc025c14e906f140569e13a0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Definition of timer adapter handle size. <a href="#ga1b653fd9fc025c14e906f140569e13a0">More...</a><br/></td></tr>
<tr class="separator:ga1b653fd9fc025c14e906f140569e13a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf1baea2b61dcc5a051887cde3550d567"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#gaf1baea2b61dcc5a051887cde3550d567">TIMER_HANDLE_DEFINE</a>(name)&#160;&#160;&#160;uint32_t name[((<a class="el" href="a00024.html#ga1b653fd9fc025c14e906f140569e13a0">HAL_TIMER_HANDLE_SIZE</a> + sizeof(uint32_t) - 1U) / sizeof(uint32_t))]</td></tr>
<tr class="memdesc:gaf1baea2b61dcc5a051887cde3550d567"><td class="mdescLeft">&#160;</td><td class="mdescRight">Defines the timer handle. <a href="#gaf1baea2b61dcc5a051887cde3550d567">More...</a><br/></td></tr>
<tr class="separator:gaf1baea2b61dcc5a051887cde3550d567"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga3a11455ac6393e9d8ea9ed654dd0756b"><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ga3a11455ac6393e9d8ea9ed654dd0756b">hal_timer_callback_t</a> )(void *param)</td></tr>
<tr class="memdesc:ga3a11455ac6393e9d8ea9ed654dd0756b"><td class="mdescLeft">&#160;</td><td class="mdescRight">The timer adapter component. <a href="#ga3a11455ac6393e9d8ea9ed654dd0756b">More...</a><br/></td></tr>
<tr class="separator:ga3a11455ac6393e9d8ea9ed654dd0756b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf23a96dbf04b4918ff56c9fa0eaca05b"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00024.html#gacda99bee9520ce5a53e0f18084446f8e">_hal_timer_status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#gaf23a96dbf04b4918ff56c9fa0eaca05b">hal_timer_status_t</a></td></tr>
<tr class="memdesc:gaf23a96dbf04b4918ff56c9fa0eaca05b"><td class="mdescLeft">&#160;</td><td class="mdescRight">HAL timer status. <a href="#gaf23a96dbf04b4918ff56c9fa0eaca05b">More...</a><br/></td></tr>
<tr class="separator:gaf23a96dbf04b4918ff56c9fa0eaca05b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9c9d104314ffbb58b7c85c3ba5413049"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="a00024.html#a00337">_hal_timer_config</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ga9c9d104314ffbb58b7c85c3ba5413049">hal_timer_config_t</a></td></tr>
<tr class="memdesc:ga9c9d104314ffbb58b7c85c3ba5413049"><td class="mdescLeft">&#160;</td><td class="mdescRight">HAL timer configuration structure for HAL timer setting. <a href="#ga9c9d104314ffbb58b7c85c3ba5413049">More...</a><br/></td></tr>
<tr class="separator:ga9c9d104314ffbb58b7c85c3ba5413049"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga35758cf1fce36cd940d538daf3165399"><td class="memItemLeft" align="right" valign="top">typedef void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a></td></tr>
<tr class="memdesc:ga35758cf1fce36cd940d538daf3165399"><td class="mdescLeft">&#160;</td><td class="mdescRight">HAL timer handle. <a href="#ga35758cf1fce36cd940d538daf3165399">More...</a><br/></td></tr>
<tr class="separator:ga35758cf1fce36cd940d538daf3165399"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:gacda99bee9520ce5a53e0f18084446f8e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#gacda99bee9520ce5a53e0f18084446f8e">_hal_timer_status</a> { <br/>
&#160;&#160;<a class="el" href="a00024.html#ggacda99bee9520ce5a53e0f18084446f8eae256fcce2a4cd225168efd0a662ddcfc">kStatus_HAL_TimerSuccess</a> = kStatus_Success,
<br/>
&#160;&#160;<a class="el" href="a00024.html#ggacda99bee9520ce5a53e0f18084446f8eab4b44989b75505fbed81d8eee3976255">kStatus_HAL_TimerNotSupport</a> = MAKE_STATUS(kStatusGroup_HAL_TIMER, 1),
<br/>
&#160;&#160;<a class="el" href="a00024.html#ggacda99bee9520ce5a53e0f18084446f8ea6d6956bc9554d534043da0855d2cec00">kStatus_HAL_TimerIsUsed</a> = MAKE_STATUS(kStatusGroup_HAL_TIMER, 2),
<br/>
&#160;&#160;<a class="el" href="a00024.html#ggacda99bee9520ce5a53e0f18084446f8ea662e7bd37fc3286e8135c7efa14e2316">kStatus_HAL_TimerInvalid</a> = MAKE_STATUS(kStatusGroup_HAL_TIMER, 3),
<br/>
&#160;&#160;<a class="el" href="a00024.html#ggacda99bee9520ce5a53e0f18084446f8eaf3fc04b2b1ba644250ff41affafa0ee9">kStatus_HAL_TimerOutOfRanger</a> = MAKE_STATUS(kStatusGroup_HAL_TIMER, 4)
<br/>
}</td></tr>
<tr class="memdesc:gacda99bee9520ce5a53e0f18084446f8e"><td class="mdescLeft">&#160;</td><td class="mdescRight">HAL timer status. <a href="a00024.html#gacda99bee9520ce5a53e0f18084446f8e">More...</a><br/></td></tr>
<tr class="separator:gacda99bee9520ce5a53e0f18084446f8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga6825121005619166bb45a015865e0bb4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00024.html#gaf23a96dbf04b4918ff56c9fa0eaca05b">hal_timer_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ga6825121005619166bb45a015865e0bb4">HAL_TimerInit</a> (<a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a> halTimerHandle, <a class="el" href="a00024.html#ga9c9d104314ffbb58b7c85c3ba5413049">hal_timer_config_t</a> *halTimerConfig)</td></tr>
<tr class="memdesc:ga6825121005619166bb45a015865e0bb4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes the timer adapter module for a timer basic operation. <a href="#ga6825121005619166bb45a015865e0bb4">More...</a><br/></td></tr>
<tr class="separator:ga6825121005619166bb45a015865e0bb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa16fb6566957426fca21d20562ee67cf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#gaa16fb6566957426fca21d20562ee67cf">HAL_TimerDeinit</a> (<a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a> halTimerHandle)</td></tr>
<tr class="memdesc:gaa16fb6566957426fca21d20562ee67cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">DeInitilizate the timer adapter module. <a href="#gaa16fb6566957426fca21d20562ee67cf">More...</a><br/></td></tr>
<tr class="separator:gaa16fb6566957426fca21d20562ee67cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga738eaee86db97258d314fb3bfc8d4c77"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ga738eaee86db97258d314fb3bfc8d4c77">HAL_TimerEnable</a> (<a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a> halTimerHandle)</td></tr>
<tr class="memdesc:ga738eaee86db97258d314fb3bfc8d4c77"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enable the timer adapter module. <a href="#ga738eaee86db97258d314fb3bfc8d4c77">More...</a><br/></td></tr>
<tr class="separator:ga738eaee86db97258d314fb3bfc8d4c77"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac10258d291cf706f6ff6fa8e5a563bd3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#gac10258d291cf706f6ff6fa8e5a563bd3">HAL_TimerDisable</a> (<a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a> halTimerHandle)</td></tr>
<tr class="memdesc:gac10258d291cf706f6ff6fa8e5a563bd3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Disable the timer adapter module. <a href="#gac10258d291cf706f6ff6fa8e5a563bd3">More...</a><br/></td></tr>
<tr class="separator:gac10258d291cf706f6ff6fa8e5a563bd3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga78e4214e8f6ae346313803f303738ad5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ga78e4214e8f6ae346313803f303738ad5">HAL_TimerInstallCallback</a> (<a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a> halTimerHandle, <a class="el" href="a00024.html#ga3a11455ac6393e9d8ea9ed654dd0756b">hal_timer_callback_t</a> callback, void *callbackParam)</td></tr>
<tr class="memdesc:ga78e4214e8f6ae346313803f303738ad5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Install the timer adapter module callback function. <a href="#ga78e4214e8f6ae346313803f303738ad5">More...</a><br/></td></tr>
<tr class="separator:ga78e4214e8f6ae346313803f303738ad5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaabce0f8b54bd41b8a34bb293e8041b9e"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#gaabce0f8b54bd41b8a34bb293e8041b9e">HAL_TimerGetCurrentTimerCount</a> (<a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a> halTimerHandle)</td></tr>
<tr class="memdesc:gaabce0f8b54bd41b8a34bb293e8041b9e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the timer count of the timer adapter. <a href="#gaabce0f8b54bd41b8a34bb293e8041b9e">More...</a><br/></td></tr>
<tr class="separator:gaabce0f8b54bd41b8a34bb293e8041b9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf2e8a770363b0a08dd8719335bb55393"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00024.html#gaf23a96dbf04b4918ff56c9fa0eaca05b">hal_timer_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#gaf2e8a770363b0a08dd8719335bb55393">HAL_TimerUpdateTimeout</a> (<a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a> halTimerHandle, uint32_t timeout)</td></tr>
<tr class="memdesc:gaf2e8a770363b0a08dd8719335bb55393"><td class="mdescLeft">&#160;</td><td class="mdescRight">Update the timeout of the timer adapter to generate timeout interrupt. <a href="#gaf2e8a770363b0a08dd8719335bb55393">More...</a><br/></td></tr>
<tr class="separator:gaf2e8a770363b0a08dd8719335bb55393"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5f95db67f72d937e9775f9da5ed34a1c"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ga5f95db67f72d937e9775f9da5ed34a1c">HAL_TimerGetMaxTimeout</a> (<a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a> halTimerHandle)</td></tr>
<tr class="memdesc:ga5f95db67f72d937e9775f9da5ed34a1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get maximum Timer timeout. <a href="#ga5f95db67f72d937e9775f9da5ed34a1c">More...</a><br/></td></tr>
<tr class="separator:ga5f95db67f72d937e9775f9da5ed34a1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2193e8c1c6115f7735e11a6492835a82"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ga2193e8c1c6115f7735e11a6492835a82">HAL_TimerExitLowpower</a> (<a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a> halTimerHandle)</td></tr>
<tr class="memdesc:ga2193e8c1c6115f7735e11a6492835a82"><td class="mdescLeft">&#160;</td><td class="mdescRight">Timer adapter power up function. <a href="#ga2193e8c1c6115f7735e11a6492835a82">More...</a><br/></td></tr>
<tr class="separator:ga2193e8c1c6115f7735e11a6492835a82"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga66142ca9f7726c8beedabb6c5c03515b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#ga66142ca9f7726c8beedabb6c5c03515b">HAL_TimerEnterLowpower</a> (<a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a> halTimerHandle)</td></tr>
<tr class="memdesc:ga66142ca9f7726c8beedabb6c5c03515b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Timer adapter power down function. <a href="#ga66142ca9f7726c8beedabb6c5c03515b">More...</a><br/></td></tr>
<tr class="separator:ga66142ca9f7726c8beedabb6c5c03515b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<hr/><h2 class="groupheader">Data Structure Documentation</h2>
<a name="a00337" id="a00337"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct _hal_timer_config</td>
</tr>
</table>
</div><div class="memdoc">
<div class="textblock"></div><table class="memberdecls">
<tr><td colspan="2"><h3>Data Fields</h3></td></tr>
<tr class="memitem:a4063b1d1dac2bc15f3c9b3f1238fba21"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4063b1d1dac2bc15f3c9b3f1238fba21"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a4063b1d1dac2bc15f3c9b3f1238fba21">timeout</a></td></tr>
<tr class="memdesc:a4063b1d1dac2bc15f3c9b3f1238fba21"><td class="mdescLeft">&#160;</td><td class="mdescRight">Timeout of the timer, should use microseconds, for example: if set timeout to 1000, mean 1000 microseconds interval would generate timer timeout interrupt. <br/></td></tr>
<tr class="separator:a4063b1d1dac2bc15f3c9b3f1238fba21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9eed5f76eaa02f1717ec59c264f343c4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9eed5f76eaa02f1717ec59c264f343c4"></a>
uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a9eed5f76eaa02f1717ec59c264f343c4">srcClock_Hz</a></td></tr>
<tr class="memdesc:a9eed5f76eaa02f1717ec59c264f343c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Source clock of the timer. <br/></td></tr>
<tr class="separator:a9eed5f76eaa02f1717ec59c264f343c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a726a29d11929e64f44d42bf15d289e08"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a726a29d11929e64f44d42bf15d289e08">instance</a></td></tr>
<tr class="memdesc:a726a29d11929e64f44d42bf15d289e08"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hardware timer module instance, for example: if you want use FTM0,then the instance is configured to 0, if you want use FTM2 hardware timer, then configure the instance to 2, detail information please refer to the SOC corresponding RM.Invalid instance value will cause initialization failure. <a href="#a726a29d11929e64f44d42bf15d289e08">More...</a><br/></td></tr>
<tr class="separator:a726a29d11929e64f44d42bf15d289e08"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a17d98c3944798817027ddc75f3a63481"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00024.html#a17d98c3944798817027ddc75f3a63481">clockSrcSelect</a></td></tr>
<tr class="memdesc:a17d98c3944798817027ddc75f3a63481"><td class="mdescLeft">&#160;</td><td class="mdescRight">Select clock source. <a href="#a17d98c3944798817027ddc75f3a63481">More...</a><br/></td></tr>
<tr class="separator:a17d98c3944798817027ddc75f3a63481"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h4 class="groupheader">Field Documentation</h4>
<a class="anchor" id="a726a29d11929e64f44d42bf15d289e08"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint8_t _hal_timer_config::instance</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="a17d98c3944798817027ddc75f3a63481"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint8_t _hal_timer_config::clockSrcSelect</td>
</tr>
</table>
</div><div class="memdoc">
<p>It is for timer clock select, if the lptmr does not want to use the default clock source </p>
</div>
</div>
</div>
</div>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="ga1b653fd9fc025c14e906f140569e13a0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define HAL_TIMER_HANDLE_SIZE&#160;&#160;&#160;(20U)</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="gaf1baea2b61dcc5a051887cde3550d567"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TIMER_HANDLE_DEFINE</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">name</td><td>)</td>
<td>&#160;&#160;&#160;uint32_t name[((<a class="el" href="a00024.html#ga1b653fd9fc025c14e906f140569e13a0">HAL_TIMER_HANDLE_SIZE</a> + sizeof(uint32_t) - 1U) / sizeof(uint32_t))]</td>
</tr>
</table>
</div><div class="memdoc">
<p>This macro is used to define a 4 byte aligned timer handle. Then use "(hal_timer_handle_t)name" to get the timer handle.</p>
<p>The macro should be global and could be optional. You could also define timer handle by yourself.</p>
<p>This is an example, </p>
<div class="fragment"><div class="line">* <a class="code" href="a00024.html#gaf1baea2b61dcc5a051887cde3550d567">TIMER_HANDLE_DEFINE</a>(timerHandle);</div>
<div class="line">* </div>
</div><!-- fragment --><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">name</td><td>The name string of the timer handle. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="ga3a11455ac6393e9d8ea9ed654dd0756b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef void(* hal_timer_callback_t)(void *param)</td>
</tr>
</table>
</div><div class="memdoc">
<p>The timer adapter is built based on the timer SDK driver provided by the NXP MCUXpresso SDK. The timer adapter could provide high accuracy timer for user. Since callback function would be handled in ISR, and timer clock use high accuracy clock, user can get accuracy millisecond timer.</p>
<p>The timer adapter would be used with different HW timer modules like FTM, PIT, LPTMR. But at the same time, only one HW timer module could be used. On different platforms, different HW timer module would be used. For the platforms which have multiple HW timer modules, one HW timer module would be selected as the default, but it is easy to change the default HW timer module to another. Just two steps to switch the HW timer module: 1.Remove the default HW timer module source file from the project 2.Add the expected HW timer module source file to the project. For example, in platform FRDM-K64F, there are two HW timer modules available, FTM and PIT. FTM is used as the default HW timer, so ftm_adapter.c and timer.h is included in the project by default. If PIT is expected to be used as the HW timer, ftm_adapter.c need to be removed from the project and pit_adapter.c should be included in the project</p>
<p>HAL timer callback function. </p>
</div>
</div>
<a class="anchor" id="gaf23a96dbf04b4918ff56c9fa0eaca05b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef enum <a class="el" href="a00024.html#gacda99bee9520ce5a53e0f18084446f8e">_hal_timer_status</a> <a class="el" href="a00024.html#gaf23a96dbf04b4918ff56c9fa0eaca05b">hal_timer_status_t</a></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="ga9c9d104314ffbb58b7c85c3ba5413049"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct <a class="el" href="a00024.html#a00337">_hal_timer_config</a> <a class="el" href="a00024.html#ga9c9d104314ffbb58b7c85c3ba5413049">hal_timer_config_t</a></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="ga35758cf1fce36cd940d538daf3165399"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef void* <a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="gacda99bee9520ce5a53e0f18084446f8e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="a00024.html#gacda99bee9520ce5a53e0f18084446f8e">_hal_timer_status</a></td>
</tr>
</table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="ggacda99bee9520ce5a53e0f18084446f8eae256fcce2a4cd225168efd0a662ddcfc"></a>kStatus_HAL_TimerSuccess</em>&nbsp;</td><td class="fielddoc">
<p>Success. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="ggacda99bee9520ce5a53e0f18084446f8eab4b44989b75505fbed81d8eee3976255"></a>kStatus_HAL_TimerNotSupport</em>&nbsp;</td><td class="fielddoc">
<p>Not Support. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="ggacda99bee9520ce5a53e0f18084446f8ea6d6956bc9554d534043da0855d2cec00"></a>kStatus_HAL_TimerIsUsed</em>&nbsp;</td><td class="fielddoc">
<p>timer is used </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="ggacda99bee9520ce5a53e0f18084446f8ea662e7bd37fc3286e8135c7efa14e2316"></a>kStatus_HAL_TimerInvalid</em>&nbsp;</td><td class="fielddoc">
<p>timer is invalid </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="ggacda99bee9520ce5a53e0f18084446f8eaf3fc04b2b1ba644250ff41affafa0ee9"></a>kStatus_HAL_TimerOutOfRanger</em>&nbsp;</td><td class="fielddoc">
<p>timer is Out Of Ranger </p>
</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga6825121005619166bb45a015865e0bb4"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00024.html#gaf23a96dbf04b4918ff56c9fa0eaca05b">hal_timer_status_t</a> HAL_TimerInit </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a>&#160;</td>
<td class="paramname"><em>halTimerHandle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00024.html#ga9c9d104314ffbb58b7c85c3ba5413049">hal_timer_config_t</a> *&#160;</td>
<td class="paramname"><em>halTimerConfig</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>This API should be called at the beginning of the application using the timer adapter. For Initializes timer adapter, <div class="fragment"><div class="line">* <a class="code" href="a00024.html#gaf1baea2b61dcc5a051887cde3550d567">TIMER_HANDLE_DEFINE</a>(halTimerHandle);</div>
<div class="line">* <a class="code" href="a00024.html#a00337">hal_timer_config_t</a> halTimerConfig;</div>
<div class="line">* halTimerConfig.<a class="code" href="a00024.html#a4063b1d1dac2bc15f3c9b3f1238fba21">timeout</a> = 1000;</div>
<div class="line">* halTimerConfig.<a class="code" href="a00024.html#a9eed5f76eaa02f1717ec59c264f343c4">srcClock_Hz</a> = BOARD_GetTimeSrcClock();</div>
<div class="line">* halTimerConfig.<a class="code" href="a00024.html#a726a29d11929e64f44d42bf15d289e08">instance</a> = 0;</div>
<div class="line">* <a class="code" href="a00024.html#ga6825121005619166bb45a015865e0bb4">HAL_TimerInit</a>((<a class="code" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a>)halTimerHandle, &amp;halTimerConfig);</div>
<div class="line">* </div>
</div><!-- fragment --></dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">halTimerHandle</td><td>HAL timer adapter handle, the handle buffer with size <a class="el" href="a00024.html#ga1b653fd9fc025c14e906f140569e13a0" title="Definition of timer adapter handle size. ">HAL_TIMER_HANDLE_SIZE</a> should be allocated at upper level. The handle should be 4 byte aligned, because unaligned access doesn't be supported on some devices. You can define the handle in the following two ways: <a class="el" href="a00024.html#gaf1baea2b61dcc5a051887cde3550d567" title="Defines the timer handle. ">TIMER_HANDLE_DEFINE(halTimerHandle)</a>; or uint32_t halTimerHandle[((HAL_TIMER_HANDLE_SIZE + sizeof(uint32_t) - 1U) / sizeof(uint32_t))]; </td></tr>
<tr><td class="paramname">halTimerConfig</td><td>A pointer to the HAL timer configuration structure </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">kStatus_HAL_TimerSuccess</td><td>The timer adapter module initialization succeed. </td></tr>
<tr><td class="paramname">kStatus_HAL_TimerOutOfRanger</td><td>The timer adapter instance out of ranger. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaa16fb6566957426fca21d20562ee67cf"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void HAL_TimerDeinit </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a>&#160;</td>
<td class="paramname"><em>halTimerHandle</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>This API should be called when not using the timer adapter anymore.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">halTimerHandle</td><td>HAL timer adapter handle </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga738eaee86db97258d314fb3bfc8d4c77"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void HAL_TimerEnable </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a>&#160;</td>
<td class="paramname"><em>halTimerHandle</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>This API should be called when enable the timer adapter.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">halTimerHandle</td><td>HAL timer adapter handle </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gac10258d291cf706f6ff6fa8e5a563bd3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void HAL_TimerDisable </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a>&#160;</td>
<td class="paramname"><em>halTimerHandle</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>This API should be called when disable the timer adapter.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">halTimerHandle</td><td>HAL timer adapter handle </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga78e4214e8f6ae346313803f303738ad5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void HAL_TimerInstallCallback </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a>&#160;</td>
<td class="paramname"><em>halTimerHandle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="a00024.html#ga3a11455ac6393e9d8ea9ed654dd0756b">hal_timer_callback_t</a>&#160;</td>
<td class="paramname"><em>callback</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>callbackParam</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>This API should be called to when to install callback function for the timer.Since callback function would be handled in ISR, and timer clock use high accuracy clock, user can get accuracy millisecond timer.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">halTimerHandle</td><td>HAL timer adapter handle </td></tr>
<tr><td class="paramname">callback</td><td>The installed callback function by upper layer </td></tr>
<tr><td class="paramname">callbackParam</td><td>The callback function parameter </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaabce0f8b54bd41b8a34bb293e8041b9e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint32_t HAL_TimerGetCurrentTimerCount </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a>&#160;</td>
<td class="paramname"><em>halTimerHandle</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>This API should be return the real-time timer counting value in a range from 0 to a timer period, and return microseconds.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">halTimerHandle</td><td>HAL timer adapter handle </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">the</td><td>real-time timer counting value and return microseconds. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaf2e8a770363b0a08dd8719335bb55393"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="a00024.html#gaf23a96dbf04b4918ff56c9fa0eaca05b">hal_timer_status_t</a> HAL_TimerUpdateTimeout </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a>&#160;</td>
<td class="paramname"><em>halTimerHandle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32_t&#160;</td>
<td class="paramname"><em>timeout</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>This API should be called when need set the timeout of the timer interrupt..</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">halTimerHandle</td><td>HAL timer adapter handle </td></tr>
<tr><td class="paramname">timeout</td><td>Timeout time, should be used microseconds. </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">kStatus_HAL_TimerSuccess</td><td>The timer adapter module update timeout succeed. </td></tr>
<tr><td class="paramname">kStatus_HAL_TimerOutOfRanger</td><td>The timer adapter set the timeout out of ranger. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga5f95db67f72d937e9775f9da5ed34a1c"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint32_t HAL_TimerGetMaxTimeout </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a>&#160;</td>
<td class="paramname"><em>halTimerHandle</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>This API should to get maximum Timer timeout value to avoid overflow</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">halTimerHandle</td><td>HAL timer adapter handle </td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">get</td><td>the real-time timer maximum timeout value and return microseconds. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga2193e8c1c6115f7735e11a6492835a82"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void HAL_TimerExitLowpower </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a>&#160;</td>
<td class="paramname"><em>halTimerHandle</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>This API should be called by low power module when system exit from sleep mode.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">halTimerHandle</td><td>HAL timer adapter handle </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga66142ca9f7726c8beedabb6c5c03515b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void HAL_TimerEnterLowpower </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00024.html#ga35758cf1fce36cd940d538daf3165399">hal_timer_handle_t</a>&#160;</td>
<td class="paramname"><em>halTimerHandle</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section note"><dt>Note</dt><dd>This API should be called by low power module before system enter into sleep mode.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">halTimerHandle</td><td>HAL timer adapter handle </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.5-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul class="foot">
<li class="footer">&copy; 2016 NXP Semiconductors. All rights reserved.
</li>
</ul>
</div>
</body>
</html>