]> Git Repo - pico-vscode.git/blob - web/docs/group__pico__platform.html
Merge branch 'main' into main
[pico-vscode.git] / web / docs / group__pico__platform.html
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">
4 <head>
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: pico_platform</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"/>
25 </head>
26 <body>
27         <div class="navigation-mobile">
28                 <div class="logo--mobile">
29                         <a href="/"><img src="logo-mobile.svg" alt="Raspberry Pi"></a>
30                 </div>
31                 <div class="navigation-toggle">
32                         <span class="line-1"></span>
33                         <span class="line-2">
34                                 <p>Menu Toggle</p>
35                         </span>
36                         <span class="line-3"></span>
37                 </div>
38         </div>
39         <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
40                 <div class="logo">
41                         <a href="index.html"> <img src="logo.svg" alt="Raspberry Pi"></a>
42                         <span style="display: inline-block; margin-top: 10px;">
43                                 v2.0.0
44                         </span>
45                 </div>
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>
49                 </div>
50 <!--            <div class="search">
51                         <form>
52                                 <input type="search" name="search" id="search" placeholder="Search">
53                                 <input type="submit" value="Search">
54                         </form>
55                 </div> -->
56 <!-- Generated by Doxygen 1.9.4 -->
57 <script type="text/javascript">
58 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
59 var searchBox = new SearchBox("searchBox", "search",'Search','.html');
60 /* @license-end */
61 </script>
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&amp;dn=expat.txt MIT */
66 $(function() {
67   initMenu('',true,false,'search.php','Search');
68   $(document).ready(function() { init_search(); });
69 });
70 /* @license-end */
71 </script>
72 <div id="main-nav"></div>
73 </div><!-- top -->
74 <div id="side-nav" class="ui-resizable side-nav-resizable">
75   <div id="nav-tree">
76     <div id="nav-tree-contents">
77       <div id="nav-sync" class="sync"></div>
78     </div>
79   </div>
80   <div id="splitbar" style="-moz-user-select:none;" 
81        class="ui-resizable-handle">
82   </div>
83 </div>
84 <script type="text/javascript">
85 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
86 $(document).ready(function(){initNavTree('group__pico__platform.html',''); initResizable(); });
87 /* @license-end */
88 </script>
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)">
95 </div>
96
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">
101 </iframe>
102 </div>
103
104 <div class="header">
105   <div class="summary">
106 <a href="#define-members">Macros</a> &#124;
107 <a href="#func-members">Functions</a>  </div>
108   <div class="headertitle"><div class="title">pico_platform<div class="ingroups"><a class="el" href="group__runtime.html">Runtime Infrastructure</a></div></div></div>
109 </div><!--header-->
110 <div class="contents">
111
112 <p>Macros and definitions (and functions when included by non assembly code) for the RP2 family device / architecture to provide a common abstraction over low level compiler / platform specifics.  
113 <a href="#details">More...</a></p>
114 <table class="memberdecls">
115 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
116 Macros</h2></td></tr>
117 <tr class="memitem:ga1f7eafa00361375ec15412f634ad67b7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#ga1f7eafa00361375ec15412f634ad67b7">__fast_mul</a>(a,  b)</td></tr>
118 <tr class="memdesc:ga1f7eafa00361375ec15412f634ad67b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">multiply two integer values using the fastest method possible  <a href="group__pico__platform.html#ga1f7eafa00361375ec15412f634ad67b7">More...</a><br /></td></tr>
119 <tr class="separator:ga1f7eafa00361375ec15412f634ad67b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
120 <tr class="memitem:ga7a3538bc029b0e60c2f308008fc095c6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#ga7a3538bc029b0e60c2f308008fc095c6">__isr</a></td></tr>
121 <tr class="memdesc:ga7a3538bc029b0e60c2f308008fc095c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marker for an interrupt handler.  <a href="group__pico__platform.html#ga7a3538bc029b0e60c2f308008fc095c6">More...</a><br /></td></tr>
122 <tr class="separator:ga7a3538bc029b0e60c2f308008fc095c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
123 <tr class="memitem:ga23eadd8d1642fb8fe4600708c36e116a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#ga23eadd8d1642fb8fe4600708c36e116a">__force_inline</a>&#160;&#160;&#160;__always_inline</td></tr>
124 <tr class="memdesc:ga23eadd8d1642fb8fe4600708c36e116a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attribute to force inlining of a function regardless of optimization level.  <a href="group__pico__platform.html#ga23eadd8d1642fb8fe4600708c36e116a">More...</a><br /></td></tr>
125 <tr class="separator:ga23eadd8d1642fb8fe4600708c36e116a"><td class="memSeparator" colspan="2">&#160;</td></tr>
126 <tr class="memitem:ga29022c0c92a05cf88ca5046c59d6f629"><td class="memItemLeft" align="right" valign="top"><a id="ga29022c0c92a05cf88ca5046c59d6f629" name="ga29022c0c92a05cf88ca5046c59d6f629"></a>
127 #define&#160;</td><td class="memItemRight" valign="bottom"><b>count_of</b>(a)&#160;&#160;&#160;(sizeof(a)/sizeof((a)[0]))</td></tr>
128 <tr class="memdesc:ga29022c0c92a05cf88ca5046c59d6f629"><td class="mdescLeft">&#160;</td><td class="mdescRight">Macro to determine the number of elements in an array. <br /></td></tr>
129 <tr class="separator:ga29022c0c92a05cf88ca5046c59d6f629"><td class="memSeparator" colspan="2">&#160;</td></tr>
130 <tr class="memitem:gafa99ec4acc4ecb2dc3c2d05da15d0e3f"><td class="memItemLeft" align="right" valign="top"><a id="gafa99ec4acc4ecb2dc3c2d05da15d0e3f" name="gafa99ec4acc4ecb2dc3c2d05da15d0e3f"></a>
131 #define&#160;</td><td class="memItemRight" valign="bottom"><b>MAX</b>(a,  b)&#160;&#160;&#160;((a)&gt;(b)?(a):(b))</td></tr>
132 <tr class="memdesc:gafa99ec4acc4ecb2dc3c2d05da15d0e3f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Macro to return the maximum of two comparable values. <br /></td></tr>
133 <tr class="separator:gafa99ec4acc4ecb2dc3c2d05da15d0e3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
134 <tr class="memitem:ga3acffbd305ee72dcd4593c0d8af64a4f"><td class="memItemLeft" align="right" valign="top"><a id="ga3acffbd305ee72dcd4593c0d8af64a4f" name="ga3acffbd305ee72dcd4593c0d8af64a4f"></a>
135 #define&#160;</td><td class="memItemRight" valign="bottom"><b>MIN</b>(a,  b)&#160;&#160;&#160;((b)&gt;(a)?(a):(b))</td></tr>
136 <tr class="memdesc:ga3acffbd305ee72dcd4593c0d8af64a4f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Macro to return the minimum of two comparable values. <br /></td></tr>
137 <tr class="separator:ga3acffbd305ee72dcd4593c0d8af64a4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
138 <tr class="memitem:ga2d0b8227d9981a22692d5ef6aa1a386f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#ga2d0b8227d9981a22692d5ef6aa1a386f">__check_type_compatible</a>(type_a,  type_b)&#160;&#160;&#160;static_assert(__builtin_types_compatible_p(type_a, type_b), __STRING(type_a) &quot; is not compatible with &quot; __STRING(type_b));</td></tr>
139 <tr class="memdesc:ga2d0b8227d9981a22692d5ef6aa1a386f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Utility macro to assert two types are equivalent.  <a href="group__pico__platform.html#ga2d0b8227d9981a22692d5ef6aa1a386f">More...</a><br /></td></tr>
140 <tr class="separator:ga2d0b8227d9981a22692d5ef6aa1a386f"><td class="memSeparator" colspan="2">&#160;</td></tr>
141 <tr class="memitem:ga88c6891ab226690c883f3396611d8dc9"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#ga88c6891ab226690c883f3396611d8dc9">__after_data</a>(group)&#160;&#160;&#160;__attribute__((section(&quot;.after_data.&quot; group)))</td></tr>
142 <tr class="memdesc:ga88c6891ab226690c883f3396611d8dc9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Section attribute macro for placement in RAM after the <code>.data</code> section.  <a href="group__pico__platform.html#ga88c6891ab226690c883f3396611d8dc9">More...</a><br /></td></tr>
143 <tr class="separator:ga88c6891ab226690c883f3396611d8dc9"><td class="memSeparator" colspan="2">&#160;</td></tr>
144 <tr class="memitem:gad8b78e068558946081789ce1935528bf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#gad8b78e068558946081789ce1935528bf">__scratch_x</a>(group)&#160;&#160;&#160;__attribute__((section(&quot;.scratch_x.&quot; group)))</td></tr>
145 <tr class="memdesc:gad8b78e068558946081789ce1935528bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Section attribute macro for placement not in flash (i.e in RAM)  <a href="group__pico__platform.html#gad8b78e068558946081789ce1935528bf">More...</a><br /></td></tr>
146 <tr class="separator:gad8b78e068558946081789ce1935528bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
147 <tr class="memitem:ga699cabffc3896ece6ec696e841146b3c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#ga699cabffc3896ece6ec696e841146b3c">__scratch_y</a>(group)&#160;&#160;&#160;__attribute__((section(&quot;.scratch_y.&quot; group)))</td></tr>
148 <tr class="memdesc:ga699cabffc3896ece6ec696e841146b3c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Section attribute macro for placement in the SRAM bank 5 (known as "scratch Y")  <a href="group__pico__platform.html#ga699cabffc3896ece6ec696e841146b3c">More...</a><br /></td></tr>
149 <tr class="separator:ga699cabffc3896ece6ec696e841146b3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
150 <tr class="memitem:ga118d39a4ebb425b8bef29e7a1f8731c2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#ga118d39a4ebb425b8bef29e7a1f8731c2">__uninitialized_ram</a>(group)&#160;&#160;&#160;__attribute__((section(&quot;.uninitialized_data.&quot; #group))) group</td></tr>
151 <tr class="memdesc:ga118d39a4ebb425b8bef29e7a1f8731c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Section attribute macro for data that is to be left uninitialized.  <a href="group__pico__platform.html#ga118d39a4ebb425b8bef29e7a1f8731c2">More...</a><br /></td></tr>
152 <tr class="separator:ga118d39a4ebb425b8bef29e7a1f8731c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
153 <tr class="memitem:ga0f27b5a18b17ef82ff103825a3b7322d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#ga0f27b5a18b17ef82ff103825a3b7322d">__in_flash</a>(group)&#160;&#160;&#160;__attribute__((section(&quot;.flashdata.&quot; group)))</td></tr>
154 <tr class="memdesc:ga0f27b5a18b17ef82ff103825a3b7322d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Section attribute macro for placement in flash even in a COPY_TO_RAM binary.  <a href="group__pico__platform.html#ga0f27b5a18b17ef82ff103825a3b7322d">More...</a><br /></td></tr>
155 <tr class="separator:ga0f27b5a18b17ef82ff103825a3b7322d"><td class="memSeparator" colspan="2">&#160;</td></tr>
156 <tr class="memitem:gad9ab05c9a8f0ab455a5e11773d610787"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#gad9ab05c9a8f0ab455a5e11773d610787">__no_inline_not_in_flash_func</a>(func_name)&#160;&#160;&#160;__noinline __not_in_flash_func(func_name)</td></tr>
157 <tr class="memdesc:gad9ab05c9a8f0ab455a5e11773d610787"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indicates a function should not be stored in flash.  <a href="group__pico__platform.html#gad9ab05c9a8f0ab455a5e11773d610787">More...</a><br /></td></tr>
158 <tr class="separator:gad9ab05c9a8f0ab455a5e11773d610787"><td class="memSeparator" colspan="2">&#160;</td></tr>
159 </table><table class="memberdecls">
160 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
161 Functions</h2></td></tr>
162 <tr class="memitem:gab0d1ba75ceb64131e19f613d7a5313c9"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="group__pico__platform.html#ga23eadd8d1642fb8fe4600708c36e116a">__force_inline</a> void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#gab0d1ba75ceb64131e19f613d7a5313c9">tight_loop_contents</a> (void)</td></tr>
163 <tr class="memdesc:gab0d1ba75ceb64131e19f613d7a5313c9"><td class="mdescLeft">&#160;</td><td class="mdescRight">No-op function for the body of tight loops.  <a href="group__pico__platform.html#gab0d1ba75ceb64131e19f613d7a5313c9">More...</a><br /></td></tr>
164 <tr class="separator:gab0d1ba75ceb64131e19f613d7a5313c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
165 <tr class="memitem:ga49c4fc3b5d3fbe9f2f6f7bc500b9db4f"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#ga49c4fc3b5d3fbe9f2f6f7bc500b9db4f">busy_wait_at_least_cycles</a> (uint32_t minimum_cycles)</td></tr>
166 <tr class="memdesc:ga49c4fc3b5d3fbe9f2f6f7bc500b9db4f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper method to busy-wait for at least the given number of cycles.  <a href="group__pico__platform.html#ga49c4fc3b5d3fbe9f2f6f7bc500b9db4f">More...</a><br /></td></tr>
167 <tr class="separator:ga49c4fc3b5d3fbe9f2f6f7bc500b9db4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
168 <tr class="memitem:ga9837dbd9fd5cc43d4f0fc1f26d046955"><td class="memItemLeft" align="right" valign="top"><a id="ga9837dbd9fd5cc43d4f0fc1f26d046955" name="ga9837dbd9fd5cc43d4f0fc1f26d046955"></a>
169 static <a class="el" href="group__pico__platform.html#ga23eadd8d1642fb8fe4600708c36e116a">__force_inline</a> void&#160;</td><td class="memItemRight" valign="bottom"><b>__breakpoint</b> (void)</td></tr>
170 <tr class="memdesc:ga9837dbd9fd5cc43d4f0fc1f26d046955"><td class="mdescLeft">&#160;</td><td class="mdescRight">Execute a breakpoint instruction. <br /></td></tr>
171 <tr class="separator:ga9837dbd9fd5cc43d4f0fc1f26d046955"><td class="memSeparator" colspan="2">&#160;</td></tr>
172 <tr class="memitem:ga58434ad816f519308ee02c639b7965bc"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="group__pico__platform.html#ga23eadd8d1642fb8fe4600708c36e116a">__force_inline</a> uint&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#ga58434ad816f519308ee02c639b7965bc">get_core_num</a> (void)</td></tr>
173 <tr class="memdesc:ga58434ad816f519308ee02c639b7965bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current core number.  <a href="group__pico__platform.html#ga58434ad816f519308ee02c639b7965bc">More...</a><br /></td></tr>
174 <tr class="separator:ga58434ad816f519308ee02c639b7965bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
175 <tr class="memitem:ga1ebeac462e038d7e2ce341df8054f894"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="group__pico__platform.html#ga23eadd8d1642fb8fe4600708c36e116a">__force_inline</a> uint&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#ga1ebeac462e038d7e2ce341df8054f894">__get_current_exception</a> (void)</td></tr>
176 <tr class="memdesc:ga1ebeac462e038d7e2ce341df8054f894"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the current exception level on this core.  <a href="group__pico__platform.html#ga1ebeac462e038d7e2ce341df8054f894">More...</a><br /></td></tr>
177 <tr class="separator:ga1ebeac462e038d7e2ce341df8054f894"><td class="memSeparator" colspan="2">&#160;</td></tr>
178 <tr class="memitem:ga66edd7569f5a42b0a2da43a5926cf064"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="group__pico__platform.html#ga23eadd8d1642fb8fe4600708c36e116a">__force_inline</a> bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#ga66edd7569f5a42b0a2da43a5926cf064">pico_processor_state_is_nonsecure</a> (void)</td></tr>
179 <tr class="memdesc:ga66edd7569f5a42b0a2da43a5926cf064"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return true if executing in the NonSecure state (Arm-only)  <a href="group__pico__platform.html#ga66edd7569f5a42b0a2da43a5926cf064">More...</a><br /></td></tr>
180 <tr class="separator:ga66edd7569f5a42b0a2da43a5926cf064"><td class="memSeparator" colspan="2">&#160;</td></tr>
181 <tr class="memitem:ga21200eb89a299a9b121d028ad1725fe3"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#ga21200eb89a299a9b121d028ad1725fe3">rp2350_chip_version</a> (void)</td></tr>
182 <tr class="memdesc:ga21200eb89a299a9b121d028ad1725fe3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the RP2350 chip revision number.  <a href="group__pico__platform.html#ga21200eb89a299a9b121d028ad1725fe3">More...</a><br /></td></tr>
183 <tr class="separator:ga21200eb89a299a9b121d028ad1725fe3"><td class="memSeparator" colspan="2">&#160;</td></tr>
184 <tr class="memitem:gac157772e2fa6f4c64e1c3e4d761089d9"><td class="memItemLeft" align="right" valign="top">static uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#gac157772e2fa6f4c64e1c3e4d761089d9">rp2040_chip_version</a> (void)</td></tr>
185 <tr class="memdesc:gac157772e2fa6f4c64e1c3e4d761089d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the RP2040 chip revision number for compatibility.  <a href="group__pico__platform.html#gac157772e2fa6f4c64e1c3e4d761089d9">More...</a><br /></td></tr>
186 <tr class="separator:gac157772e2fa6f4c64e1c3e4d761089d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
187 <tr class="memitem:gadcb55b507bb15fbe5a71bcb2f222b6e2"><td class="memItemLeft" align="right" valign="top">static uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#gadcb55b507bb15fbe5a71bcb2f222b6e2">rp2040_rom_version</a> (void)</td></tr>
188 <tr class="memdesc:gadcb55b507bb15fbe5a71bcb2f222b6e2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the RP2040 rom version number.  <a href="group__pico__platform.html#gadcb55b507bb15fbe5a71bcb2f222b6e2">More...</a><br /></td></tr>
189 <tr class="separator:gadcb55b507bb15fbe5a71bcb2f222b6e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
190 <tr class="memitem:gab68b1653c84bff361bff5dc2baf2e7ea"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="group__pico__platform.html#ga23eadd8d1642fb8fe4600708c36e116a">__force_inline</a> int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#gab68b1653c84bff361bff5dc2baf2e7ea">__mul_instruction</a> (int32_t a, int32_t b)</td></tr>
191 <tr class="memdesc:gab68b1653c84bff361bff5dc2baf2e7ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multiply two integers using an assembly <code>MUL</code> instruction.  <a href="group__pico__platform.html#gab68b1653c84bff361bff5dc2baf2e7ea">More...</a><br /></td></tr>
192 <tr class="separator:gab68b1653c84bff361bff5dc2baf2e7ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
193 <tr class="memitem:gac01ec0ae597f7572f8e298fa4f48c8e6"><td class="memItemLeft" align="right" valign="top">static __always_inline void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#gac01ec0ae597f7572f8e298fa4f48c8e6">__compiler_memory_barrier</a> (void)</td></tr>
194 <tr class="memdesc:gac01ec0ae597f7572f8e298fa4f48c8e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Ensure that the compiler does not move memory access across this method call.  <a href="group__pico__platform.html#gac01ec0ae597f7572f8e298fa4f48c8e6">More...</a><br /></td></tr>
195 <tr class="separator:gac01ec0ae597f7572f8e298fa4f48c8e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
196 <tr class="memitem:ga29ba8f40ca0c961e04c7380a3665e612"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#ga29ba8f40ca0c961e04c7380a3665e612">panic_unsupported</a> (void)</td></tr>
197 <tr class="memdesc:ga29ba8f40ca0c961e04c7380a3665e612"><td class="mdescLeft">&#160;</td><td class="mdescRight">Panics with the message "Unsupported".  <a href="group__pico__platform.html#ga29ba8f40ca0c961e04c7380a3665e612">More...</a><br /></td></tr>
198 <tr class="separator:ga29ba8f40ca0c961e04c7380a3665e612"><td class="memSeparator" colspan="2">&#160;</td></tr>
199 <tr class="memitem:gad1f1a1dc0581a11b597453f148106393"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__pico__platform.html#gad1f1a1dc0581a11b597453f148106393">panic</a> (const char *fmt,...)</td></tr>
200 <tr class="memdesc:gad1f1a1dc0581a11b597453f148106393"><td class="mdescLeft">&#160;</td><td class="mdescRight">Displays a panic message and halts execution.  <a href="group__pico__platform.html#gad1f1a1dc0581a11b597453f148106393">More...</a><br /></td></tr>
201 <tr class="separator:gad1f1a1dc0581a11b597453f148106393"><td class="memSeparator" colspan="2">&#160;</td></tr>
202 </table>
203 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
204 <p >Macros and definitions (and functions when included by non assembly code) for the RP2 family device / architecture to provide a common abstraction over low level compiler / platform specifics. </p>
205 <p >Macros and definitions (and functions when included by non assembly code) to adapt for different compilers.</p>
206 <p >Macros and definitions for accessing the CPU registers.</p>
207 <p >This header may be included by assembly code </p>
208 <h2 class="groupheader">Macro Definition Documentation</h2>
209 <a id="ga88c6891ab226690c883f3396611d8dc9" name="ga88c6891ab226690c883f3396611d8dc9"></a>
210 <h2 class="memtitle"><span class="permalink"><a href="#ga88c6891ab226690c883f3396611d8dc9">&#9670;&nbsp;</a></span>__after_data</h2>
211
212 <div class="memitem">
213 <div class="memproto">
214       <table class="memname">
215         <tr>
216           <td class="memname">#define __after_data</td>
217           <td>(</td>
218           <td class="paramtype">&#160;</td>
219           <td class="paramname">group</td><td>)</td>
220           <td>&#160;&#160;&#160;__attribute__((section(&quot;.after_data.&quot; group)))</td>
221         </tr>
222       </table>
223 </div><div class="memdoc">
224
225 <p>Section attribute macro for placement in RAM after the <code>.data</code> section. </p>
226 <p >For example a 400 element <code>uint32_t</code> array placed after the .data section </p><pre class="fragment">uint32_t __after_data("my_group_name") a_big_array[400];
227 </pre><p> The section attribute is <code>.after_data.&lt;group&gt;</code></p>
228 <dl class="params"><dt>Parameters</dt><dd>
229   <table class="params">
230     <tr><td class="paramname">group</td><td>a string suffix to use in the section name to distinguish groups that can be linker garbage-collected independently </td></tr>
231   </table>
232   </dd>
233 </dl>
234
235 </div>
236 </div>
237 <a id="ga2d0b8227d9981a22692d5ef6aa1a386f" name="ga2d0b8227d9981a22692d5ef6aa1a386f"></a>
238 <h2 class="memtitle"><span class="permalink"><a href="#ga2d0b8227d9981a22692d5ef6aa1a386f">&#9670;&nbsp;</a></span>__check_type_compatible</h2>
239
240 <div class="memitem">
241 <div class="memproto">
242       <table class="memname">
243         <tr>
244           <td class="memname">#define __check_type_compatible</td>
245           <td>(</td>
246           <td class="paramtype">&#160;</td>
247           <td class="paramname">type_a, </td>
248         </tr>
249         <tr>
250           <td class="paramkey"></td>
251           <td></td>
252           <td class="paramtype">&#160;</td>
253           <td class="paramname">type_b&#160;</td>
254         </tr>
255         <tr>
256           <td></td>
257           <td>)</td>
258           <td></td><td>&#160;&#160;&#160;static_assert(__builtin_types_compatible_p(type_a, type_b), __STRING(type_a) &quot; is not compatible with &quot; __STRING(type_b));</td>
259         </tr>
260       </table>
261 </div><div class="memdoc">
262
263 <p>Utility macro to assert two types are equivalent. </p>
264 <p >This macro can be useful in other macros along with <code>typeof</code> to assert that two parameters are of equivalent type (or that a single parameter is of an expected type) </p>
265
266 </div>
267 </div>
268 <a id="ga1f7eafa00361375ec15412f634ad67b7" name="ga1f7eafa00361375ec15412f634ad67b7"></a>
269 <h2 class="memtitle"><span class="permalink"><a href="#ga1f7eafa00361375ec15412f634ad67b7">&#9670;&nbsp;</a></span>__fast_mul</h2>
270
271 <div class="memitem">
272 <div class="memproto">
273       <table class="memname">
274         <tr>
275           <td class="memname">#define __fast_mul</td>
276           <td>(</td>
277           <td class="paramtype">&#160;</td>
278           <td class="paramname">a, </td>
279         </tr>
280         <tr>
281           <td class="paramkey"></td>
282           <td></td>
283           <td class="paramtype">&#160;</td>
284           <td class="paramname">b&#160;</td>
285         </tr>
286         <tr>
287           <td></td>
288           <td>)</td>
289           <td></td><td></td>
290         </tr>
291       </table>
292 </div><div class="memdoc">
293 <b>Value:</b><div class="fragment"><div class="line">    __builtin_choose_expr(__builtin_constant_p(b) &amp;&amp; !__builtin_constant_p(a), \</div>
294 <div class="line">    (__builtin_popcount(b) &gt;= 2 ? <a class="code hl_function" href="group__pico__platform.html#gab68b1653c84bff361bff5dc2baf2e7ea">__mul_instruction</a>(a,b) : (a)*(b)), \</div>
295 <div class="line">    (a)*(b))</div>
296 <div class="ttc" id="agroup__pico__platform_html_gab68b1653c84bff361bff5dc2baf2e7ea"><div class="ttname"><a href="group__pico__platform.html#gab68b1653c84bff361bff5dc2baf2e7ea">__mul_instruction</a></div><div class="ttdeci">static __force_inline int32_t __mul_instruction(int32_t a, int32_t b)</div><div class="ttdoc">Multiply two integers using an assembly MUL instruction.</div><div class="ttdef"><b>Definition:</b> platform.h:247</div></div>
297 </div><!-- fragment -->
298 <p>multiply two integer values using the fastest method possible </p>
299 <p >Efficiently multiplies value a by possibly constant value b.</p>
300 <p >If b is known to be constant and not zero or a power of 2, then a mul instruction is used rather than gcc's default which is often a slow combination of shifts and adds. If b is a power of 2 then a single shift is of course preferable and will be used</p>
301 <dl class="params"><dt>Parameters</dt><dd>
302   <table class="params">
303     <tr><td class="paramname">a</td><td>the first operand </td></tr>
304     <tr><td class="paramname">b</td><td>the second operand </td></tr>
305   </table>
306   </dd>
307 </dl>
308 <dl class="section return"><dt>Returns</dt><dd>a * b </dd></dl>
309
310 </div>
311 </div>
312 <a id="ga23eadd8d1642fb8fe4600708c36e116a" name="ga23eadd8d1642fb8fe4600708c36e116a"></a>
313 <h2 class="memtitle"><span class="permalink"><a href="#ga23eadd8d1642fb8fe4600708c36e116a">&#9670;&nbsp;</a></span>__force_inline</h2>
314
315 <div class="memitem">
316 <div class="memproto">
317       <table class="memname">
318         <tr>
319           <td class="memname">#define __force_inline&#160;&#160;&#160;__always_inline</td>
320         </tr>
321       </table>
322 </div><div class="memdoc">
323
324 <p>Attribute to force inlining of a function regardless of optimization level. </p>
325 <p >For example my_function here will always be inlined: </p><pre class="fragment">int __force_inline my_function(int x) {
326 </pre> 
327 </div>
328 </div>
329 <a id="ga0f27b5a18b17ef82ff103825a3b7322d" name="ga0f27b5a18b17ef82ff103825a3b7322d"></a>
330 <h2 class="memtitle"><span class="permalink"><a href="#ga0f27b5a18b17ef82ff103825a3b7322d">&#9670;&nbsp;</a></span>__in_flash</h2>
331
332 <div class="memitem">
333 <div class="memproto">
334       <table class="memname">
335         <tr>
336           <td class="memname">#define __in_flash</td>
337           <td>(</td>
338           <td class="paramtype">&#160;</td>
339           <td class="paramname">group</td><td>)</td>
340           <td>&#160;&#160;&#160;__attribute__((section(&quot;.flashdata.&quot; group)))</td>
341         </tr>
342       </table>
343 </div><div class="memdoc">
344
345 <p>Section attribute macro for placement in flash even in a COPY_TO_RAM binary. </p>
346 <p >For example a <code>uint32_t</code> variable explicitly placed in flash (it will hard fault if you attempt to write it!) </p><pre class="fragment">uint32_t __in_flash("my_group_name") foo = 23;
347 </pre><p> The section attribute is <code>.flashdata.&lt;group&gt;</code></p>
348 <dl class="params"><dt>Parameters</dt><dd>
349   <table class="params">
350     <tr><td class="paramname">group</td><td>a string suffix to use in the section name to distinguish groups that can be linker garbage-collected independently </td></tr>
351   </table>
352   </dd>
353 </dl>
354
355 </div>
356 </div>
357 <a id="ga7a3538bc029b0e60c2f308008fc095c6" name="ga7a3538bc029b0e60c2f308008fc095c6"></a>
358 <h2 class="memtitle"><span class="permalink"><a href="#ga7a3538bc029b0e60c2f308008fc095c6">&#9670;&nbsp;</a></span>__isr</h2>
359
360 <div class="memitem">
361 <div class="memproto">
362       <table class="memname">
363         <tr>
364           <td class="memname">#define __isr</td>
365           <td>(</td>
366           <td class="paramtype">&#160;</td>
367           <td class="paramname">void</td><td>)</td>
368           <td></td>
369         </tr>
370       </table>
371 </div><div class="memdoc">
372
373 <p>Marker for an interrupt handler. </p>
374 <p >For example an IRQ handler function called my_interrupt_handler: </p><pre class="fragment">void __isr my_interrupt_handler(void) {
375 </pre> 
376 </div>
377 </div>
378 <a id="gad9ab05c9a8f0ab455a5e11773d610787" name="gad9ab05c9a8f0ab455a5e11773d610787"></a>
379 <h2 class="memtitle"><span class="permalink"><a href="#gad9ab05c9a8f0ab455a5e11773d610787">&#9670;&nbsp;</a></span>__no_inline_not_in_flash_func</h2>
380
381 <div class="memitem">
382 <div class="memproto">
383       <table class="memname">
384         <tr>
385           <td class="memname">#define __no_inline_not_in_flash_func</td>
386           <td>(</td>
387           <td class="paramtype">&#160;</td>
388           <td class="paramname">func_name</td><td>)</td>
389           <td>&#160;&#160;&#160;__noinline __not_in_flash_func(func_name)</td>
390         </tr>
391       </table>
392 </div><div class="memdoc">
393
394 <p>Indicates a function should not be stored in flash. </p>
395 <p >Decorates a function name, such that the function will execute from RAM (assuming it is not inlined into a flash function by the compiler)</p>
396 <p >For example a function called my_func taking an int parameter: </p><pre class="fragment">void __not_in_flash_func(my_func)(int some_arg) {
397 </pre><p> The function is placed in the <code>.time_critical.&lt;func_name&gt;</code> linker section</p>
398 <dl class="section see"><dt>See also</dt><dd><a class="el" href="group__pico__platform.html#gad9ab05c9a8f0ab455a5e11773d610787" title="Indicates a function should not be stored in flash.">__no_inline_not_in_flash_func</a></dd></dl>
399 <p>Indicates a function is time/latency critical and should not run from flash</p>
400 <p >Decorates a function name, such that the function will execute from RAM (assuming it is not inlined into a flash function by the compiler) to avoid possible flash latency. Currently this macro is identical in implementation to <code>__not_in_flash_func</code>, however the semantics are distinct and a <code>__time_critical_func</code> may in the future be treated more specially to reduce the overhead when calling such function from a flash function.</p>
401 <p >For example a function called my_func taking an int parameter: </p><pre class="fragment">void __time_critical(my_func)(int some_arg) {
402 </pre><p> The function is placed in the <code>.time_critical.&lt;func_name&gt;</code> linker section</p>
403 <dl class="section see"><dt>See also</dt><dd>__not_in_flash_func</dd></dl>
404 <p>Indicate a function should not be stored in flash and should not be inlined</p>
405 <p >Decorates a function name, such that the function will execute from RAM, explicitly marking it as noinline to prevent it being inlined into a flash function by the compiler</p>
406 <p >For example a function called my_func taking an int parameter: </p><pre class="fragment">void __no_inline_not_in_flash_func(my_func)(int some_arg) {
407 </pre><p> The function is placed in the <code>.time_critical.&lt;func_name&gt;</code> linker section </p>
408
409 </div>
410 </div>
411 <a id="gad8b78e068558946081789ce1935528bf" name="gad8b78e068558946081789ce1935528bf"></a>
412 <h2 class="memtitle"><span class="permalink"><a href="#gad8b78e068558946081789ce1935528bf">&#9670;&nbsp;</a></span>__scratch_x</h2>
413
414 <div class="memitem">
415 <div class="memproto">
416       <table class="memname">
417         <tr>
418           <td class="memname">#define __scratch_x</td>
419           <td>(</td>
420           <td class="paramtype">&#160;</td>
421           <td class="paramname">group</td><td>)</td>
422           <td>&#160;&#160;&#160;__attribute__((section(&quot;.scratch_x.&quot; group)))</td>
423         </tr>
424       </table>
425 </div><div class="memdoc">
426
427 <p>Section attribute macro for placement not in flash (i.e in RAM) </p>
428 <p >For example a 3 element <code>uint32_t</code> array placed in RAM (even though it is <code>static const</code>) </p><pre class="fragment">static const uint32_t __not_in_flash("my_group_name") an_array[3];
429 </pre><p> The section attribute is <code>.time_critical.&lt;group&gt;</code></p>
430 <dl class="params"><dt>Parameters</dt><dd>
431   <table class="params">
432     <tr><td class="paramname">group</td><td>a string suffix to use in the section name to distinguish groups that can be linker garbage-collected independently</td></tr>
433   </table>
434   </dd>
435 </dl>
436 <p>Section attribute macro for placement in the SRAM bank 4 (known as "scratch X")</p>
437 <p >Scratch X is commonly used for critical data and functions accessed only by one core (when only one core is accessing the RAM bank, there is no opportunity for stalls)</p>
438 <p >For example a <code>uint32_t</code> variable placed in "scratch X" </p><pre class="fragment">uint32_t __scratch_x("my_group_name") foo = 23;
439 </pre><p> The section attribute is <code>.scratch_x.&lt;group&gt;</code></p>
440 <dl class="params"><dt>Parameters</dt><dd>
441   <table class="params">
442     <tr><td class="paramname">group</td><td>a string suffix to use in the section name to distinguish groups that can be linker garbage-collected independently </td></tr>
443   </table>
444   </dd>
445 </dl>
446
447 </div>
448 </div>
449 <a id="ga699cabffc3896ece6ec696e841146b3c" name="ga699cabffc3896ece6ec696e841146b3c"></a>
450 <h2 class="memtitle"><span class="permalink"><a href="#ga699cabffc3896ece6ec696e841146b3c">&#9670;&nbsp;</a></span>__scratch_y</h2>
451
452 <div class="memitem">
453 <div class="memproto">
454       <table class="memname">
455         <tr>
456           <td class="memname">#define __scratch_y</td>
457           <td>(</td>
458           <td class="paramtype">&#160;</td>
459           <td class="paramname">group</td><td>)</td>
460           <td>&#160;&#160;&#160;__attribute__((section(&quot;.scratch_y.&quot; group)))</td>
461         </tr>
462       </table>
463 </div><div class="memdoc">
464
465 <p>Section attribute macro for placement in the SRAM bank 5 (known as "scratch Y") </p>
466 <p >Scratch Y is commonly used for critical data and functions accessed only by one core (when only one core is accessing the RAM bank, there is no opportunity for stalls)</p>
467 <p >For example a <code>uint32_t</code> variable placed in "scratch Y" </p><pre class="fragment">uint32_t __scratch_y("my_group_name") foo = 23;
468 </pre><p> The section attribute is <code>.scratch_y.&lt;group&gt;</code></p>
469 <dl class="params"><dt>Parameters</dt><dd>
470   <table class="params">
471     <tr><td class="paramname">group</td><td>a string suffix to use in the section name to distinguish groups that can be linker garbage-collected independently </td></tr>
472   </table>
473   </dd>
474 </dl>
475
476 </div>
477 </div>
478 <a id="ga118d39a4ebb425b8bef29e7a1f8731c2" name="ga118d39a4ebb425b8bef29e7a1f8731c2"></a>
479 <h2 class="memtitle"><span class="permalink"><a href="#ga118d39a4ebb425b8bef29e7a1f8731c2">&#9670;&nbsp;</a></span>__uninitialized_ram</h2>
480
481 <div class="memitem">
482 <div class="memproto">
483       <table class="memname">
484         <tr>
485           <td class="memname">#define __uninitialized_ram</td>
486           <td>(</td>
487           <td class="paramtype">&#160;</td>
488           <td class="paramname">group</td><td>)</td>
489           <td>&#160;&#160;&#160;__attribute__((section(&quot;.uninitialized_data.&quot; #group))) group</td>
490         </tr>
491       </table>
492 </div><div class="memdoc">
493
494 <p>Section attribute macro for data that is to be left uninitialized. </p>
495 <p >Data marked this way will retain its value across a reset (normally uninitialized data - in the .bss section) is initialized to zero during runtime initialization</p>
496 <p >For example a <code>uint32_t</code> foo that will retain its value if the program is restarted by reset. </p><pre class="fragment">uint32_t __uninitialized_ram(foo);
497 </pre><p> The section attribute is <code>.uninitialized_data.&lt;group&gt;</code></p>
498 <dl class="params"><dt>Parameters</dt><dd>
499   <table class="params">
500     <tr><td class="paramname">group</td><td>a string suffix to use in the section name to distinguish groups that can be linker garbage-collected independently </td></tr>
501   </table>
502   </dd>
503 </dl>
504
505 </div>
506 </div>
507 <h2 class="groupheader">Function Documentation</h2>
508 <a id="gac01ec0ae597f7572f8e298fa4f48c8e6" name="gac01ec0ae597f7572f8e298fa4f48c8e6"></a>
509 <h2 class="memtitle"><span class="permalink"><a href="#gac01ec0ae597f7572f8e298fa4f48c8e6">&#9670;&nbsp;</a></span>__compiler_memory_barrier()</h2>
510
511 <div class="memitem">
512 <div class="memproto">
513 <table class="mlabels">
514   <tr>
515   <td class="mlabels-left">
516       <table class="memname">
517         <tr>
518           <td class="memname">static __always_inline void __compiler_memory_barrier </td>
519           <td>(</td>
520           <td class="paramtype">void&#160;</td>
521           <td class="paramname"></td><td>)</td>
522           <td></td>
523         </tr>
524       </table>
525   </td>
526   <td class="mlabels-right">
527 <span class="mlabels"><span class="mlabel">static</span></span>  </td>
528   </tr>
529 </table>
530 </div><div class="memdoc">
531
532 <p>Ensure that the compiler does not move memory access across this method call. </p>
533 <p >For example in the following code: </p><pre class="fragment">*some_memory_location = var_a;
534 __compiler_memory_barrier();
535 uint32_t var_b = *some_other_memory_location
536 </pre><p> The compiler will not move the load from <code>some_other_memory_location</code> above the memory barrier (which it otherwise might - even above the memory store!) </p>
537
538 </div>
539 </div>
540 <a id="ga1ebeac462e038d7e2ce341df8054f894" name="ga1ebeac462e038d7e2ce341df8054f894"></a>
541 <h2 class="memtitle"><span class="permalink"><a href="#ga1ebeac462e038d7e2ce341df8054f894">&#9670;&nbsp;</a></span>__get_current_exception()</h2>
542
543 <div class="memitem">
544 <div class="memproto">
545 <table class="mlabels">
546   <tr>
547   <td class="mlabels-left">
548       <table class="memname">
549         <tr>
550           <td class="memname">static <a class="el" href="group__pico__platform.html#ga23eadd8d1642fb8fe4600708c36e116a">__force_inline</a> uint __get_current_exception </td>
551           <td>(</td>
552           <td class="paramtype">void&#160;</td>
553           <td class="paramname"></td><td>)</td>
554           <td></td>
555         </tr>
556       </table>
557   </td>
558   <td class="mlabels-right">
559 <span class="mlabels"><span class="mlabel">static</span></span>  </td>
560   </tr>
561 </table>
562 </div><div class="memdoc">
563
564 <p>Get the current exception level on this core. </p>
565 <p >On Cortex-M this is the exception number defined in the architecture reference, which is equal to VTABLE_FIRST_IRQ + irq num if inside an interrupt handler. (VTABLE_FIRST_IRQ is defined in platform_defs.h).</p>
566 <p >On Hazard3, this function returns VTABLE_FIRST_IRQ + irq num if inside of an external IRQ handler (or a fault from such a handler), and 0 otherwise, generally aligning with the Cortex-M values.</p>
567 <dl class="section return"><dt>Returns</dt><dd>the exception number if the CPU is handling an exception, or 0 otherwise </dd></dl>
568
569 </div>
570 </div>
571 <a id="gab68b1653c84bff361bff5dc2baf2e7ea" name="gab68b1653c84bff361bff5dc2baf2e7ea"></a>
572 <h2 class="memtitle"><span class="permalink"><a href="#gab68b1653c84bff361bff5dc2baf2e7ea">&#9670;&nbsp;</a></span>__mul_instruction()</h2>
573
574 <div class="memitem">
575 <div class="memproto">
576 <table class="mlabels">
577   <tr>
578   <td class="mlabels-left">
579       <table class="memname">
580         <tr>
581           <td class="memname">static <a class="el" href="group__pico__platform.html#ga23eadd8d1642fb8fe4600708c36e116a">__force_inline</a> int32_t __mul_instruction </td>
582           <td>(</td>
583           <td class="paramtype">int32_t&#160;</td>
584           <td class="paramname"><em>a</em>, </td>
585         </tr>
586         <tr>
587           <td class="paramkey"></td>
588           <td></td>
589           <td class="paramtype">int32_t&#160;</td>
590           <td class="paramname"><em>b</em>&#160;</td>
591         </tr>
592         <tr>
593           <td></td>
594           <td>)</td>
595           <td></td><td></td>
596         </tr>
597       </table>
598   </td>
599   <td class="mlabels-right">
600 <span class="mlabels"><span class="mlabel">static</span></span>  </td>
601   </tr>
602 </table>
603 </div><div class="memdoc">
604
605 <p>Multiply two integers using an assembly <code>MUL</code> instruction. </p>
606 <p >This multiplies a by b using multiply instruction using the ARM mul instruction regardless of values (the compiler might otherwise choose to perform shifts/adds), i.e. this is a 1 cycle operation.</p>
607 <dl class="params"><dt>Parameters</dt><dd>
608   <table class="params">
609     <tr><td class="paramname">a</td><td>the first operand </td></tr>
610     <tr><td class="paramname">b</td><td>the second operand </td></tr>
611   </table>
612   </dd>
613 </dl>
614 <dl class="section return"><dt>Returns</dt><dd>a * b </dd></dl>
615
616 </div>
617 </div>
618 <a id="ga49c4fc3b5d3fbe9f2f6f7bc500b9db4f" name="ga49c4fc3b5d3fbe9f2f6f7bc500b9db4f"></a>
619 <h2 class="memtitle"><span class="permalink"><a href="#ga49c4fc3b5d3fbe9f2f6f7bc500b9db4f">&#9670;&nbsp;</a></span>busy_wait_at_least_cycles()</h2>
620
621 <div class="memitem">
622 <div class="memproto">
623 <table class="mlabels">
624   <tr>
625   <td class="mlabels-left">
626       <table class="memname">
627         <tr>
628           <td class="memname">static void busy_wait_at_least_cycles </td>
629           <td>(</td>
630           <td class="paramtype">uint32_t&#160;</td>
631           <td class="paramname"><em>minimum_cycles</em></td><td>)</td>
632           <td></td>
633         </tr>
634       </table>
635   </td>
636   <td class="mlabels-right">
637 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
638   </tr>
639 </table>
640 </div><div class="memdoc">
641
642 <p>Helper method to busy-wait for at least the given number of cycles. </p>
643 <p >This method is useful for introducing very short delays.</p>
644 <p >This method busy-waits in a tight loop for the given number of system clock cycles. The total wait time is only accurate to within 2 cycles, and this method uses a loop counter rather than a hardware timer, so the method will always take longer than expected if an interrupt is handled on the calling core during the busy-wait; you can of course disable interrupts to prevent this.</p>
645 <p >You can use clock_get_hz(clk_sys) to determine the number of clock cycles per second if you want to convert an actual time duration to a number of cycles.</p>
646 <dl class="params"><dt>Parameters</dt><dd>
647   <table class="params">
648     <tr><td class="paramname">minimum_cycles</td><td>the minimum number of system clock cycles to delay for </td></tr>
649   </table>
650   </dd>
651 </dl>
652
653 </div>
654 </div>
655 <a id="ga58434ad816f519308ee02c639b7965bc" name="ga58434ad816f519308ee02c639b7965bc"></a>
656 <h2 class="memtitle"><span class="permalink"><a href="#ga58434ad816f519308ee02c639b7965bc">&#9670;&nbsp;</a></span>get_core_num()</h2>
657
658 <div class="memitem">
659 <div class="memproto">
660 <table class="mlabels">
661   <tr>
662   <td class="mlabels-left">
663       <table class="memname">
664         <tr>
665           <td class="memname">static <a class="el" href="group__pico__platform.html#ga23eadd8d1642fb8fe4600708c36e116a">__force_inline</a> uint get_core_num </td>
666           <td>(</td>
667           <td class="paramtype">void&#160;</td>
668           <td class="paramname"></td><td>)</td>
669           <td></td>
670         </tr>
671       </table>
672   </td>
673   <td class="mlabels-right">
674 <span class="mlabels"><span class="mlabel">static</span></span>  </td>
675   </tr>
676 </table>
677 </div><div class="memdoc">
678
679 <p>Get the current core number. </p>
680 <dl class="section return"><dt>Returns</dt><dd>The core number the call was made from </dd></dl>
681
682 </div>
683 </div>
684 <a id="gad1f1a1dc0581a11b597453f148106393" name="gad1f1a1dc0581a11b597453f148106393"></a>
685 <h2 class="memtitle"><span class="permalink"><a href="#gad1f1a1dc0581a11b597453f148106393">&#9670;&nbsp;</a></span>panic()</h2>
686
687 <div class="memitem">
688 <div class="memproto">
689       <table class="memname">
690         <tr>
691           <td class="memname">void panic </td>
692           <td>(</td>
693           <td class="paramtype">const char *&#160;</td>
694           <td class="paramname"><em>fmt</em>, </td>
695         </tr>
696         <tr>
697           <td class="paramkey"></td>
698           <td></td>
699           <td class="paramtype">&#160;</td>
700           <td class="paramname"><em>...</em>&#160;</td>
701         </tr>
702         <tr>
703           <td></td>
704           <td>)</td>
705           <td></td><td></td>
706         </tr>
707       </table>
708 </div><div class="memdoc">
709
710 <p>Displays a panic message and halts execution. </p>
711 <p >An attempt is made to output the message to all registered STDOUT drivers after which this method executes a BKPT instruction.</p>
712 <dl class="params"><dt>Parameters</dt><dd>
713   <table class="params">
714     <tr><td class="paramname">fmt</td><td>format string (printf-like) </td></tr>
715     <tr><td class="paramname">...</td><td>printf-like arguments </td></tr>
716   </table>
717   </dd>
718 </dl>
719
720 </div>
721 </div>
722 <a id="ga29ba8f40ca0c961e04c7380a3665e612" name="ga29ba8f40ca0c961e04c7380a3665e612"></a>
723 <h2 class="memtitle"><span class="permalink"><a href="#ga29ba8f40ca0c961e04c7380a3665e612">&#9670;&nbsp;</a></span>panic_unsupported()</h2>
724
725 <div class="memitem">
726 <div class="memproto">
727       <table class="memname">
728         <tr>
729           <td class="memname">void panic_unsupported </td>
730           <td>(</td>
731           <td class="paramtype">void&#160;</td>
732           <td class="paramname"></td><td>)</td>
733           <td></td>
734         </tr>
735       </table>
736 </div><div class="memdoc">
737
738 <p>Panics with the message "Unsupported". </p>
739 <dl class="section see"><dt>See also</dt><dd><a class="el" href="group__pico__platform.html#gad1f1a1dc0581a11b597453f148106393" title="Displays a panic message and halts execution.">panic</a> </dd></dl>
740
741 </div>
742 </div>
743 <a id="ga66edd7569f5a42b0a2da43a5926cf064" name="ga66edd7569f5a42b0a2da43a5926cf064"></a>
744 <h2 class="memtitle"><span class="permalink"><a href="#ga66edd7569f5a42b0a2da43a5926cf064">&#9670;&nbsp;</a></span>pico_processor_state_is_nonsecure()</h2>
745
746 <div class="memitem">
747 <div class="memproto">
748 <table class="mlabels">
749   <tr>
750   <td class="mlabels-left">
751       <table class="memname">
752         <tr>
753           <td class="memname">static <a class="el" href="group__pico__platform.html#ga23eadd8d1642fb8fe4600708c36e116a">__force_inline</a> bool pico_processor_state_is_nonsecure </td>
754           <td>(</td>
755           <td class="paramtype">void&#160;</td>
756           <td class="paramname"></td><td>)</td>
757           <td></td>
758         </tr>
759       </table>
760   </td>
761   <td class="mlabels-right">
762 <span class="mlabels"><span class="mlabel">static</span></span>  </td>
763   </tr>
764 </table>
765 </div><div class="memdoc">
766
767 <p>Return true if executing in the NonSecure state (Arm-only) </p>
768 <dl class="section return"><dt>Returns</dt><dd>True if currently executing in the NonSecure state on an Arm processor </dd></dl>
769
770 </div>
771 </div>
772 <a id="gac157772e2fa6f4c64e1c3e4d761089d9" name="gac157772e2fa6f4c64e1c3e4d761089d9"></a>
773 <h2 class="memtitle"><span class="permalink"><a href="#gac157772e2fa6f4c64e1c3e4d761089d9">&#9670;&nbsp;</a></span>rp2040_chip_version()</h2>
774
775 <div class="memitem">
776 <div class="memproto">
777 <table class="mlabels">
778   <tr>
779   <td class="mlabels-left">
780       <table class="memname">
781         <tr>
782           <td class="memname">static uint8_t rp2040_chip_version </td>
783           <td>(</td>
784           <td class="paramtype">void&#160;</td>
785           <td class="paramname"></td><td>)</td>
786           <td></td>
787         </tr>
788       </table>
789   </td>
790   <td class="mlabels-right">
791 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
792   </tr>
793 </table>
794 </div><div class="memdoc">
795
796 <p>Returns the RP2040 chip revision number for compatibility. </p>
797 <dl class="section return"><dt>Returns</dt><dd>2 RP2040 errata fixed in B2 are fixed in RP2350 </dd></dl>
798
799 </div>
800 </div>
801 <a id="gadcb55b507bb15fbe5a71bcb2f222b6e2" name="gadcb55b507bb15fbe5a71bcb2f222b6e2"></a>
802 <h2 class="memtitle"><span class="permalink"><a href="#gadcb55b507bb15fbe5a71bcb2f222b6e2">&#9670;&nbsp;</a></span>rp2040_rom_version()</h2>
803
804 <div class="memitem">
805 <div class="memproto">
806 <table class="mlabels">
807   <tr>
808   <td class="mlabels-left">
809       <table class="memname">
810         <tr>
811           <td class="memname">static uint8_t rp2040_rom_version </td>
812           <td>(</td>
813           <td class="paramtype">void&#160;</td>
814           <td class="paramname"></td><td>)</td>
815           <td></td>
816         </tr>
817       </table>
818   </td>
819   <td class="mlabels-right">
820 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
821   </tr>
822 </table>
823 </div><div class="memdoc">
824
825 <p>Returns the RP2040 rom version number. </p>
826 <dl class="section return"><dt>Returns</dt><dd>the RP2040 rom version number (1 for RP2040-B0, 2 for RP2040-B1, 3 for RP2040-B2) </dd></dl>
827
828 </div>
829 </div>
830 <a id="ga21200eb89a299a9b121d028ad1725fe3" name="ga21200eb89a299a9b121d028ad1725fe3"></a>
831 <h2 class="memtitle"><span class="permalink"><a href="#ga21200eb89a299a9b121d028ad1725fe3">&#9670;&nbsp;</a></span>rp2350_chip_version()</h2>
832
833 <div class="memitem">
834 <div class="memproto">
835       <table class="memname">
836         <tr>
837           <td class="memname">uint8_t rp2350_chip_version </td>
838           <td>(</td>
839           <td class="paramtype">void&#160;</td>
840           <td class="paramname"></td><td>)</td>
841           <td></td>
842         </tr>
843       </table>
844 </div><div class="memdoc">
845
846 <p>Returns the RP2350 chip revision number. </p>
847 <dl class="section return"><dt>Returns</dt><dd>the RP2350 chip revision number (1 for B0/B1, 2 for B2) </dd></dl>
848
849 </div>
850 </div>
851 <a id="gab0d1ba75ceb64131e19f613d7a5313c9" name="gab0d1ba75ceb64131e19f613d7a5313c9"></a>
852 <h2 class="memtitle"><span class="permalink"><a href="#gab0d1ba75ceb64131e19f613d7a5313c9">&#9670;&nbsp;</a></span>tight_loop_contents()</h2>
853
854 <div class="memitem">
855 <div class="memproto">
856 <table class="mlabels">
857   <tr>
858   <td class="mlabels-left">
859       <table class="memname">
860         <tr>
861           <td class="memname">static <a class="el" href="group__pico__platform.html#ga23eadd8d1642fb8fe4600708c36e116a">__force_inline</a> void tight_loop_contents </td>
862           <td>(</td>
863           <td class="paramtype">void&#160;</td>
864           <td class="paramname"></td><td>)</td>
865           <td></td>
866         </tr>
867       </table>
868   </td>
869   <td class="mlabels-right">
870 <span class="mlabels"><span class="mlabel">static</span></span>  </td>
871   </tr>
872 </table>
873 </div><div class="memdoc">
874
875 <p>No-op function for the body of tight loops. </p>
876 <p >No-op function intended to be called by any tight hardware polling loop. Using this ubiquitously makes it much easier to find tight loops, but also in the future #ifdef-ed support for lockup debugging might be added </p>
877
878 </div>
879 </div>
880 </div><!-- contents -->
881 </div><!-- doc-content -->
882
883         <script src="main.js"></script>
884 </body>
885 </html>
This page took 0.087416 seconds and 4 git commands to generate.