Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
48241ad08This file is pinned to the selected release. Download the original to open it in your design tool.
<!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.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>IoT-MBBR (masterthesis): firmware/EFM32HG222F64_iot-mbbr/src/delay.c Source File</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="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.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="projectalign" style="padding-left: 0.5em;">
<div id="projectname">IoT-MBBR (masterthesis)
</div>
<div id="projectbrief">Masterthesis upgrading a Moving Bed BioReactor with extra sensors and cloud connectivity.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></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('delay_8c_source.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">delay.c</div> </div>
</div><!--header-->
<div class="contents">
<a href="delay_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/***************************************************************************/</span><span class="comment">/**</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * @file delay.c</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * @brief Delay functionality.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * @version 3.4</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * @author Brecht Van Eeckhoudt</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * ******************************************************************************</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * @section Versions</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> *</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * @li v1.0: Moved delay functionality from `util.c` to this file.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * @li v1.1: Changed global variables to be static (~hidden) and added dbprint `\ n \ r ` fixes.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * @li v1.2: Removed EM1 delay method (see note in delayRTCC_EM2).</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * @li v1.3: Cleaned up includes, added option to select SysTick/EM2 delay functionality</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * and moved all of the logic in one `delay` method. Renamed sleep method.</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * @li v1.4: Changed names of static variables, made initRTCcomp static.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * @li v1.5: Updated documentation.</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * @li v1.6: Changed RTCcomp names to RTC.</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * @li v1.7: Moved IRQ handler of RTC to this file.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * @li v1.8: Added ULFRCO logic.</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * @li v1.9: Updated code with new DEFINE checks.</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * @li v2.0: Added functionality to enable/disable the clocks only when necessary.</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * @li v2.1: Added functionality to check if a wakeup was caused by the RTC.</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * @li v2.2: Removed some clock disabling statements.</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * @li v2.3: Changed error numbering.</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * @li v2.4: Moved definitions from header to source file.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * @li v2.5: Added functionality to the time spend sleeping.</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * @li v3.0: Disabled peripheral clock before entering an `error` function, added</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * functionality to exit methods after `error` call and updated version number.</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * @li v3.1: Removed `static` before some local variables (not necessary).</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * @li v3.2: Moved `msTicks` variable and systick handler in `#if` check.</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> * @li v3.3: Added include for the boolean type in the header file, changed `dbwarnInt`</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> * to `dbinfoInt`, added the ability to enable/disable the sleep-announcing.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment"> * @li v3.4: Added logic to initialize delay/sleep when calling the methods using `0` as the delay time.</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment"> *</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment"> * ******************************************************************************</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment"> *</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment"> * @todo</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment"> * **Future improvements:**@n</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment"> * - Enable/disable clock functionality? (see comments using `//`)</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment"> *</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment"> * ******************************************************************************</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment"> *</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment"> * @section License</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment"> *</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment"> * **Copyright (C) 2020 - Brecht Van Eeckhoudt**</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment"> *</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment"> * This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment"> * it under the terms of the **GNU General Public License** as published by</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment"> * the Free Software Foundation, either **version 3** of the License, or</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment"> *</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment"> *</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment"> * *A copy of the GNU General Public License can be found in the `LICENSE`</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment"> * file along with this source code.*</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment"> *</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment"> * @n</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment"> *</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment"> * Some methods use code obtained from examples from [Silicon Labs' GitHub](https://github.com/SiliconLabs/peripheral_examples).</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment"> * These sections are licensed under the Silabs License Agreement. See the file</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment"> * "Silabs_License_Agreement.txt" for details. Before using this software for</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment"> * any purpose, you must agree to the terms of that agreement.</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment"> *</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment"> ******************************************************************************/</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor">#include <stdint.h></span> <span class="comment">/* (u)intXX_t */</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#include <stdbool.h></span> <span class="comment">/* "bool", "true", "false" */</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor">#include "em_device.h"</span> <span class="comment">/* Include necessary MCU-specific header file */</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor">#include "em_cmu.h"</span> <span class="comment">/* Clock management unit */</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor">#include "em_emu.h"</span> <span class="comment">/* Energy Management Unit */</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor">#include "em_gpio.h"</span> <span class="comment">/* General Purpose IO */</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor">#include "em_rtc.h"</span> <span class="comment">/* Real Time Counter (RTC) */</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor">#include "<a class="code" href="delay_8h.html">delay.h</a>"</span> <span class="comment">/* Corresponding header file */</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="preprocessor">#include "<a class="code" href="debug__dbprint_8h.html">debug_dbprint.h</a>"</span> <span class="comment">/* Enable or disable printing to UART */</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment">//#include "util.h" /* Utility functionality (error) */</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment">/* Local definitions (for RTC compare interrupts) */</span></div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="delay_8c.html#a32d3f5f00133102c9c845ca65e7d5d77"> 85</a></span> <span class="preprocessor">#define ULFRCOFREQ 1000</span></div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="delay_8c.html#a7dfc303d591a9e657e53c979d8e0c664"> 86</a></span> <span class="preprocessor">#define ULFRCOFREQ_MS 1.000</span></div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="delay_8c.html#a608c42d50a4df7f45d31ce5e1fbe1270"> 87</a></span> <span class="preprocessor">#define LFXOFREQ 32768</span></div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="delay_8c.html#acde5abcdec802c050f0fdf095fb28343"> 88</a></span> <span class="preprocessor">#define LFXOFREQ_MS 32.768</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">/* Local variables */</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment">/* -> Volatile because it's modified by an interrupt service routine (@RAM)</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment"> * -> Static so it's always kept in memory (@data segment, space provided during compile time) */</span></div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="delay_8c.html#a5d05d3c03875b363db56e35882b55025"> 94</a></span> <span class="keyword">static</span> <span class="keyword">volatile</span> <span class="keywordtype">bool</span> <a class="code" href="delay_8c.html#a5d05d3c03875b363db56e35882b55025">RTC_sleep_wakeup</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor">#if SYSTICKDELAY == 1 </span><span class="comment">/* SysTick delay selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">static</span> <span class="keyword">volatile</span> <a class="code" href="vl53l1__types_8h.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> msTicks;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor">#endif </span><span class="comment">/* SysTick/RTC selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="delay_8c.html#afc77d1fb95870b5511dffff362261cb6"> 101</a></span> <span class="keywordtype">bool</span> <a class="code" href="delay_8c.html#afc77d1fb95870b5511dffff362261cb6">sleeping</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="delay_8c.html#a31a8d0ba2d09ee649bb6d17829f89712"> 102</a></span> <span class="keywordtype">bool</span> <a class="code" href="delay_8c.html#a31a8d0ba2d09ee649bb6d17829f89712">RTC_initialized</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor">#if SYSTICKDELAY == 1 </span><span class="comment">/* SysTick delay selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">bool</span> SysTick_initialized = <span class="keyword">false</span>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor">#endif </span><span class="comment">/* SysTick/RTC selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment">/* Local prototype */</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="delay_8c.html#aecf4672ef62001664f5ebc953755da1d">initRTC</a> (<span class="keywordtype">void</span>);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment">/**************************************************************************/</span><span class="comment">/**</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment"> * @brief</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment"> * Wait for a certain amount of milliseconds in EM2/3.</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment"> *</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment"> * @details</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment"> * This method can be called with the argument `0` to force initialization.@n</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment"> * This method also initializes SysTick/RTC if necessary.</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment"> *</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment"> * @param[in] msDelay</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment"> * The delay time in **milliseconds**.</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment"> *****************************************************************************/</span></div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="delay_8c.html#adb46f4276f5ddf111153701858f85df6"> 124</a></span> <span class="keywordtype">void</span> <a class="code" href="delay_8c.html#adb46f4276f5ddf111153701858f85df6">delay</a> (<a class="code" href="vl53l1__types_8h.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> msDelay)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="preprocessor">#if SYSTICKDELAY == 1 </span><span class="comment">/* SysTick delay selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="comment">/* Initialize SysTick if not already the case */</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">if</span> (!SysTick_initialized)</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="comment">/* Initialize and start SysTick</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment"> * Number of ticks between interrupt = cmuClock_CORE/1000 */</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">if</span> (SysTick_Config(CMU_ClockFreqGet(cmuClock_CORE) / 1000)) <span class="keywordflow">while</span> (1);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor">#if DEBUG_DBPRINT == 1 </span><span class="comment">/* DEBUG_DBPRINT */</span><span class="preprocessor"></span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <a class="code" href="dbprint_8c.html#acb5d4e1082c625ad85d835d4e053d4d8">dbinfo</a>(<span class="stringliteral">"SysTick initialized"</span>);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor">#endif </span><span class="comment">/* DEBUG_DBPRINT */</span><span class="preprocessor"></span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  SysTick_initialized = <span class="keyword">true</span>;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="comment">/* Only execute if we're not initializing */</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">if</span> (msDelay > 0)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="comment">/* Enable SysTick interrupt and counter by setting their bits. */</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="comment">/* Only execute if we're not initializing */</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">if</span> (msDelay > 0)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="comment">/* Wait a certain amount of ticks */</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <a class="code" href="vl53l1__types_8h.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> curTicks = msTicks;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">while</span> ((msTicks - curTicks) < msDelay);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="comment">/* Disable SysTick interrupt and counter (needs to be done before entering EM2/3) by clearing their bits. */</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk & ~SysTick_CTRL_ENABLE_Msk;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor">#else </span><span class="comment">/* EM2/3 RTC delay selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="comment">/* Initialize RTC if not already the case */</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">if</span> (!<a class="code" href="delay_8c.html#a31a8d0ba2d09ee649bb6d17829f89712">RTC_initialized</a>) <a class="code" href="delay_8c.html#aecf4672ef62001664f5ebc953755da1d">initRTC</a>();</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="comment">/* Only execute if we're not initializing */</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">if</span> (msDelay > 0)</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  {</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="comment">/* Enable necessary oscillator and clocks */</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor">#if ULFRCO == 1 </span><span class="comment">/* ULFRCO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="comment">/* No specific code here */</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor">#else </span><span class="comment">/* LFXO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="comment">/* Enable the low-frequency crystal oscillator for the RTC */</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="comment">//CMU_OscillatorEnable(cmuOsc_LFXO, true, true);</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor">#endif </span><span class="comment">/* ULFRCO/LFXO selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="comment">/* Enable the clock to the interface of the low energy modules</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="comment"> * cmuClock_CORELE = cmuClock_HFLE (deprecated) */</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="comment">//CMU_ClockEnable(cmuClock_HFLE, true);</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="comment">/* Turn on the RTC clock */</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  CMU_ClockEnable(cmuClock_RTC, <span class="keyword">true</span>);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="comment">/* Only execute if we're not initializing */</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">if</span> (msDelay > 0)</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="comment">/* Set RTC compare value for RTC compare register 0 depending on ULFRCO/LFXO selection */</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="preprocessor">#if ULFRCO == 1 </span><span class="comment">/* ULFRCO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">if</span> ((<a class="code" href="delay_8c.html#a7dfc303d591a9e657e53c979d8e0c664">ULFRCOFREQ_MS</a> * msDelay) <= 0x00ffffff) RTC_CompareSet(0, (<a class="code" href="delay_8c.html#a7dfc303d591a9e657e53c979d8e0c664">ULFRCOFREQ_MS</a> * msDelay));</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor">#if DEBUG_DBPRINT == 1 </span><span class="comment">/* DEBUG_DBPRINT */</span><span class="preprocessor"></span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <a class="code" href="dbprint_8c.html#afbbbe6e04352a6b56d1d8a053ec4f941">dbcrit</a>(<span class="stringliteral">"Delay too long, can't fit in the field!"</span>);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor">#endif </span><span class="comment">/* DEBUG_DBPRINT */</span><span class="preprocessor"></span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="comment">/* Turn off the RTC clock */</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  CMU_ClockEnable(cmuClock_RTC, <span class="keyword">false</span>);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment">// error(14);</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="comment">/* Exit function */</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor">#else </span><span class="comment">/* LFXO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">if</span> ((<a class="code" href="delay_8c.html#acde5abcdec802c050f0fdf095fb28343">LFXOFREQ_MS</a> * msDelay) <= 0x00ffffff) RTC_CompareSet(0, (<a class="code" href="delay_8c.html#acde5abcdec802c050f0fdf095fb28343">LFXOFREQ_MS</a> * msDelay));</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor">#if DEBUG_DBPRINT == 1 </span><span class="comment">/* DEBUG_DBPRINT */</span><span class="preprocessor"></span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <a class="code" href="dbprint_8c.html#afbbbe6e04352a6b56d1d8a053ec4f941">dbcrit</a>(<span class="stringliteral">"Delay too long, can't fit in the field!"</span>);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor">#endif </span><span class="comment">/* DEBUG_DBPRINT */</span><span class="preprocessor"></span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="comment">/* Turn off the RTC clock */</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  CMU_ClockEnable(cmuClock_RTC, <span class="keyword">false</span>);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="comment">// error(15);</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="comment">/* Exit function */</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="preprocessor">#endif </span><span class="comment">/* ULFRCO/LFXO selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="comment">/* Start the RTC */</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  RTC_Enable(<span class="keyword">true</span>);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="comment">/* Enter EM2/3 depending on ULFRCO/LFXO selection */</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="preprocessor">#if ULFRCO == 1 </span><span class="comment">/* ULFRCO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="comment">/* In EM3, high and low frequency clocks are disabled. No oscillator (except the ULFRCO) is running.</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="comment"> * Furthermore, all unwanted oscillators are disabled in EM3. This means that nothing needs to be</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="comment"> * manually disabled before the statement EMU_EnterEM3(true); */</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  EMU_EnterEM3(<span class="keyword">true</span>); <span class="comment">/* "true" - Save and restore oscillators, clocks and voltage scaling */</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="preprocessor">#else </span><span class="comment">/* LFXO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  EMU_EnterEM2(<span class="keyword">true</span>); <span class="comment">/* "true" - Save and restore oscillators, clocks and voltage scaling */</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor">#endif </span><span class="comment">/* ULFRCO/LFXO selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="comment">/* Disable used oscillator and clocks after wake-up */</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor">#if ULFRCO == 1 </span><span class="comment">/* ULFRCO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="comment">/* No specific code here */</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor">#else </span><span class="comment">/* LFXO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="comment">/* Disable the low-frequency crystal oscillator for the RTC */</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="comment">//CMU_OscillatorEnable(cmuOsc_LFXO, false, true);</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="preprocessor">#endif </span><span class="comment">/* ULFRCO/LFXO selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="comment">/* Disable the clock to the interface of the low energy modules</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment"> * cmuClock_CORELE = cmuClock_HFLE (deprecated) */</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="comment">//CMU_ClockEnable(cmuClock_HFLE, false);</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="comment">/* Turn off the RTC clock */</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  CMU_ClockEnable(cmuClock_RTC, <span class="keyword">false</span>);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="preprocessor">#endif </span><span class="comment">/* SysTick/RTC selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> }</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="comment">/**************************************************************************/</span><span class="comment">/**</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment"> * @brief</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="comment"> * Sleep for a certain amount of seconds in EM2/3.</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="comment"> *</span></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="comment"> * @details</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="comment"> * This method also initializes the RTC if necessary.</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="comment"> *</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="comment"> * @param[in] sSleep</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment"> * The sleep time in **seconds**.</span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment"> *****************************************************************************/</span></div><div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="delay_8c.html#aae86f940455b5957441f4331cdc0828d"> 293</a></span> <span class="keywordtype">void</span> <a class="code" href="delay_8c.html#aae86f940455b5957441f4331cdc0828d">sleep</a> (<a class="code" href="vl53l1__types_8h.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> sSleep)</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="comment">/* Initialize RTC if not already the case */</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">if</span> (!<a class="code" href="delay_8c.html#a31a8d0ba2d09ee649bb6d17829f89712">RTC_initialized</a>) <a class="code" href="delay_8c.html#aecf4672ef62001664f5ebc953755da1d">initRTC</a>();</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  {</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="comment">/* Only execute if we're not initializing */</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">if</span> (sSleep > 0)</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="comment">/* Enable necessary oscillator and clocks */</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="preprocessor">#if ULFRCO == 1 </span><span class="comment">/* ULFRCO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="comment">/* No specific code here */</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor">#else </span><span class="comment">/* LFXO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="comment">/* Enable the low-frequency crystal oscillator for the RTC */</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="comment">//CMU_OscillatorEnable(cmuOsc_LFXO, true, true);</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor">#endif </span><span class="comment">/* ULFRCO/LFXO selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="comment">/* Enable the clock to the interface of the low energy modules</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="comment"> * cmuClock_CORELE = cmuClock_HFLE (deprecated) */</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="comment">//CMU_ClockEnable(cmuClock_HFLE, true);</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="comment">/* Turn on the RTC clock */</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  CMU_ClockEnable(cmuClock_RTC, <span class="keyword">true</span>);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  }</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="comment">/* Only execute if we're not initializing */</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keywordflow">if</span> (sSleep > 0)</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="preprocessor">#if DEBUG_DBPRINT == 1 </span><span class="comment">/* DEBUG_DBPRINT */</span><span class="preprocessor"></span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="preprocessor">#if ANNOUNCE_SLEEPING == 1 </span><span class="comment">/* Announce sleeping enabled */</span><span class="preprocessor"></span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="preprocessor">#if ULFRCO == 1 </span><span class="comment">/* ULFRCO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <a class="code" href="dbprint_8c.html#a0511ddad2e00a8187d5449b15de7eb4f">dbinfoInt</a>(<span class="stringliteral">"Sleeping in EM3 for "</span>, sSleep, <span class="stringliteral">" s\n\r\n\r"</span>);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="preprocessor">#else </span><span class="comment">/* LFXO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <a class="code" href="dbprint_8c.html#a0511ddad2e00a8187d5449b15de7eb4f">dbinfoInt</a>(<span class="stringliteral">"Sleeping in EM2 for "</span>, sSleep, <span class="stringliteral">" s\n\r\n\r"</span>);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor">#endif </span><span class="comment">/* ULFRCO/LFXO selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="preprocessor">#endif </span><span class="comment">/* Announce sleeping */</span><span class="preprocessor"></span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="preprocessor">#endif </span><span class="comment">/* DEBUG_DBPRINT */</span><span class="preprocessor"></span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="comment">/* Set RTC compare value for RTC compare register 0 depending on ULFRCO/LFXO selection */</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="preprocessor">#if ULFRCO == 1 </span><span class="comment">/* ULFRCO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">if</span> ((<a class="code" href="delay_8c.html#a32d3f5f00133102c9c845ca65e7d5d77">ULFRCOFREQ</a> * sSleep) <= 0x00ffffff) RTC_CompareSet(0, (<a class="code" href="delay_8c.html#a32d3f5f00133102c9c845ca65e7d5d77">ULFRCOFREQ</a> * sSleep));</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor">#if DEBUG_DBPRINT == 1 </span><span class="comment">/* DEBUG_DBPRINT */</span><span class="preprocessor"></span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <a class="code" href="dbprint_8c.html#afbbbe6e04352a6b56d1d8a053ec4f941">dbcrit</a>(<span class="stringliteral">"Delay too long, can't fit in the field!"</span>);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="preprocessor">#endif </span><span class="comment">/* DEBUG_DBPRINT */</span><span class="preprocessor"></span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="comment">/* Turn off the RTC clock */</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  CMU_ClockEnable(cmuClock_RTC, <span class="keyword">false</span>);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="comment">// error(16);</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="comment">/* Exit function */</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  }</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="preprocessor">#else </span><span class="comment">/* LFXO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordflow">if</span> ((<a class="code" href="delay_8c.html#a608c42d50a4df7f45d31ce5e1fbe1270">LFXOFREQ</a> * sSleep) <= 0x00ffffff) RTC_CompareSet(0, (<a class="code" href="delay_8c.html#a608c42d50a4df7f45d31ce5e1fbe1270">LFXOFREQ</a> * sSleep));</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="preprocessor">#if DEBUG_DBPRINT == 1 </span><span class="comment">/* DEBUG_DBPRINT */</span><span class="preprocessor"></span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <a class="code" href="dbprint_8c.html#afbbbe6e04352a6b56d1d8a053ec4f941">dbcrit</a>(<span class="stringliteral">"Delay too long, can't fit in the field!"</span>);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="preprocessor">#endif </span><span class="comment">/* DEBUG_DBPRINT */</span><span class="preprocessor"></span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="comment">/* Turn off the RTC clock */</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  CMU_ClockEnable(cmuClock_RTC, <span class="keyword">false</span>);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span> </div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="comment">// error(17);</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="comment">/* Exit function */</span></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="preprocessor">#endif </span><span class="comment">/* ULFRCO/LFXO selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="comment">/* Indicate that we're using the sleep method */</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <a class="code" href="delay_8c.html#afc77d1fb95870b5511dffff362261cb6">sleeping</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="comment">/* Start the RTC */</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  RTC_Enable(<span class="keyword">true</span>);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="comment">/* Enter EM2/3 depending on ULFRCO/LFXO selection */</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor">#if ULFRCO == 1 </span><span class="comment">/* ULFRCO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="comment">/* In EM3, high and low frequency clocks are disabled. No oscillator (except the ULFRCO) is running.</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment"> * Furthermore, all unwanted oscillators are disabled in EM3. This means that nothing needs to be</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment"> * manually disabled before the statement EMU_EnterEM3(true); */</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  EMU_EnterEM3(<span class="keyword">true</span>); <span class="comment">/* "true" - Save and restore oscillators, clocks and voltage scaling */</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="preprocessor">#else </span><span class="comment">/* LFXO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  EMU_EnterEM2(<span class="keyword">true</span>); <span class="comment">/* "true" - Save and restore oscillators, clocks and voltage scaling */</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor">#endif </span><span class="comment">/* ULFRCO/LFXO selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="comment">/* Indicate that we're no longer sleeping */</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <a class="code" href="delay_8c.html#afc77d1fb95870b5511dffff362261cb6">sleeping</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="comment">/* Disable used oscillator and clocks after wake-up */</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor">#if ULFRCO == 1 </span><span class="comment">/* ULFRCO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="comment">/* No specific code here */</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor">#else </span><span class="comment">/* LFXO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="comment">/* Disable the low-frequency crystal oscillator for the RTC */</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="comment">//CMU_OscillatorEnable(cmuOsc_LFXO, false, true);</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor">#endif </span><span class="comment">/* ULFRCO/LFXO selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="comment">/* Disable the clock to the interface of the low energy modules</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="comment"> * cmuClock_CORELE = cmuClock_HFLE (deprecated) */</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="comment">//CMU_ClockEnable(cmuClock_HFLE, false);</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span> </div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="comment">/* Turn off the RTC clock */</span></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  CMU_ClockEnable(cmuClock_RTC, <span class="keyword">false</span>);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> }</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span> </div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="comment">/**************************************************************************/</span><span class="comment">/**</span></div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="comment"> * @brief</span></div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="comment"> * Method to check if the wakeup was caused by the RTC.</span></div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="comment"> *</span></div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="comment"> * @return</span></div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="comment"> * The value of `RTC_sleep_wakeup`.</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="comment"> *****************************************************************************/</span></div><div class="line"><a name="l00432"></a><span class="lineno"><a class="line" href="delay_8c.html#a7bfbeaf084abaa0fc6baf77a1640b598"> 432</a></span> <span class="keywordtype">bool</span> <a class="code" href="delay_8c.html#a7bfbeaf084abaa0fc6baf77a1640b598">RTC_checkWakeup</a> (<span class="keywordtype">void</span>)</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span> {</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordflow">return</span> (<a class="code" href="delay_8c.html#a5d05d3c03875b363db56e35882b55025">RTC_sleep_wakeup</a>);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span> }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="comment">/**************************************************************************/</span><span class="comment">/**</span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="comment"> * @brief</span></div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="comment"> * Method to clear `RTC_sleep_wakeup`.</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="comment"> *****************************************************************************/</span></div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="delay_8c.html#a072ccec54e047acce2566984c28b0232"> 442</a></span> <span class="keywordtype">void</span> <a class="code" href="delay_8c.html#a072ccec54e047acce2566984c28b0232">RTC_clearWakeup</a> (<span class="keywordtype">void</span>)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <a class="code" href="delay_8c.html#a5d05d3c03875b363db56e35882b55025">RTC_sleep_wakeup</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span> }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="comment">/**************************************************************************/</span><span class="comment">/**</span></div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="comment"> * @brief</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="comment"> * Method to get the time spend sleeping (in seconds) in the case</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="comment"> * of GPIO wake-up.</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="comment"> *</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="comment"> * @return</span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="comment"> * The time spend sleeping in **seconds**.</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="comment"> *****************************************************************************/</span></div><div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="delay_8c.html#a3e274aac5f6eaff85d00c25c6edff5a3"> 456</a></span> <a class="code" href="vl53l1__types_8h.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> <a class="code" href="delay_8c.html#a3e274aac5f6eaff85d00c25c6edff5a3">RTC_getPassedSleeptime</a> (<span class="keywordtype">void</span>)</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> {</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <a class="code" href="vl53l1__types_8h.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a> sSleep = RTC_CounterGet();</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="comment">/* Disable the counter */</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  RTC_Enable(<span class="keyword">false</span>);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="preprocessor">#if ULFRCO == 1 </span><span class="comment">/* ULFRCO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  sSleep /= <a class="code" href="delay_8c.html#a32d3f5f00133102c9c845ca65e7d5d77">ULFRCOFREQ</a>;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor">#else </span><span class="comment">/* LFXO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  sSleep /= <a class="code" href="delay_8c.html#a608c42d50a4df7f45d31ce5e1fbe1270">LFXOFREQ</a>;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor">#endif </span><span class="comment">/* ULFRCO/LFXO selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordflow">return</span> (sSleep);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="comment">/**************************************************************************/</span><span class="comment">/**</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="comment"> * @brief</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment"> * RTC initialization.</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="comment"> *</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="comment"> * @note</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="comment"> * This is a static method because it's only internally used in this file</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="comment"> * and called by other methods if necessary.</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="comment"> *****************************************************************************/</span></div><div class="line"><a name="l00481"></a><span class="lineno"><a class="line" href="delay_8c.html#aecf4672ef62001664f5ebc953755da1d"> 481</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="delay_8c.html#aecf4672ef62001664f5ebc953755da1d">initRTC</a> (<span class="keywordtype">void</span>)</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> {</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span> </div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor">#if ULFRCO == 1 </span><span class="comment">/* ULFRCO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> </div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="comment">/* Enable the ultra low-frequency RC oscillator for the RTC */</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="comment">//CMU_OscillatorEnable(cmuOsc_ULFRCO, true, true); /* The ULFRCO is always on */</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="comment">/* Enable the clock to the interface of the low energy modules</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="comment"> * cmuClock_CORELE = cmuClock_HFLE (deprecated) */</span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  CMU_ClockEnable(cmuClock_HFLE, <span class="keyword">true</span>);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> </div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="comment">/* Route the ULFRCO clock to the RTC */</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_ULFRCO);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor">#else </span><span class="comment">/* LFXO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="comment">/* Enable the low-frequency crystal oscillator for the RTC */</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  CMU_OscillatorEnable(cmuOsc_LFXO, <span class="keyword">true</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span> </div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="comment">/* Enable the clock to the interface of the low energy modules</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="comment"> * cmuClock_CORELE = cmuClock_HFLE (deprecated) */</span></div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  CMU_ClockEnable(cmuClock_HFLE, <span class="keyword">true</span>);</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="comment">/* Route the LFXO clock to the RTC */</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFXO);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span> </div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="preprocessor">#endif </span><span class="comment">/* ULFRCO/LFXO selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="comment">/* Turn on the RTC clock */</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  CMU_ClockEnable(cmuClock_RTC, <span class="keyword">true</span>);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> </div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="comment">/* Allow channel 0 to cause an interrupt */</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  RTC_IntEnable(RTC_IEN_COMP0);</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  RTC_IntClear(RTC_IFC_COMP0); <span class="comment">/* This statement was in the ULFRCO but not in the LFXO example. It's kept here just in case. */</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  NVIC_ClearPendingIRQ(RTC_IRQn);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  NVIC_EnableIRQ(RTC_IRQn);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="comment">/* Configure the RTC settings */</span></div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  RTC_Init_TypeDef rtc = RTC_INIT_DEFAULT;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  rtc.enable = <span class="keyword">false</span>; <span class="comment">/* Don't start counting when initialization is done */</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="comment">/* Initialize RTC with pre-defined settings */</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  RTC_Init(&rtc);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span> </div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="preprocessor">#if DEBUG_DBPRINT == 1 </span><span class="comment">/* DEBUG_DBPRINT */</span><span class="preprocessor"></span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor">#if ULFRCO == 1 </span><span class="comment">/* ULFRCO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <a class="code" href="dbprint_8c.html#acb5d4e1082c625ad85d835d4e053d4d8">dbinfo</a>(<span class="stringliteral">"RTC initialized with ULFRCO"</span>);</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="preprocessor">#else </span><span class="comment">/* LFXO selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <a class="code" href="dbprint_8c.html#acb5d4e1082c625ad85d835d4e053d4d8">dbinfo</a>(<span class="stringliteral">"RTC initialized with LFXO"</span>);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="preprocessor">#endif </span><span class="comment">/* ULFRCO/LFXO selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="preprocessor">#endif </span><span class="comment">/* DEBUG_DBPRINT */</span><span class="preprocessor"></span></div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <a class="code" href="delay_8c.html#a31a8d0ba2d09ee649bb6d17829f89712">RTC_initialized</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span> }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor">#if SYSTICKDELAY == 1 </span><span class="comment">/* SysTick delay selected */</span><span class="preprocessor"></span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="comment">/**************************************************************************/</span><span class="comment">/**</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="comment"> * @brief</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="comment"> * Interrupt Service Routine for system tick counter.</span></div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="comment"> *****************************************************************************/</span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="keywordtype">void</span> SysTick_Handler (<span class="keywordtype">void</span>)</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span> {</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  msTicks++; <span class="comment">/* Increment counter necessary by SysTick delay functionality */</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="preprocessor">#endif </span><span class="comment">/* SysTick/RTC selection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> </div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="comment">/**************************************************************************/</span><span class="comment">/**</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="comment"> * @brief</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="comment"> * Interrupt Service Routine for the RTC.</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="comment"> *</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="comment"> * @note</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="comment"> * The *weak* definition for this method is located in `system_efm32hg.h`.</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="comment"> *****************************************************************************/</span></div><div class="line"><a name="l00557"></a><span class="lineno"><a class="line" href="delay_8c.html#ab86b9dd0d7b4eacfe38086e1fa4c2312"> 557</a></span> <span class="keywordtype">void</span> <a class="code" href="delay_8c.html#ab86b9dd0d7b4eacfe38086e1fa4c2312">RTC_IRQHandler</a> (<span class="keywordtype">void</span>)</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> {</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="comment">/* Disable the counter */</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  RTC_Enable(<span class="keyword">false</span>);</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> </div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <span class="comment">/* Clear the interrupt source */</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  RTC_IntClear(RTC_IFC_COMP0);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span> </div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="comment">/* If the wakeup was caused by "sleeping" (not a delay), act accordingly */</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keywordflow">if</span> (<a class="code" href="delay_8c.html#afc77d1fb95870b5511dffff362261cb6">sleeping</a>) <a class="code" href="delay_8c.html#a5d05d3c03875b363db56e35882b55025">RTC_sleep_wakeup</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span> }</div><div class="ttc" id="delay_8c_html_aae86f940455b5957441f4331cdc0828d"><div class="ttname"><a href="delay_8c.html#aae86f940455b5957441f4331cdc0828d">sleep</a></div><div class="ttdeci">void sleep(uint32_t sSleep)</div><div class="ttdoc">Sleep for a certain amount of seconds in EM2/3. </div><div class="ttdef"><b>Definition:</b> <a href="delay_8c_source.html#l00293">delay.c:293</a></div></div>
<div class="ttc" id="delay_8c_html_a32d3f5f00133102c9c845ca65e7d5d77"><div class="ttname"><a href="delay_8c.html#a32d3f5f00133102c9c845ca65e7d5d77">ULFRCOFREQ</a></div><div class="ttdeci">#define ULFRCOFREQ</div><div class="ttdef"><b>Definition:</b> <a href="delay_8c_source.html#l00085">delay.c:85</a></div></div>
<div class="ttc" id="dbprint_8c_html_a0511ddad2e00a8187d5449b15de7eb4f"><div class="ttname"><a href="dbprint_8c.html#a0511ddad2e00a8187d5449b15de7eb4f">dbinfoInt</a></div><div class="ttdeci">void dbinfoInt(char *message1, int32_t value, char *message2)</div><div class="ttdoc">Print an info value surrounded by two strings (char array) to USARTx. </div><div class="ttdef"><b>Definition:</b> <a href="dbprint_8c_source.html#l00569">dbprint.c:569</a></div></div>
<div class="ttc" id="delay_8c_html_aecf4672ef62001664f5ebc953755da1d"><div class="ttname"><a href="delay_8c.html#aecf4672ef62001664f5ebc953755da1d">initRTC</a></div><div class="ttdeci">static void initRTC(void)</div><div class="ttdoc">RTC initialization. </div><div class="ttdef"><b>Definition:</b> <a href="delay_8c_source.html#l00481">delay.c:481</a></div></div>
<div class="ttc" id="delay_8c_html_a31a8d0ba2d09ee649bb6d17829f89712"><div class="ttname"><a href="delay_8c.html#a31a8d0ba2d09ee649bb6d17829f89712">RTC_initialized</a></div><div class="ttdeci">bool RTC_initialized</div><div class="ttdef"><b>Definition:</b> <a href="delay_8c_source.html#l00102">delay.c:102</a></div></div>
<div class="ttc" id="dbprint_8c_html_acb5d4e1082c625ad85d835d4e053d4d8"><div class="ttname"><a href="dbprint_8c.html#acb5d4e1082c625ad85d835d4e053d4d8">dbinfo</a></div><div class="ttdeci">void dbinfo(char *message)</div><div class="ttdoc">Print an info string (char array) to USARTx and go to the next line. </div><div class="ttdef"><b>Definition:</b> <a href="dbprint_8c_source.html#l00505">dbprint.c:505</a></div></div>
<div class="ttc" id="delay_8c_html_ab86b9dd0d7b4eacfe38086e1fa4c2312"><div class="ttname"><a href="delay_8c.html#ab86b9dd0d7b4eacfe38086e1fa4c2312">RTC_IRQHandler</a></div><div class="ttdeci">void RTC_IRQHandler(void)</div><div class="ttdoc">Interrupt Service Routine for the RTC. </div><div class="ttdef"><b>Definition:</b> <a href="delay_8c_source.html#l00557">delay.c:557</a></div></div>
<div class="ttc" id="delay_8c_html_a3e274aac5f6eaff85d00c25c6edff5a3"><div class="ttname"><a href="delay_8c.html#a3e274aac5f6eaff85d00c25c6edff5a3">RTC_getPassedSleeptime</a></div><div class="ttdeci">uint32_t RTC_getPassedSleeptime(void)</div><div class="ttdoc">Method to get the time spend sleeping (in seconds) in the case of GPIO wake-up. </div><div class="ttdef"><b>Definition:</b> <a href="delay_8c_source.html#l00456">delay.c:456</a></div></div>
<div class="ttc" id="delay_8c_html_a072ccec54e047acce2566984c28b0232"><div class="ttname"><a href="delay_8c.html#a072ccec54e047acce2566984c28b0232">RTC_clearWakeup</a></div><div class="ttdeci">void RTC_clearWakeup(void)</div><div class="ttdoc">Method to clear RTC_sleep_wakeup. </div><div class="ttdef"><b>Definition:</b> <a href="delay_8c_source.html#l00442">delay.c:442</a></div></div>
<div class="ttc" id="delay_8h_html"><div class="ttname"><a href="delay_8h.html">delay.h</a></div><div class="ttdoc">Delay functionality. </div></div>
<div class="ttc" id="delay_8c_html_a7bfbeaf084abaa0fc6baf77a1640b598"><div class="ttname"><a href="delay_8c.html#a7bfbeaf084abaa0fc6baf77a1640b598">RTC_checkWakeup</a></div><div class="ttdeci">bool RTC_checkWakeup(void)</div><div class="ttdoc">Method to check if the wakeup was caused by the RTC. </div><div class="ttdef"><b>Definition:</b> <a href="delay_8c_source.html#l00432">delay.c:432</a></div></div>
<div class="ttc" id="delay_8c_html_adb46f4276f5ddf111153701858f85df6"><div class="ttname"><a href="delay_8c.html#adb46f4276f5ddf111153701858f85df6">delay</a></div><div class="ttdeci">void delay(uint32_t msDelay)</div><div class="ttdoc">Wait for a certain amount of milliseconds in EM2/3. </div><div class="ttdef"><b>Definition:</b> <a href="delay_8c_source.html#l00124">delay.c:124</a></div></div>
<div class="ttc" id="debug__dbprint_8h_html"><div class="ttname"><a href="debug__dbprint_8h.html">debug_dbprint.h</a></div><div class="ttdoc">Enable or disable printing to UART with dbprint. </div></div>
<div class="ttc" id="delay_8c_html_acde5abcdec802c050f0fdf095fb28343"><div class="ttname"><a href="delay_8c.html#acde5abcdec802c050f0fdf095fb28343">LFXOFREQ_MS</a></div><div class="ttdeci">#define LFXOFREQ_MS</div><div class="ttdef"><b>Definition:</b> <a href="delay_8c_source.html#l00088">delay.c:88</a></div></div>
<div class="ttc" id="delay_8c_html_a7dfc303d591a9e657e53c979d8e0c664"><div class="ttname"><a href="delay_8c.html#a7dfc303d591a9e657e53c979d8e0c664">ULFRCOFREQ_MS</a></div><div class="ttdeci">#define ULFRCOFREQ_MS</div><div class="ttdef"><b>Definition:</b> <a href="delay_8c_source.html#l00086">delay.c:86</a></div></div>
<div class="ttc" id="delay_8c_html_a5d05d3c03875b363db56e35882b55025"><div class="ttname"><a href="delay_8c.html#a5d05d3c03875b363db56e35882b55025">RTC_sleep_wakeup</a></div><div class="ttdeci">static volatile bool RTC_sleep_wakeup</div><div class="ttdef"><b>Definition:</b> <a href="delay_8c_source.html#l00094">delay.c:94</a></div></div>
<div class="ttc" id="dbprint_8c_html_afbbbe6e04352a6b56d1d8a053ec4f941"><div class="ttname"><a href="dbprint_8c.html#afbbbe6e04352a6b56d1d8a053ec4f941">dbcrit</a></div><div class="ttdeci">void dbcrit(char *message)</div><div class="ttdoc">Print a critical error string (char array) in red to USARTx and go to the next line. </div><div class="ttdef"><b>Definition:</b> <a href="dbprint_8c_source.html#l00541">dbprint.c:541</a></div></div>
<div class="ttc" id="delay_8c_html_a608c42d50a4df7f45d31ce5e1fbe1270"><div class="ttname"><a href="delay_8c.html#a608c42d50a4df7f45d31ce5e1fbe1270">LFXOFREQ</a></div><div class="ttdeci">#define LFXOFREQ</div><div class="ttdef"><b>Definition:</b> <a href="delay_8c_source.html#l00087">delay.c:87</a></div></div>
<div class="ttc" id="delay_8c_html_afc77d1fb95870b5511dffff362261cb6"><div class="ttname"><a href="delay_8c.html#afc77d1fb95870b5511dffff362261cb6">sleeping</a></div><div class="ttdeci">bool sleeping</div><div class="ttdef"><b>Definition:</b> <a href="delay_8c_source.html#l00101">delay.c:101</a></div></div>
<div class="ttc" id="vl53l1__types_8h_html_a435d1572bf3f880d55459d9805097f62"><div class="ttname"><a href="vl53l1__types_8h.html#a435d1572bf3f880d55459d9805097f62">uint32_t</a></div><div class="ttdeci">unsigned int uint32_t</div><div class="ttdoc">Typedef defining 32 bit unsigned int type. The developer should modify this to suit the platform bein...</div><div class="ttdef"><b>Definition:</b> <a href="vl53l1__types_8h_source.html#l00078">vl53l1_types.h:78</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_d9edf6c004b4a7ff14fe9ae7a92214ee.html">firmware</a></li><li class="navelem"><a class="el" href="dir_9a5a365c58dea0dc152d55f461feaba5.html">EFM32HG222F64_iot-mbbr</a></li><li class="navelem"><a class="el" href="dir_07cf71b65af3d7a9f5557ec1f8ea51c9.html">src</a></li><li class="navelem"><a class="el" href="delay_8c.html">delay.c</a></li>
<li class="footer">Generated on Thu Sep 3 2020 04:44:25 for IoT-MBBR (masterthesis) by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>