1 <!-- HTML header for doxygen 1.8.20-->
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml">
5 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
6 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
7 <meta name="generator" content="Doxygen 1.9.4"/>
8 <meta name="viewport" content="width=device-width, initial-scale=1"/>
9 <title>Raspberry Pi Pico SDK: hardware_adc</title>
10 <!-- <link href="tabs.css" rel="stylesheet" type="text/css"/> -->
11 <script type="text/javascript" src="jquery.js"></script>
12 <script type="text/javascript" src="dynsections.js"></script>
13 <link href="navtree.css" rel="stylesheet" type="text/css"/>
14 <script type="text/javascript" src="resize.js"></script>
15 <script type="text/javascript" src="navtreedata.js"></script>
16 <script type="text/javascript" src="navtree.js"></script>
17 <link href="search/search.css" rel="stylesheet" type="text/css"/>
18 <script type="text/javascript" src="search/searchdata.js"></script>
19 <script type="text/javascript" src="search/search.js"></script>
20 <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
21 <link href="doxygen.css" rel="stylesheet" type="text/css" />
22 <link href="normalise.css" rel="stylesheet" type="text/css"/>
23 <link href="main.css" rel="stylesheet" type="text/css"/>
24 <link href="styles.css" rel="stylesheet" type="text/css"/>
27 <div class="navigation-mobile">
28 <div class="logo--mobile">
29 <a href="/"><img src="logo-mobile.svg" alt="Raspberry Pi"></a>
31 <div class="navigation-toggle">
32 <span class="line-1"></span>
36 <span class="line-3"></span>
39 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
41 <a href="index.html"> <img src="logo.svg" alt="Raspberry Pi"></a>
42 <span style="display: inline-block; margin-top: 10px;">
46 <div class="navigation-footer">
47 <img src="logo-mobile.svg" alt="Raspberry Pi">
48 <a href="https://www.raspberrypi.com/" target="_blank">By Raspberry Pi Ltd</a>
50 <!-- <div class="search">
52 <input type="search" name="search" id="search" placeholder="Search">
53 <input type="submit" value="Search">
56 <!-- Generated by Doxygen 1.9.4 -->
57 <script type="text/javascript">
58 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
59 var searchBox = new SearchBox("searchBox", "search",'Search','.html');
62 <script type="text/javascript" src="menudata.js"></script>
63 <script type="text/javascript" src="menu.js"></script>
64 <script type="text/javascript">
65 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
67 initMenu('',true,false,'search.php','Search');
68 $(document).ready(function() { init_search(); });
72 <div id="main-nav"></div>
74 <div id="side-nav" class="ui-resizable side-nav-resizable">
76 <div id="nav-tree-contents">
77 <div id="nav-sync" class="sync"></div>
80 <div id="splitbar" style="-moz-user-select:none;"
81 class="ui-resizable-handle">
84 <script type="text/javascript">
85 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
86 $(document).ready(function(){initNavTree('group__hardware__adc.html',''); initResizable(); });
89 <div id="doc-content">
90 <!-- window showing the filter options -->
91 <div id="MSearchSelectWindow"
92 onmouseover="return searchBox.OnSearchSelectShow()"
93 onmouseout="return searchBox.OnSearchSelectHide()"
94 onkeydown="return searchBox.OnSearchSelectKey(event)">
97 <!-- iframe showing the search results (closed by default) -->
98 <div id="MSearchResultsWindow">
99 <iframe src="javascript:void(0)" frameborder="0"
100 name="MSearchResults" id="MSearchResults">
105 <div class="summary">
106 <a href="#func-members">Functions</a> </div>
107 <div class="headertitle"><div class="title">hardware_adc<div class="ingroups"><a class="el" href="group__hardware.html">Hardware APIs</a></div></div></div>
109 <div class="contents">
111 <p>Analog to Digital Converter (ADC) API.
112 <a href="#details">More...</a></p>
113 <table class="memberdecls">
114 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
115 Functions</h2></td></tr>
116 <tr class="memitem:ga2b815e6730e8723a6d1d06d9ef8f31c0"><td class="memItemLeft" align="right" valign="top"><a id="ga2b815e6730e8723a6d1d06d9ef8f31c0" name="ga2b815e6730e8723a6d1d06d9ef8f31c0"></a>
117 void </td><td class="memItemRight" valign="bottom"><b>adc_init</b> (void)</td></tr>
118 <tr class="memdesc:ga2b815e6730e8723a6d1d06d9ef8f31c0"><td class="mdescLeft"> </td><td class="mdescRight">Initialise the ADC HW. <br /></td></tr>
119 <tr class="separator:ga2b815e6730e8723a6d1d06d9ef8f31c0"><td class="memSeparator" colspan="2"> </td></tr>
120 <tr class="memitem:gab15d6e804715935b4e9b5027a2940910"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#gab15d6e804715935b4e9b5027a2940910">adc_gpio_init</a> (uint gpio)</td></tr>
121 <tr class="memdesc:gab15d6e804715935b4e9b5027a2940910"><td class="mdescLeft"> </td><td class="mdescRight">Initialise the gpio for use as an ADC pin. <a href="group__hardware__adc.html#gab15d6e804715935b4e9b5027a2940910">More...</a><br /></td></tr>
122 <tr class="separator:gab15d6e804715935b4e9b5027a2940910"><td class="memSeparator" colspan="2"> </td></tr>
123 <tr class="memitem:ga5d3b8875947df2f4ba022cb6aa40594b"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#ga5d3b8875947df2f4ba022cb6aa40594b">adc_select_input</a> (uint input)</td></tr>
124 <tr class="memdesc:ga5d3b8875947df2f4ba022cb6aa40594b"><td class="mdescLeft"> </td><td class="mdescRight">ADC input select. <a href="group__hardware__adc.html#ga5d3b8875947df2f4ba022cb6aa40594b">More...</a><br /></td></tr>
125 <tr class="separator:ga5d3b8875947df2f4ba022cb6aa40594b"><td class="memSeparator" colspan="2"> </td></tr>
126 <tr class="memitem:ga84b5f9054de9c00d51095c9bdefb2dca"><td class="memItemLeft" align="right" valign="top">static uint </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#ga84b5f9054de9c00d51095c9bdefb2dca">adc_get_selected_input</a> (void)</td></tr>
127 <tr class="memdesc:ga84b5f9054de9c00d51095c9bdefb2dca"><td class="mdescLeft"> </td><td class="mdescRight">Get the currently selected ADC input channel. <a href="group__hardware__adc.html#ga84b5f9054de9c00d51095c9bdefb2dca">More...</a><br /></td></tr>
128 <tr class="separator:ga84b5f9054de9c00d51095c9bdefb2dca"><td class="memSeparator" colspan="2"> </td></tr>
129 <tr class="memitem:ga16d25be75e16f0671d3e3185b0b59771"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#ga16d25be75e16f0671d3e3185b0b59771">adc_set_round_robin</a> (uint input_mask)</td></tr>
130 <tr class="memdesc:ga16d25be75e16f0671d3e3185b0b59771"><td class="mdescLeft"> </td><td class="mdescRight">Round Robin sampling selector. <a href="group__hardware__adc.html#ga16d25be75e16f0671d3e3185b0b59771">More...</a><br /></td></tr>
131 <tr class="separator:ga16d25be75e16f0671d3e3185b0b59771"><td class="memSeparator" colspan="2"> </td></tr>
132 <tr class="memitem:ga33f302059e05899d1709d6268d75972b"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#ga33f302059e05899d1709d6268d75972b">adc_set_temp_sensor_enabled</a> (bool enable)</td></tr>
133 <tr class="memdesc:ga33f302059e05899d1709d6268d75972b"><td class="mdescLeft"> </td><td class="mdescRight">Enable the onboard temperature sensor. <a href="group__hardware__adc.html#ga33f302059e05899d1709d6268d75972b">More...</a><br /></td></tr>
134 <tr class="separator:ga33f302059e05899d1709d6268d75972b"><td class="memSeparator" colspan="2"> </td></tr>
135 <tr class="memitem:gaf32d82a43103e6672048001f58d5f6fb"><td class="memItemLeft" align="right" valign="top">static uint16_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#gaf32d82a43103e6672048001f58d5f6fb">adc_read</a> (void)</td></tr>
136 <tr class="memdesc:gaf32d82a43103e6672048001f58d5f6fb"><td class="mdescLeft"> </td><td class="mdescRight">Perform a single conversion. <a href="group__hardware__adc.html#gaf32d82a43103e6672048001f58d5f6fb">More...</a><br /></td></tr>
137 <tr class="separator:gaf32d82a43103e6672048001f58d5f6fb"><td class="memSeparator" colspan="2"> </td></tr>
138 <tr class="memitem:ga5d50a24eb26da7fbc6ee9bc76723b09c"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#ga5d50a24eb26da7fbc6ee9bc76723b09c">adc_run</a> (bool run)</td></tr>
139 <tr class="memdesc:ga5d50a24eb26da7fbc6ee9bc76723b09c"><td class="mdescLeft"> </td><td class="mdescRight">Enable or disable free-running sampling mode. <a href="group__hardware__adc.html#ga5d50a24eb26da7fbc6ee9bc76723b09c">More...</a><br /></td></tr>
140 <tr class="separator:ga5d50a24eb26da7fbc6ee9bc76723b09c"><td class="memSeparator" colspan="2"> </td></tr>
141 <tr class="memitem:ga333f7ca46a11241d96d0a4c24f0d4bb0"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#ga333f7ca46a11241d96d0a4c24f0d4bb0">adc_set_clkdiv</a> (float clkdiv)</td></tr>
142 <tr class="memdesc:ga333f7ca46a11241d96d0a4c24f0d4bb0"><td class="mdescLeft"> </td><td class="mdescRight">Set the ADC Clock divisor. <a href="group__hardware__adc.html#ga333f7ca46a11241d96d0a4c24f0d4bb0">More...</a><br /></td></tr>
143 <tr class="separator:ga333f7ca46a11241d96d0a4c24f0d4bb0"><td class="memSeparator" colspan="2"> </td></tr>
144 <tr class="memitem:ga2a6fa32da04e65a027e14deaf32b8f10"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#ga2a6fa32da04e65a027e14deaf32b8f10">adc_fifo_setup</a> (bool en, bool dreq_en, uint16_t dreq_thresh, bool err_in_fifo, bool byte_shift)</td></tr>
145 <tr class="memdesc:ga2a6fa32da04e65a027e14deaf32b8f10"><td class="mdescLeft"> </td><td class="mdescRight">Setup the ADC FIFO. <a href="group__hardware__adc.html#ga2a6fa32da04e65a027e14deaf32b8f10">More...</a><br /></td></tr>
146 <tr class="separator:ga2a6fa32da04e65a027e14deaf32b8f10"><td class="memSeparator" colspan="2"> </td></tr>
147 <tr class="memitem:gafdfd586e6c26ffe4759afaa3c3f95465"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#gafdfd586e6c26ffe4759afaa3c3f95465">adc_fifo_is_empty</a> (void)</td></tr>
148 <tr class="memdesc:gafdfd586e6c26ffe4759afaa3c3f95465"><td class="mdescLeft"> </td><td class="mdescRight">Check FIFO empty state. <a href="group__hardware__adc.html#gafdfd586e6c26ffe4759afaa3c3f95465">More...</a><br /></td></tr>
149 <tr class="separator:gafdfd586e6c26ffe4759afaa3c3f95465"><td class="memSeparator" colspan="2"> </td></tr>
150 <tr class="memitem:gafa9793deea59c5cbfea147e0e9d895c3"><td class="memItemLeft" align="right" valign="top">static uint8_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#gafa9793deea59c5cbfea147e0e9d895c3">adc_fifo_get_level</a> (void)</td></tr>
151 <tr class="memdesc:gafa9793deea59c5cbfea147e0e9d895c3"><td class="mdescLeft"> </td><td class="mdescRight">Get number of entries in the ADC FIFO. <a href="group__hardware__adc.html#gafa9793deea59c5cbfea147e0e9d895c3">More...</a><br /></td></tr>
152 <tr class="separator:gafa9793deea59c5cbfea147e0e9d895c3"><td class="memSeparator" colspan="2"> </td></tr>
153 <tr class="memitem:ga689d64744e7fe5284562569b24e9d624"><td class="memItemLeft" align="right" valign="top">static uint16_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#ga689d64744e7fe5284562569b24e9d624">adc_fifo_get</a> (void)</td></tr>
154 <tr class="memdesc:ga689d64744e7fe5284562569b24e9d624"><td class="mdescLeft"> </td><td class="mdescRight">Get ADC result from FIFO. <a href="group__hardware__adc.html#ga689d64744e7fe5284562569b24e9d624">More...</a><br /></td></tr>
155 <tr class="separator:ga689d64744e7fe5284562569b24e9d624"><td class="memSeparator" colspan="2"> </td></tr>
156 <tr class="memitem:ga61553375ecc9275fa14c6ff7792a1506"><td class="memItemLeft" align="right" valign="top">static uint16_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#ga61553375ecc9275fa14c6ff7792a1506">adc_fifo_get_blocking</a> (void)</td></tr>
157 <tr class="memdesc:ga61553375ecc9275fa14c6ff7792a1506"><td class="mdescLeft"> </td><td class="mdescRight">Wait for the ADC FIFO to have data. <a href="group__hardware__adc.html#ga61553375ecc9275fa14c6ff7792a1506">More...</a><br /></td></tr>
158 <tr class="separator:ga61553375ecc9275fa14c6ff7792a1506"><td class="memSeparator" colspan="2"> </td></tr>
159 <tr class="memitem:gad637d97583f2c24e4159dc22bf17eaf2"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#gad637d97583f2c24e4159dc22bf17eaf2">adc_fifo_drain</a> (void)</td></tr>
160 <tr class="memdesc:gad637d97583f2c24e4159dc22bf17eaf2"><td class="mdescLeft"> </td><td class="mdescRight">Drain the ADC FIFO. <a href="group__hardware__adc.html#gad637d97583f2c24e4159dc22bf17eaf2">More...</a><br /></td></tr>
161 <tr class="separator:gad637d97583f2c24e4159dc22bf17eaf2"><td class="memSeparator" colspan="2"> </td></tr>
162 <tr class="memitem:gaf8e363e63f40e00c169f7355c9668681"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__adc.html#gaf8e363e63f40e00c169f7355c9668681">adc_irq_set_enabled</a> (bool enabled)</td></tr>
163 <tr class="memdesc:gaf8e363e63f40e00c169f7355c9668681"><td class="mdescLeft"> </td><td class="mdescRight">Enable/Disable ADC interrupts. <a href="group__hardware__adc.html#gaf8e363e63f40e00c169f7355c9668681">More...</a><br /></td></tr>
164 <tr class="separator:gaf8e363e63f40e00c169f7355c9668681"><td class="memSeparator" colspan="2"> </td></tr>
166 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
167 <p >Analog to Digital Converter (ADC) API. </p>
168 <p >RP-series microcontrollers have an internal analogue-digital converter (ADC) with the following features:</p><ul>
170 <li>500 kS/s (Using an independent 48MHz clock)</li>
171 <li>12 bit (RP2040 8.7 ENOB, RP2350 9.2 ENOB) </li>
172 <li>RP2040 5 input mux:<ul>
173 <li>4 inputs that are available on package pins shared with GPIO[29:26]</li>
174 <li>1 input is dedicated to the internal temperature sensor</li>
175 <li>4 element receive sample FIFO </li>
180 <li>RP2350 5 or 9 input mux:<ul>
181 <li>4 inputs available on QFN-60 package pins shared with GPIO[29:26]</li>
182 <li>8 inputs available on QFN-80 package pins shared with GPIO[47:40]</li>
183 <li>8 element receive sample FIFO </li>
186 <li>One input dedicated to the internal temperature sensor (see Section 12.4.6)</li>
187 <li>Interrupt generation</li>
188 <li>DMA interface</li>
190 <p >Although there is only one ADC you can specify the input to it using the <a class="el" href="group__hardware__adc.html#ga5d3b8875947df2f4ba022cb6aa40594b" title="ADC input select.">adc_select_input()</a> function. In round robin mode (<a class="el" href="group__hardware__adc.html#ga16d25be75e16f0671d3e3185b0b59771" title="Round Robin sampling selector.">adc_set_round_robin()</a>), the ADC will use that input and move to the next one after a read.</p>
191 <p >RP2040, RP2350 QFN-60: User ADC inputs are on 0-3 (GPIO 26-29), the temperature sensor is on input 4. RP2350 QFN-80 : User ADC inputs are on 0-7 (GPIO 40-47), the temperature sensor is on input 8.</p>
192 <p >Temperature sensor values can be approximated in centigrade as:</p>
193 <p >T = 27 - (ADC_Voltage - 0.706)/0.001721</p>
194 <h2><a class="anchor" id="adc_example"></a>
196 <div class="fragment"><div class="line"> </div>
197 <div class="line"><span class="preprocessor">#include <<a class="code" href="stdio_8h.html">stdio.h</a>></span></div>
198 <div class="line"><span class="preprocessor">#include "<a class="code" href="stdlib_8h.html">pico/stdlib.h</a>"</span></div>
199 <div class="line"><span class="preprocessor">#include "<a class="code" href="gpio_8h.html">hardware/gpio.h</a>"</span></div>
200 <div class="line"><span class="preprocessor">#include "<a class="code" href="rp2__common_2hardware__adc_2include_2hardware_2adc_8h.html">hardware/adc.h</a>"</span></div>
201 <div class="line"> </div>
202 <div class="line"><span class="keywordtype">int</span> main() {</div>
203 <div class="line"> <a class="code hl_function" href="group__pico__stdio.html#ga0e604311fb226dae91ff4eb17a19d67a">stdio_init_all</a>();</div>
204 <div class="line"> printf(<span class="stringliteral">"ADC Example, measuring GPIO26\n"</span>);</div>
205 <div class="line"> </div>
206 <div class="line"> <a class="code hl_function" href="group__hardware__adc.html#ga2b815e6730e8723a6d1d06d9ef8f31c0">adc_init</a>();</div>
207 <div class="line"> </div>
208 <div class="line"> <span class="comment">// Make sure GPIO is high-impedance, no pullups etc</span></div>
209 <div class="line"> <a class="code hl_function" href="group__hardware__adc.html#gab15d6e804715935b4e9b5027a2940910">adc_gpio_init</a>(26);</div>
210 <div class="line"> <span class="comment">// Select ADC input 0 (GPIO26)</span></div>
211 <div class="line"> <a class="code hl_function" href="group__hardware__adc.html#ga5d3b8875947df2f4ba022cb6aa40594b">adc_select_input</a>(0);</div>
212 <div class="line"> </div>
213 <div class="line"> <span class="keywordflow">while</span> (1) {</div>
214 <div class="line"> <span class="comment">// 12-bit conversion, assume max value == ADC_VREF == 3.3 V</span></div>
215 <div class="line"> <span class="keyword">const</span> <span class="keywordtype">float</span> conversion_factor = 3.3f / (1 << 12);</div>
216 <div class="line"> uint16_t result = <a class="code hl_function" href="group__hardware__adc.html#gaf32d82a43103e6672048001f58d5f6fb">adc_read</a>();</div>
217 <div class="line"> printf(<span class="stringliteral">"Raw value: 0x%03x, voltage: %f V\n"</span>, result, result * conversion_factor);</div>
218 <div class="line"> <a class="code hl_function" href="group__sleep.html#gae617a6842d4f3a192064c4354b88fcff">sleep_ms</a>(500);</div>
219 <div class="line"> }</div>
220 <div class="line">}</div>
221 <div class="ttc" id="agpio_8h_html"><div class="ttname"><a href="gpio_8h.html">gpio.h</a></div></div>
222 <div class="ttc" id="agroup__hardware__adc_html_ga2b815e6730e8723a6d1d06d9ef8f31c0"><div class="ttname"><a href="group__hardware__adc.html#ga2b815e6730e8723a6d1d06d9ef8f31c0">adc_init</a></div><div class="ttdeci">void adc_init(void)</div><div class="ttdoc">Initialise the ADC HW.</div><div class="ttdef"><b>Definition:</b> adc.c:11</div></div>
223 <div class="ttc" id="agroup__hardware__adc_html_ga5d3b8875947df2f4ba022cb6aa40594b"><div class="ttname"><a href="group__hardware__adc.html#ga5d3b8875947df2f4ba022cb6aa40594b">adc_select_input</a></div><div class="ttdeci">static void adc_select_input(uint input)</div><div class="ttdoc">ADC input select.</div><div class="ttdef"><b>Definition:</b> adc.h:113</div></div>
224 <div class="ttc" id="agroup__hardware__adc_html_gab15d6e804715935b4e9b5027a2940910"><div class="ttname"><a href="group__hardware__adc.html#gab15d6e804715935b4e9b5027a2940910">adc_gpio_init</a></div><div class="ttdeci">static void adc_gpio_init(uint gpio)</div><div class="ttdoc">Initialise the gpio for use as an ADC pin.</div><div class="ttdef"><b>Definition:</b> adc.h:90</div></div>
225 <div class="ttc" id="agroup__hardware__adc_html_gaf32d82a43103e6672048001f58d5f6fb"><div class="ttname"><a href="group__hardware__adc.html#gaf32d82a43103e6672048001f58d5f6fb">adc_read</a></div><div class="ttdeci">static uint16_t adc_read(void)</div><div class="ttdoc">Perform a single conversion.</div><div class="ttdef"><b>Definition:</b> adc.h:170</div></div>
226 <div class="ttc" id="agroup__pico__stdio_html_ga0e604311fb226dae91ff4eb17a19d67a"><div class="ttname"><a href="group__pico__stdio.html#ga0e604311fb226dae91ff4eb17a19d67a">stdio_init_all</a></div><div class="ttdeci">bool stdio_init_all(void)</div><div class="ttdoc">Initialize all of the present standard stdio types that are linked into the binary.</div><div class="ttdef"><b>Definition:</b> stdio.c:200</div></div>
227 <div class="ttc" id="agroup__sleep_html_gae617a6842d4f3a192064c4354b88fcff"><div class="ttname"><a href="group__sleep.html#gae617a6842d4f3a192064c4354b88fcff">sleep_ms</a></div><div class="ttdeci">void sleep_ms(uint32_t ms)</div><div class="ttdoc">Wait for the given number of milliseconds before returning.</div><div class="ttdef"><b>Definition:</b> time.c:431</div></div>
228 <div class="ttc" id="arp2__common_2hardware__adc_2include_2hardware_2adc_8h_html"><div class="ttname"><a href="rp2__common_2hardware__adc_2include_2hardware_2adc_8h.html">adc.h</a></div></div>
229 <div class="ttc" id="astdio_8h_html"><div class="ttname"><a href="stdio_8h.html">stdio.h</a></div></div>
230 <div class="ttc" id="astdlib_8h_html"><div class="ttname"><a href="stdlib_8h.html">stdlib.h</a></div></div>
231 </div><!-- fragment --> <h2 class="groupheader">Function Documentation</h2>
232 <a id="gad637d97583f2c24e4159dc22bf17eaf2" name="gad637d97583f2c24e4159dc22bf17eaf2"></a>
233 <h2 class="memtitle"><span class="permalink"><a href="#gad637d97583f2c24e4159dc22bf17eaf2">◆ </a></span>adc_fifo_drain()</h2>
235 <div class="memitem">
236 <div class="memproto">
237 <table class="mlabels">
239 <td class="mlabels-left">
240 <table class="memname">
242 <td class="memname">static void adc_fifo_drain </td>
244 <td class="paramtype">void </td>
245 <td class="paramname"></td><td>)</td>
250 <td class="mlabels-right">
251 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
254 </div><div class="memdoc">
256 <p>Drain the ADC FIFO. </p>
257 <p >Will wait for any conversion to complete then drain the FIFO, discarding any results. </p>
261 <a id="ga689d64744e7fe5284562569b24e9d624" name="ga689d64744e7fe5284562569b24e9d624"></a>
262 <h2 class="memtitle"><span class="permalink"><a href="#ga689d64744e7fe5284562569b24e9d624">◆ </a></span>adc_fifo_get()</h2>
264 <div class="memitem">
265 <div class="memproto">
266 <table class="mlabels">
268 <td class="mlabels-left">
269 <table class="memname">
271 <td class="memname">static uint16_t adc_fifo_get </td>
273 <td class="paramtype">void </td>
274 <td class="paramname"></td><td>)</td>
279 <td class="mlabels-right">
280 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
283 </div><div class="memdoc">
285 <p>Get ADC result from FIFO. </p>
286 <p >Pops the latest result from the ADC FIFO. </p>
290 <a id="ga61553375ecc9275fa14c6ff7792a1506" name="ga61553375ecc9275fa14c6ff7792a1506"></a>
291 <h2 class="memtitle"><span class="permalink"><a href="#ga61553375ecc9275fa14c6ff7792a1506">◆ </a></span>adc_fifo_get_blocking()</h2>
293 <div class="memitem">
294 <div class="memproto">
295 <table class="mlabels">
297 <td class="mlabels-left">
298 <table class="memname">
300 <td class="memname">static uint16_t adc_fifo_get_blocking </td>
302 <td class="paramtype">void </td>
303 <td class="paramname"></td><td>)</td>
308 <td class="mlabels-right">
309 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
312 </div><div class="memdoc">
314 <p>Wait for the ADC FIFO to have data. </p>
315 <p >Blocks until data is present in the FIFO </p>
319 <a id="gafa9793deea59c5cbfea147e0e9d895c3" name="gafa9793deea59c5cbfea147e0e9d895c3"></a>
320 <h2 class="memtitle"><span class="permalink"><a href="#gafa9793deea59c5cbfea147e0e9d895c3">◆ </a></span>adc_fifo_get_level()</h2>
322 <div class="memitem">
323 <div class="memproto">
324 <table class="mlabels">
326 <td class="mlabels-left">
327 <table class="memname">
329 <td class="memname">static uint8_t adc_fifo_get_level </td>
331 <td class="paramtype">void </td>
332 <td class="paramname"></td><td>)</td>
337 <td class="mlabels-right">
338 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
341 </div><div class="memdoc">
343 <p>Get number of entries in the ADC FIFO. </p>
344 <p >On RP2040 the FIFO is 4 samples long. On RP2350 the FIFO is 8 samples long. </p>
345 <p >This function will return how many samples are currently present. </p>
349 <a id="gafdfd586e6c26ffe4759afaa3c3f95465" name="gafdfd586e6c26ffe4759afaa3c3f95465"></a>
350 <h2 class="memtitle"><span class="permalink"><a href="#gafdfd586e6c26ffe4759afaa3c3f95465">◆ </a></span>adc_fifo_is_empty()</h2>
352 <div class="memitem">
353 <div class="memproto">
354 <table class="mlabels">
356 <td class="mlabels-left">
357 <table class="memname">
359 <td class="memname">static bool adc_fifo_is_empty </td>
361 <td class="paramtype">void </td>
362 <td class="paramname"></td><td>)</td>
367 <td class="mlabels-right">
368 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
371 </div><div class="memdoc">
373 <p>Check FIFO empty state. </p>
374 <dl class="section return"><dt>Returns</dt><dd>Returns true if the FIFO is empty </dd></dl>
378 <a id="ga2a6fa32da04e65a027e14deaf32b8f10" name="ga2a6fa32da04e65a027e14deaf32b8f10"></a>
379 <h2 class="memtitle"><span class="permalink"><a href="#ga2a6fa32da04e65a027e14deaf32b8f10">◆ </a></span>adc_fifo_setup()</h2>
381 <div class="memitem">
382 <div class="memproto">
383 <table class="mlabels">
385 <td class="mlabels-left">
386 <table class="memname">
388 <td class="memname">static void adc_fifo_setup </td>
390 <td class="paramtype">bool </td>
391 <td class="paramname"><em>en</em>, </td>
394 <td class="paramkey"></td>
396 <td class="paramtype">bool </td>
397 <td class="paramname"><em>dreq_en</em>, </td>
400 <td class="paramkey"></td>
402 <td class="paramtype">uint16_t </td>
403 <td class="paramname"><em>dreq_thresh</em>, </td>
406 <td class="paramkey"></td>
408 <td class="paramtype">bool </td>
409 <td class="paramname"><em>err_in_fifo</em>, </td>
412 <td class="paramkey"></td>
414 <td class="paramtype">bool </td>
415 <td class="paramname"><em>byte_shift</em> </td>
424 <td class="mlabels-right">
425 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
428 </div><div class="memdoc">
430 <p>Setup the ADC FIFO. </p>
431 <p >On RP2040 the FIFO is 4 samples long. </p>
432 <p >On RP2350 the FIFO is 8 samples long. </p>
433 <p >If a conversion is completed and the FIFO is full, the result is dropped.</p>
434 <dl class="params"><dt>Parameters</dt><dd>
435 <table class="params">
436 <tr><td class="paramname">en</td><td>Enables write each conversion result to the FIFO </td></tr>
437 <tr><td class="paramname">dreq_en</td><td>Enable DMA requests when FIFO contains data </td></tr>
438 <tr><td class="paramname">dreq_thresh</td><td>Threshold for DMA requests/FIFO IRQ if enabled. </td></tr>
439 <tr><td class="paramname">err_in_fifo</td><td>If enabled, bit 15 of the FIFO contains error flag for each sample </td></tr>
440 <tr><td class="paramname">byte_shift</td><td>Shift FIFO contents to be one byte in size (for byte DMA) - enables DMA to byte buffers. </td></tr>
447 <a id="ga84b5f9054de9c00d51095c9bdefb2dca" name="ga84b5f9054de9c00d51095c9bdefb2dca"></a>
448 <h2 class="memtitle"><span class="permalink"><a href="#ga84b5f9054de9c00d51095c9bdefb2dca">◆ </a></span>adc_get_selected_input()</h2>
450 <div class="memitem">
451 <div class="memproto">
452 <table class="mlabels">
454 <td class="mlabels-left">
455 <table class="memname">
457 <td class="memname">static uint adc_get_selected_input </td>
459 <td class="paramtype">void </td>
460 <td class="paramname"></td><td>)</td>
465 <td class="mlabels-right">
466 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
469 </div><div class="memdoc">
471 <p>Get the currently selected ADC input channel. </p>
472 <dl class="section return"><dt>Returns</dt><dd>The currently selected input channel.</dd></dl>
473 <p>On RP02040 0...3 are GPIOs 26...29 respectively. Input 4 is the onboard temperature sensor. </p>
474 <p >On RP2350A 0...3 are GPIOs 26...29 respectively. Input 4 is the onboard temperature sensor. On RP2350B 0...7 are GPIOs 40...47 respectively. Input 8 is the onboard temperature sensor. </p>
478 <a id="gab15d6e804715935b4e9b5027a2940910" name="gab15d6e804715935b4e9b5027a2940910"></a>
479 <h2 class="memtitle"><span class="permalink"><a href="#gab15d6e804715935b4e9b5027a2940910">◆ </a></span>adc_gpio_init()</h2>
481 <div class="memitem">
482 <div class="memproto">
483 <table class="mlabels">
485 <td class="mlabels-left">
486 <table class="memname">
488 <td class="memname">static void adc_gpio_init </td>
490 <td class="paramtype">uint </td>
491 <td class="paramname"><em>gpio</em></td><td>)</td>
496 <td class="mlabels-right">
497 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
500 </div><div class="memdoc">
502 <p>Initialise the gpio for use as an ADC pin. </p>
503 <p >Prepare a GPIO for use with ADC by disabling all digital functions.</p>
504 <dl class="params"><dt>Parameters</dt><dd>
505 <table class="params">
506 <tr><td class="paramname">gpio</td><td>The GPIO number to use. Allowable GPIO numbers are 26 to 29 inclusive on RP2040 or RP2350A, 40-48 inclusive on RP2350B </td></tr>
513 <a id="gaf8e363e63f40e00c169f7355c9668681" name="gaf8e363e63f40e00c169f7355c9668681"></a>
514 <h2 class="memtitle"><span class="permalink"><a href="#gaf8e363e63f40e00c169f7355c9668681">◆ </a></span>adc_irq_set_enabled()</h2>
516 <div class="memitem">
517 <div class="memproto">
518 <table class="mlabels">
520 <td class="mlabels-left">
521 <table class="memname">
523 <td class="memname">static void adc_irq_set_enabled </td>
525 <td class="paramtype">bool </td>
526 <td class="paramname"><em>enabled</em></td><td>)</td>
531 <td class="mlabels-right">
532 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
535 </div><div class="memdoc">
537 <p>Enable/Disable ADC interrupts. </p>
538 <dl class="params"><dt>Parameters</dt><dd>
539 <table class="params">
540 <tr><td class="paramname">enabled</td><td>Set to true to enable the ADC interrupts, false to disable </td></tr>
547 <a id="gaf32d82a43103e6672048001f58d5f6fb" name="gaf32d82a43103e6672048001f58d5f6fb"></a>
548 <h2 class="memtitle"><span class="permalink"><a href="#gaf32d82a43103e6672048001f58d5f6fb">◆ </a></span>adc_read()</h2>
550 <div class="memitem">
551 <div class="memproto">
552 <table class="mlabels">
554 <td class="mlabels-left">
555 <table class="memname">
557 <td class="memname">static uint16_t adc_read </td>
559 <td class="paramtype">void </td>
560 <td class="paramname"></td><td>)</td>
565 <td class="mlabels-right">
566 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
569 </div><div class="memdoc">
571 <p>Perform a single conversion. </p>
572 <p >Performs an ADC conversion, waits for the result, and then returns it.</p>
573 <dl class="section return"><dt>Returns</dt><dd>Result of the conversion. </dd></dl>
577 <a id="ga5d50a24eb26da7fbc6ee9bc76723b09c" name="ga5d50a24eb26da7fbc6ee9bc76723b09c"></a>
578 <h2 class="memtitle"><span class="permalink"><a href="#ga5d50a24eb26da7fbc6ee9bc76723b09c">◆ </a></span>adc_run()</h2>
580 <div class="memitem">
581 <div class="memproto">
582 <table class="mlabels">
584 <td class="mlabels-left">
585 <table class="memname">
587 <td class="memname">static void adc_run </td>
589 <td class="paramtype">bool </td>
590 <td class="paramname"><em>run</em></td><td>)</td>
595 <td class="mlabels-right">
596 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
599 </div><div class="memdoc">
601 <p>Enable or disable free-running sampling mode. </p>
602 <dl class="params"><dt>Parameters</dt><dd>
603 <table class="params">
604 <tr><td class="paramname">run</td><td>false to disable, true to enable free running conversion mode. </td></tr>
611 <a id="ga5d3b8875947df2f4ba022cb6aa40594b" name="ga5d3b8875947df2f4ba022cb6aa40594b"></a>
612 <h2 class="memtitle"><span class="permalink"><a href="#ga5d3b8875947df2f4ba022cb6aa40594b">◆ </a></span>adc_select_input()</h2>
614 <div class="memitem">
615 <div class="memproto">
616 <table class="mlabels">
618 <td class="mlabels-left">
619 <table class="memname">
621 <td class="memname">static void adc_select_input </td>
623 <td class="paramtype">uint </td>
624 <td class="paramname"><em>input</em></td><td>)</td>
629 <td class="mlabels-right">
630 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
633 </div><div class="memdoc">
635 <p>ADC input select. </p>
636 <p >Select an ADC input On RP02040 0...3 are GPIOs 26...29 respectively. Input 4 is the onboard temperature sensor. On RP2350A 0...3 are GPIOs 26...29 respectively. Input 4 is the onboard temperature sensor. On RP2350B 0...7 are GPIOs 40...47 respectively. Input 8 is the onboard temperature sensor. </p>
637 <dl class="params"><dt>Parameters</dt><dd>
638 <table class="params">
639 <tr><td class="paramname">input</td><td>Input to select. </td></tr>
646 <a id="ga333f7ca46a11241d96d0a4c24f0d4bb0" name="ga333f7ca46a11241d96d0a4c24f0d4bb0"></a>
647 <h2 class="memtitle"><span class="permalink"><a href="#ga333f7ca46a11241d96d0a4c24f0d4bb0">◆ </a></span>adc_set_clkdiv()</h2>
649 <div class="memitem">
650 <div class="memproto">
651 <table class="mlabels">
653 <td class="mlabels-left">
654 <table class="memname">
656 <td class="memname">static void adc_set_clkdiv </td>
658 <td class="paramtype">float </td>
659 <td class="paramname"><em>clkdiv</em></td><td>)</td>
664 <td class="mlabels-right">
665 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
668 </div><div class="memdoc">
670 <p>Set the ADC Clock divisor. </p>
671 <p >Period of samples will be (1 + div) cycles on average. Note it takes 96 cycles to perform a conversion, so any period less than that will be clamped to 96.</p>
672 <dl class="params"><dt>Parameters</dt><dd>
673 <table class="params">
674 <tr><td class="paramname">clkdiv</td><td>If non-zero, conversion will be started at intervals rather than back to back. </td></tr>
681 <a id="ga16d25be75e16f0671d3e3185b0b59771" name="ga16d25be75e16f0671d3e3185b0b59771"></a>
682 <h2 class="memtitle"><span class="permalink"><a href="#ga16d25be75e16f0671d3e3185b0b59771">◆ </a></span>adc_set_round_robin()</h2>
684 <div class="memitem">
685 <div class="memproto">
686 <table class="mlabels">
688 <td class="mlabels-left">
689 <table class="memname">
691 <td class="memname">static void adc_set_round_robin </td>
693 <td class="paramtype">uint </td>
694 <td class="paramname"><em>input_mask</em></td><td>)</td>
699 <td class="mlabels-right">
700 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
703 </div><div class="memdoc">
705 <p>Round Robin sampling selector. </p>
706 <p >This function sets which inputs are to be run through in round robin mode. RP2040, RP2350 QFN-60: Value between 0 and 0x1f (bit 0 to bit 4 for GPIO 26 to 29 and temperature sensor input respectively) RP2350 QFN-80: Value between 0 and 0xff (bit 0 to bit 7 for GPIO 40 to 47 and temperature sensor input respectively)</p>
707 <dl class="params"><dt>Parameters</dt><dd>
708 <table class="params">
709 <tr><td class="paramname">input_mask</td><td>A bit pattern indicating which of the 5/8 inputs are to be sampled. Write a value of 0 to disable round robin sampling. </td></tr>
716 <a id="ga33f302059e05899d1709d6268d75972b" name="ga33f302059e05899d1709d6268d75972b"></a>
717 <h2 class="memtitle"><span class="permalink"><a href="#ga33f302059e05899d1709d6268d75972b">◆ </a></span>adc_set_temp_sensor_enabled()</h2>
719 <div class="memitem">
720 <div class="memproto">
721 <table class="mlabels">
723 <td class="mlabels-left">
724 <table class="memname">
726 <td class="memname">static void adc_set_temp_sensor_enabled </td>
728 <td class="paramtype">bool </td>
729 <td class="paramname"><em>enable</em></td><td>)</td>
734 <td class="mlabels-right">
735 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
738 </div><div class="memdoc">
740 <p>Enable the onboard temperature sensor. </p>
741 <dl class="params"><dt>Parameters</dt><dd>
742 <table class="params">
743 <tr><td class="paramname">enable</td><td>Set true to power on the onboard temperature sensor, false to power off. </td></tr>
750 </div><!-- contents -->
751 </div><!-- doc-content -->
753 <script src="main.js"></script>