]> Git Repo - pico-vscode.git/blob - web/docs/group__hardware__i2c.html
Merge branch 'main' into main
[pico-vscode.git] / web / docs / group__hardware__i2c.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: hardware_i2c</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__hardware__i2c.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">hardware_i2c<div class="ingroups"><a class="el" href="group__hardware.html">Hardware APIs</a></div></div></div>
109 </div><!--header-->
110 <div class="contents">
111
112 <p>I2C Controller API.  
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:ga15780f5c76a6e85e6a9d91dc6ca754bc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#ga15780f5c76a6e85e6a9d91dc6ca754bc">I2C_NUM</a>(i2c)</td></tr>
118 <tr class="memdesc:ga15780f5c76a6e85e6a9d91dc6ca754bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the I2C number for a I2C instance.  <a href="group__hardware__i2c.html#ga15780f5c76a6e85e6a9d91dc6ca754bc">More...</a><br /></td></tr>
119 <tr class="separator:ga15780f5c76a6e85e6a9d91dc6ca754bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
120 <tr class="memitem:gaaa18845e47b403a6a54008a776f56b46"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#gaaa18845e47b403a6a54008a776f56b46">I2C_INSTANCE</a>(num)</td></tr>
121 <tr class="memdesc:gaaa18845e47b403a6a54008a776f56b46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the I2C instance with the given I2C number.  <a href="group__hardware__i2c.html#gaaa18845e47b403a6a54008a776f56b46">More...</a><br /></td></tr>
122 <tr class="separator:gaaa18845e47b403a6a54008a776f56b46"><td class="memSeparator" colspan="2">&#160;</td></tr>
123 <tr class="memitem:ga6e96753676145c21b2165f6fde8e0f2a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#ga6e96753676145c21b2165f6fde8e0f2a">I2C_DREQ_NUM</a>(i2c,  is_tx)</td></tr>
124 <tr class="memdesc:ga6e96753676145c21b2165f6fde8e0f2a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the <a class="el" href="group__hardware__dma.html#ga8def0ea481095c94f3a0dd0b4fed999e">dreq_num_t</a> used for pacing DMA transfers to or from this I2C instance. If is_tx is true, then it is for transfers to the I2C instance else for transfers from the I2C instance.  <a href="group__hardware__i2c.html#ga6e96753676145c21b2165f6fde8e0f2a">More...</a><br /></td></tr>
125 <tr class="separator:ga6e96753676145c21b2165f6fde8e0f2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
126 </table><table class="memberdecls">
127 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
128 Functions</h2></td></tr>
129 <tr class="memitem:gad31793849a130033e94fa5b8e98a30a8"><td class="memItemLeft" align="right" valign="top">uint&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#gad31793849a130033e94fa5b8e98a30a8">i2c_init</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c, uint baudrate)</td></tr>
130 <tr class="memdesc:gad31793849a130033e94fa5b8e98a30a8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialise the I2C HW block.  <a href="group__hardware__i2c.html#gad31793849a130033e94fa5b8e98a30a8">More...</a><br /></td></tr>
131 <tr class="separator:gad31793849a130033e94fa5b8e98a30a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
132 <tr class="memitem:ga2e2ac8f345157b0095fc463ac3e584ba"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#ga2e2ac8f345157b0095fc463ac3e584ba">i2c_deinit</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c)</td></tr>
133 <tr class="memdesc:ga2e2ac8f345157b0095fc463ac3e584ba"><td class="mdescLeft">&#160;</td><td class="mdescRight">Disable the I2C HW block.  <a href="group__hardware__i2c.html#ga2e2ac8f345157b0095fc463ac3e584ba">More...</a><br /></td></tr>
134 <tr class="separator:ga2e2ac8f345157b0095fc463ac3e584ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
135 <tr class="memitem:ga615525cad9398b3ec37e8208523c73b4"><td class="memItemLeft" align="right" valign="top">uint&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#ga615525cad9398b3ec37e8208523c73b4">i2c_set_baudrate</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c, uint baudrate)</td></tr>
136 <tr class="memdesc:ga615525cad9398b3ec37e8208523c73b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set I2C baudrate.  <a href="group__hardware__i2c.html#ga615525cad9398b3ec37e8208523c73b4">More...</a><br /></td></tr>
137 <tr class="separator:ga615525cad9398b3ec37e8208523c73b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
138 <tr class="memitem:ga42571b2db5d1ed0dc083385c230dc9e8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#ga42571b2db5d1ed0dc083385c230dc9e8">i2c_set_slave_mode</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c, bool slave, uint8_t addr)</td></tr>
139 <tr class="memdesc:ga42571b2db5d1ed0dc083385c230dc9e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set I2C port to slave mode.  <a href="group__hardware__i2c.html#ga42571b2db5d1ed0dc083385c230dc9e8">More...</a><br /></td></tr>
140 <tr class="separator:ga42571b2db5d1ed0dc083385c230dc9e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
141 <tr class="memitem:gaae747755a45e2fbf96d60bfbc7837f5d"><td class="memItemLeft" align="right" valign="top">static uint&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#gaae747755a45e2fbf96d60bfbc7837f5d">i2c_get_index</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c)</td></tr>
142 <tr class="memdesc:gaae747755a45e2fbf96d60bfbc7837f5d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert I2C instance to hardware instance number.  <a href="group__hardware__i2c.html#gaae747755a45e2fbf96d60bfbc7837f5d">More...</a><br /></td></tr>
143 <tr class="separator:gaae747755a45e2fbf96d60bfbc7837f5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
144 <tr class="memitem:gafb868326e8b0bef077a98e1302b0ff9a"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="structi2c__hw__t.html">i2c_hw_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#gafb868326e8b0bef077a98e1302b0ff9a">i2c_get_hw</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c)</td></tr>
145 <tr class="memdesc:gafb868326e8b0bef077a98e1302b0ff9a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return pointer to structure containing i2c hardware registers.  <a href="group__hardware__i2c.html#gafb868326e8b0bef077a98e1302b0ff9a">More...</a><br /></td></tr>
146 <tr class="separator:gafb868326e8b0bef077a98e1302b0ff9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
147 <tr class="memitem:ga2a132ff74d7b816a6238037fa0e0c2c4"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#ga2a132ff74d7b816a6238037fa0e0c2c4">i2c_get_instance</a> (uint num)</td></tr>
148 <tr class="memdesc:ga2a132ff74d7b816a6238037fa0e0c2c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert I2C hardware instance number to I2C instance.  <a href="group__hardware__i2c.html#ga2a132ff74d7b816a6238037fa0e0c2c4">More...</a><br /></td></tr>
149 <tr class="separator:ga2a132ff74d7b816a6238037fa0e0c2c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
150 <tr class="memitem:gafbad5cc392c9c22618ff9fe3b0f20ea5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#gafbad5cc392c9c22618ff9fe3b0f20ea5">i2c_write_blocking_until</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop, <a class="el" href="group__timestamp.html#ga8b7f3d602cc053f05bacceeacc257ed8">absolute_time_t</a> until)</td></tr>
151 <tr class="memdesc:gafbad5cc392c9c22618ff9fe3b0f20ea5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attempt to write specified number of bytes to address, blocking until the specified absolute time is reached.  <a href="group__hardware__i2c.html#gafbad5cc392c9c22618ff9fe3b0f20ea5">More...</a><br /></td></tr>
152 <tr class="separator:gafbad5cc392c9c22618ff9fe3b0f20ea5"><td class="memSeparator" colspan="2">&#160;</td></tr>
153 <tr class="memitem:ga186c30fab0a661586493c8d51a493850"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#ga186c30fab0a661586493c8d51a493850">i2c_read_blocking_until</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, <a class="el" href="group__timestamp.html#ga8b7f3d602cc053f05bacceeacc257ed8">absolute_time_t</a> until)</td></tr>
154 <tr class="memdesc:ga186c30fab0a661586493c8d51a493850"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attempt to read specified number of bytes from address, blocking until the specified absolute time is reached.  <a href="group__hardware__i2c.html#ga186c30fab0a661586493c8d51a493850">More...</a><br /></td></tr>
155 <tr class="separator:ga186c30fab0a661586493c8d51a493850"><td class="memSeparator" colspan="2">&#160;</td></tr>
156 <tr class="memitem:ga0abb49ca0282530c2655f188b72eb653"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#ga0abb49ca0282530c2655f188b72eb653">i2c_write_timeout_us</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop, uint timeout_us)</td></tr>
157 <tr class="memdesc:ga0abb49ca0282530c2655f188b72eb653"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attempt to write specified number of bytes to address, with timeout.  <a href="group__hardware__i2c.html#ga0abb49ca0282530c2655f188b72eb653">More...</a><br /></td></tr>
158 <tr class="separator:ga0abb49ca0282530c2655f188b72eb653"><td class="memSeparator" colspan="2">&#160;</td></tr>
159 <tr class="memitem:ga9662f16f2e0def852f8fc051e695528d"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#ga9662f16f2e0def852f8fc051e695528d">i2c_read_timeout_us</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop, uint timeout_us)</td></tr>
160 <tr class="memdesc:ga9662f16f2e0def852f8fc051e695528d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attempt to read specified number of bytes from address, with timeout.  <a href="group__hardware__i2c.html#ga9662f16f2e0def852f8fc051e695528d">More...</a><br /></td></tr>
161 <tr class="separator:ga9662f16f2e0def852f8fc051e695528d"><td class="memSeparator" colspan="2">&#160;</td></tr>
162 <tr class="memitem:ga5149e9af84926fa19db6677691ab2900"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#ga5149e9af84926fa19db6677691ab2900">i2c_write_blocking</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c, uint8_t addr, const uint8_t *src, size_t len, bool nostop)</td></tr>
163 <tr class="memdesc:ga5149e9af84926fa19db6677691ab2900"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attempt to write specified number of bytes to address, blocking.  <a href="group__hardware__i2c.html#ga5149e9af84926fa19db6677691ab2900">More...</a><br /></td></tr>
164 <tr class="separator:ga5149e9af84926fa19db6677691ab2900"><td class="memSeparator" colspan="2">&#160;</td></tr>
165 <tr class="memitem:gaba4ea440285edec58eba507308c568c6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#gaba4ea440285edec58eba507308c568c6">i2c_read_blocking</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop)</td></tr>
166 <tr class="memdesc:gaba4ea440285edec58eba507308c568c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attempt to read specified number of bytes from address, blocking.  <a href="group__hardware__i2c.html#gaba4ea440285edec58eba507308c568c6">More...</a><br /></td></tr>
167 <tr class="separator:gaba4ea440285edec58eba507308c568c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
168 <tr class="memitem:ga93f40022189e591521dd0ae5e29708ff"><td class="memItemLeft" align="right" valign="top">static size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#ga93f40022189e591521dd0ae5e29708ff">i2c_get_write_available</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c)</td></tr>
169 <tr class="memdesc:ga93f40022189e591521dd0ae5e29708ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine non-blocking write space available.  <a href="group__hardware__i2c.html#ga93f40022189e591521dd0ae5e29708ff">More...</a><br /></td></tr>
170 <tr class="separator:ga93f40022189e591521dd0ae5e29708ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
171 <tr class="memitem:ga5df361f77f110bbc2b63baa999507bde"><td class="memItemLeft" align="right" valign="top">static size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#ga5df361f77f110bbc2b63baa999507bde">i2c_get_read_available</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c)</td></tr>
172 <tr class="memdesc:ga5df361f77f110bbc2b63baa999507bde"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determine number of bytes received.  <a href="group__hardware__i2c.html#ga5df361f77f110bbc2b63baa999507bde">More...</a><br /></td></tr>
173 <tr class="separator:ga5df361f77f110bbc2b63baa999507bde"><td class="memSeparator" colspan="2">&#160;</td></tr>
174 <tr class="memitem:gaf33250d48e1ad099b1ade910fa97e38d"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#gaf33250d48e1ad099b1ade910fa97e38d">i2c_write_raw_blocking</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c, const uint8_t *src, size_t len)</td></tr>
175 <tr class="memdesc:gaf33250d48e1ad099b1ade910fa97e38d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write direct to TX FIFO.  <a href="group__hardware__i2c.html#gaf33250d48e1ad099b1ade910fa97e38d">More...</a><br /></td></tr>
176 <tr class="separator:gaf33250d48e1ad099b1ade910fa97e38d"><td class="memSeparator" colspan="2">&#160;</td></tr>
177 <tr class="memitem:gacb6879852dedc00403f8c345e6d64611"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#gacb6879852dedc00403f8c345e6d64611">i2c_read_raw_blocking</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c, uint8_t *dst, size_t len)</td></tr>
178 <tr class="memdesc:gacb6879852dedc00403f8c345e6d64611"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read direct from RX FIFO.  <a href="group__hardware__i2c.html#gacb6879852dedc00403f8c345e6d64611">More...</a><br /></td></tr>
179 <tr class="separator:gacb6879852dedc00403f8c345e6d64611"><td class="memSeparator" colspan="2">&#160;</td></tr>
180 <tr class="memitem:gab37f59a13576235e8bed4fffc4bc4361"><td class="memItemLeft" align="right" valign="top">static uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#gab37f59a13576235e8bed4fffc4bc4361">i2c_read_byte_raw</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c)</td></tr>
181 <tr class="memdesc:gab37f59a13576235e8bed4fffc4bc4361"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pop a byte from I2C Rx FIFO.  <a href="group__hardware__i2c.html#gab37f59a13576235e8bed4fffc4bc4361">More...</a><br /></td></tr>
182 <tr class="separator:gab37f59a13576235e8bed4fffc4bc4361"><td class="memSeparator" colspan="2">&#160;</td></tr>
183 <tr class="memitem:ga966547dafbfd2bcb2016c132f26767f8"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#ga966547dafbfd2bcb2016c132f26767f8">i2c_write_byte_raw</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c, uint8_t value)</td></tr>
184 <tr class="memdesc:ga966547dafbfd2bcb2016c132f26767f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Push a byte into I2C Tx FIFO.  <a href="group__hardware__i2c.html#ga966547dafbfd2bcb2016c132f26767f8">More...</a><br /></td></tr>
185 <tr class="separator:ga966547dafbfd2bcb2016c132f26767f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
186 <tr class="memitem:gacce469d1b8f8dc9548d1932c5838d9d9"><td class="memItemLeft" align="right" valign="top">static uint&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#gacce469d1b8f8dc9548d1932c5838d9d9">i2c_get_dreq</a> (<a class="el" href="structi2c__inst.html">i2c_inst_t</a> *i2c, bool is_tx)</td></tr>
187 <tr class="memdesc:gacce469d1b8f8dc9548d1932c5838d9d9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the DREQ to use for pacing transfers to/from a particular I2C instance.  <a href="group__hardware__i2c.html#gacce469d1b8f8dc9548d1932c5838d9d9">More...</a><br /></td></tr>
188 <tr class="separator:gacce469d1b8f8dc9548d1932c5838d9d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
189 <tr class="memitem:ga56c7844696c095a3ad088100df011fd2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structi2c__inst.html">i2c_inst_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__hardware__i2c.html#ga56c7844696c095a3ad088100df011fd2">i2c0_inst</a></td></tr>
190 <tr class="separator:ga56c7844696c095a3ad088100df011fd2"><td class="memSeparator" colspan="2">&#160;</td></tr>
191 </table>
192 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
193 <p >I2C Controller API. </p>
194 <p >The I2C bus is a two-wire serial interface, consisting of a serial data line SDA and a serial clock SCL. These wires carry information between the devices connected to the bus. Each device is recognized by a unique 7-bit address and can operate as either a “transmitter” or “receiver”, depending on the function of the device. Devices can also be considered as masters or slaves when performing data transfers. A master is a device that initiates a data transfer on the bus and generates the clock signals to permit that transfer. The first byte in the data transfer always contains the 7-bit address and a read/write bit in the LSB position. This API takes care of toggling the read/write bit. After this, any device addressed is considered a slave.</p>
195 <p >This API allows the controller to be set up as a master or a slave using the <a class="el" href="group__hardware__i2c.html#ga42571b2db5d1ed0dc083385c230dc9e8">i2c_set_slave_mode</a> function.</p>
196 <p >The external pins of each controller are connected to GPIO pins as defined in the GPIO muxing table in the datasheet. The muxing options give some IO flexibility, but each controller external pin should be connected to only one GPIO.</p>
197 <p >Note that the controller does NOT support High speed mode or Ultra-fast speed mode, the fastest operation being fast mode plus at up to 1000Kb/s.</p>
198 <p >See the datasheet for more information on the I2C controller and its usage.</p>
199 <h2><a class="anchor" id="i2c_example"></a>
200 Example</h2>
201 <div class="fragment"><div class="line"> </div>
202 <div class="line"><span class="comment">// Sweep through all 7-bit I2C addresses, to see if any slaves are present on</span></div>
203 <div class="line"><span class="comment">// the I2C bus. Print out a table that looks like this:</span></div>
204 <div class="line"><span class="comment">//</span></div>
205 <div class="line"><span class="comment">// I2C Bus Scan</span></div>
206 <div class="line"><span class="comment">//   0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F</span></div>
207 <div class="line"><span class="comment">// 0</span></div>
208 <div class="line"><span class="comment">// 1       @</span></div>
209 <div class="line"><span class="comment">// 2</span></div>
210 <div class="line"><span class="comment">// 3             @</span></div>
211 <div class="line"><span class="comment">// 4</span></div>
212 <div class="line"><span class="comment">// 5</span></div>
213 <div class="line"><span class="comment">// 6</span></div>
214 <div class="line"><span class="comment">// 7</span></div>
215 <div class="line"><span class="comment">//</span></div>
216 <div class="line"><span class="comment">// E.g. if slave addresses 0x12 and 0x34 were acknowledged.</span></div>
217 <div class="line"> </div>
218 <div class="line"><span class="preprocessor">#include &lt;<a class="code" href="stdio_8h.html">stdio.h</a>&gt;</span></div>
219 <div class="line"><span class="preprocessor">#include &quot;<a class="code" href="stdlib_8h.html">pico/stdlib.h</a>&quot;</span></div>
220 <div class="line"><span class="preprocessor">#include &quot;<a class="code" href="binary__info_8h.html">pico/binary_info.h</a>&quot;</span></div>
221 <div class="line"><span class="preprocessor">#include &quot;<a class="code" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html">hardware/i2c.h</a>&quot;</span></div>
222 <div class="line"> </div>
223 <div class="line"><span class="comment">// I2C reserves some addresses for special purposes. We exclude these from the scan.</span></div>
224 <div class="line"><span class="comment">// These are any addresses of the form 000 0xxx or 111 1xxx</span></div>
225 <div class="line"><span class="keywordtype">bool</span> reserved_addr(uint8_t addr) {</div>
226 <div class="line">    <span class="keywordflow">return</span> (addr &amp; 0x78) == 0 || (addr &amp; 0x78) == 0x78;</div>
227 <div class="line">}</div>
228 <div class="line"> </div>
229 <div class="line"><span class="keywordtype">int</span> main() {</div>
230 <div class="line">    <span class="comment">// Enable UART so we can print status output</span></div>
231 <div class="line">    <a class="code hl_function" href="group__pico__stdio.html#ga0e604311fb226dae91ff4eb17a19d67a">stdio_init_all</a>();</div>
232 <div class="line"><span class="preprocessor">#if !defined(i2c_default) || !defined(PICO_DEFAULT_I2C_SDA_PIN) || !defined(PICO_DEFAULT_I2C_SCL_PIN)</span></div>
233 <div class="line"><span class="preprocessor">#warning i2c/bus_scan example requires a board with I2C pins</span></div>
234 <div class="line">    puts(<span class="stringliteral">&quot;Default I2C pins were not defined&quot;</span>);</div>
235 <div class="line"><span class="preprocessor">#else</span></div>
236 <div class="line">    <span class="comment">// This example will use I2C0 on the default SDA and SCL pins (GP4, GP5 on a Pico)</span></div>
237 <div class="line">    <a class="code hl_function" href="group__hardware__i2c.html#gad31793849a130033e94fa5b8e98a30a8">i2c_init</a>(i2c_default, 100 * 1000);</div>
238 <div class="line">    <a class="code hl_function" href="group__hardware__gpio.html#ga22f6b90c4c7e0013b4b5341de0a44fc4">gpio_set_function</a>(PICO_DEFAULT_I2C_SDA_PIN, <a class="code hl_enumvalue" href="group__hardware__gpio.html#ggaf91b38a4d4e96c343bd16927c34936e0af5897687741f0ee34c88fd9823f1450a">GPIO_FUNC_I2C</a>);</div>
239 <div class="line">    <a class="code hl_function" href="group__hardware__gpio.html#ga22f6b90c4c7e0013b4b5341de0a44fc4">gpio_set_function</a>(PICO_DEFAULT_I2C_SCL_PIN, <a class="code hl_enumvalue" href="group__hardware__gpio.html#ggaf91b38a4d4e96c343bd16927c34936e0af5897687741f0ee34c88fd9823f1450a">GPIO_FUNC_I2C</a>);</div>
240 <div class="line">    <a class="code hl_function" href="group__hardware__gpio.html#ga30a6733240f3d2e25e6b579b6c3902da">gpio_pull_up</a>(PICO_DEFAULT_I2C_SDA_PIN);</div>
241 <div class="line">    <a class="code hl_function" href="group__hardware__gpio.html#ga30a6733240f3d2e25e6b579b6c3902da">gpio_pull_up</a>(PICO_DEFAULT_I2C_SCL_PIN);</div>
242 <div class="line">    <span class="comment">// Make the I2C pins available to picotool</span></div>
243 <div class="line">    <a class="code hl_define" href="group__pico__binary__info.html#ga758f119659f2491c89e8e2955d647e9a">bi_decl</a>(bi_2pins_with_func(PICO_DEFAULT_I2C_SDA_PIN, PICO_DEFAULT_I2C_SCL_PIN, <a class="code hl_enumvalue" href="group__hardware__gpio.html#ggaf91b38a4d4e96c343bd16927c34936e0af5897687741f0ee34c88fd9823f1450a">GPIO_FUNC_I2C</a>));</div>
244 <div class="line"> </div>
245 <div class="line">    printf(<span class="stringliteral">&quot;\nI2C Bus Scan\n&quot;</span>);</div>
246 <div class="line">    printf(<span class="stringliteral">&quot;   0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F\n&quot;</span>);</div>
247 <div class="line"> </div>
248 <div class="line">    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> addr = 0; addr &lt; (1 &lt;&lt; 7); ++addr) {</div>
249 <div class="line">        <span class="keywordflow">if</span> (addr % 16 == 0) {</div>
250 <div class="line">            printf(<span class="stringliteral">&quot;%02x &quot;</span>, addr);</div>
251 <div class="line">        }</div>
252 <div class="line"> </div>
253 <div class="line">        <span class="comment">// Perform a 1-byte dummy read from the probe address. If a slave</span></div>
254 <div class="line">        <span class="comment">// acknowledges this address, the function returns the number of bytes</span></div>
255 <div class="line">        <span class="comment">// transferred. If the address byte is ignored, the function returns</span></div>
256 <div class="line">        <span class="comment">// -1.</span></div>
257 <div class="line"> </div>
258 <div class="line">        <span class="comment">// Skip over any reserved addresses.</span></div>
259 <div class="line">        <span class="keywordtype">int</span> ret;</div>
260 <div class="line">        uint8_t rxdata;</div>
261 <div class="line">        <span class="keywordflow">if</span> (reserved_addr(addr))</div>
262 <div class="line">            ret = <a class="code hl_enumvalue" href="group__pico__base.html#ggaddcb20bc9a61ceff479aa87369a862aaa3881c25df2261efbc82252df515240d0">PICO_ERROR_GENERIC</a>;</div>
263 <div class="line">        <span class="keywordflow">else</span></div>
264 <div class="line">            ret = <a class="code hl_function" href="group__hardware__i2c.html#gaba4ea440285edec58eba507308c568c6">i2c_read_blocking</a>(i2c_default, addr, &amp;rxdata, 1, <span class="keyword">false</span>);</div>
265 <div class="line"> </div>
266 <div class="line">        printf(ret &lt; 0 ? <span class="stringliteral">&quot;.&quot;</span> : <span class="stringliteral">&quot;@&quot;</span>);</div>
267 <div class="line">        printf(addr % 16 == 15 ? <span class="stringliteral">&quot;\n&quot;</span> : <span class="stringliteral">&quot;  &quot;</span>);</div>
268 <div class="line">    }</div>
269 <div class="line">    printf(<span class="stringliteral">&quot;Done.\n&quot;</span>);</div>
270 <div class="line">    <span class="keywordflow">return</span> 0;</div>
271 <div class="line"><span class="preprocessor">#endif</span></div>
272 <div class="line">}</div>
273 <div class="ttc" id="abinary__info_8h_html"><div class="ttname"><a href="binary__info_8h.html">binary_info.h</a></div></div>
274 <div class="ttc" id="agroup__hardware__gpio_html_ga22f6b90c4c7e0013b4b5341de0a44fc4"><div class="ttname"><a href="group__hardware__gpio.html#ga22f6b90c4c7e0013b4b5341de0a44fc4">gpio_set_function</a></div><div class="ttdeci">void gpio_set_function(uint gpio, gpio_function_t fn)</div><div class="ttdoc">Select GPIO function.</div><div class="ttdef"><b>Definition:</b> gpio.c:38</div></div>
275 <div class="ttc" id="agroup__hardware__gpio_html_ga30a6733240f3d2e25e6b579b6c3902da"><div class="ttname"><a href="group__hardware__gpio.html#ga30a6733240f3d2e25e6b579b6c3902da">gpio_pull_up</a></div><div class="ttdeci">static void gpio_pull_up(uint gpio)</div><div class="ttdoc">Set specified GPIO to be pulled up.</div><div class="ttdef"><b>Definition:</b> gpio.h:299</div></div>
276 <div class="ttc" id="agroup__hardware__gpio_html_ggaf91b38a4d4e96c343bd16927c34936e0af5897687741f0ee34c88fd9823f1450a"><div class="ttname"><a href="group__hardware__gpio.html#ggaf91b38a4d4e96c343bd16927c34936e0af5897687741f0ee34c88fd9823f1450a">GPIO_FUNC_I2C</a></div><div class="ttdeci">@ GPIO_FUNC_I2C</div><div class="ttdoc">Select I2C as GPIO pin function.</div><div class="ttdef"><b>Definition:</b> io_bank0.h:34</div></div>
277 <div class="ttc" id="agroup__hardware__i2c_html_gaba4ea440285edec58eba507308c568c6"><div class="ttname"><a href="group__hardware__i2c.html#gaba4ea440285edec58eba507308c568c6">i2c_read_blocking</a></div><div class="ttdeci">int i2c_read_blocking(i2c_inst_t *i2c, uint8_t addr, uint8_t *dst, size_t len, bool nostop)</div><div class="ttdoc">Attempt to read specified number of bytes from address, blocking.</div><div class="ttdef"><b>Definition:</b> i2c.c:329</div></div>
278 <div class="ttc" id="agroup__hardware__i2c_html_gad31793849a130033e94fa5b8e98a30a8"><div class="ttname"><a href="group__hardware__i2c.html#gad31793849a130033e94fa5b8e98a30a8">i2c_init</a></div><div class="ttdeci">uint i2c_init(i2c_inst_t *i2c, uint baudrate)</div><div class="ttdoc">Initialise the I2C HW block.</div><div class="ttdef"><b>Definition:</b> i2c.c:32</div></div>
279 <div class="ttc" id="agroup__pico__base_html_ggaddcb20bc9a61ceff479aa87369a862aaa3881c25df2261efbc82252df515240d0"><div class="ttname"><a href="group__pico__base.html#ggaddcb20bc9a61ceff479aa87369a862aaa3881c25df2261efbc82252df515240d0">PICO_ERROR_GENERIC</a></div><div class="ttdeci">@ PICO_ERROR_GENERIC</div><div class="ttdoc">An unspecified error occurred.</div><div class="ttdef"><b>Definition:</b> error.h:25</div></div>
280 <div class="ttc" id="agroup__pico__binary__info_html_ga758f119659f2491c89e8e2955d647e9a"><div class="ttname"><a href="group__pico__binary__info.html#ga758f119659f2491c89e8e2955d647e9a">bi_decl</a></div><div class="ttdeci">#define bi_decl(_decl)</div><div class="ttdoc">Declare some binary information that will be included if the contain source file/line is compiled int...</div><div class="ttdef"><b>Definition:</b> code.h:35</div></div>
281 <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>
282 <div class="ttc" id="arp2__common_2hardware__i2c_2include_2hardware_2i2c_8h_html"><div class="ttname"><a href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html">i2c.h</a></div></div>
283 <div class="ttc" id="astdio_8h_html"><div class="ttname"><a href="stdio_8h.html">stdio.h</a></div></div>
284 <div class="ttc" id="astdlib_8h_html"><div class="ttname"><a href="stdlib_8h.html">stdlib.h</a></div></div>
285 </div><!-- fragment --> <h2 class="groupheader">Macro Definition Documentation</h2>
286 <a id="ga6e96753676145c21b2165f6fde8e0f2a" name="ga6e96753676145c21b2165f6fde8e0f2a"></a>
287 <h2 class="memtitle"><span class="permalink"><a href="#ga6e96753676145c21b2165f6fde8e0f2a">&#9670;&nbsp;</a></span>I2C_DREQ_NUM</h2>
288
289 <div class="memitem">
290 <div class="memproto">
291       <table class="memname">
292         <tr>
293           <td class="memname">#define I2C_DREQ_NUM</td>
294           <td>(</td>
295           <td class="paramtype">&#160;</td>
296           <td class="paramname">i2c, </td>
297         </tr>
298         <tr>
299           <td class="paramkey"></td>
300           <td></td>
301           <td class="paramtype">&#160;</td>
302           <td class="paramname">is_tx&#160;</td>
303         </tr>
304         <tr>
305           <td></td>
306           <td>)</td>
307           <td></td><td></td>
308         </tr>
309       </table>
310 </div><div class="memdoc">
311
312 <p>Returns the <a class="el" href="group__hardware__dma.html#ga8def0ea481095c94f3a0dd0b4fed999e">dreq_num_t</a> used for pacing DMA transfers to or from this I2C instance. If is_tx is true, then it is for transfers to the I2C instance else for transfers from the I2C instance. </p>
313 <p >Note this macro is intended to resolve at compile time, and does no parameter checking </p>
314
315 </div>
316 </div>
317 <a id="gaaa18845e47b403a6a54008a776f56b46" name="gaaa18845e47b403a6a54008a776f56b46"></a>
318 <h2 class="memtitle"><span class="permalink"><a href="#gaaa18845e47b403a6a54008a776f56b46">&#9670;&nbsp;</a></span>I2C_INSTANCE</h2>
319
320 <div class="memitem">
321 <div class="memproto">
322       <table class="memname">
323         <tr>
324           <td class="memname">#define I2C_INSTANCE</td>
325           <td>(</td>
326           <td class="paramtype">&#160;</td>
327           <td class="paramname">num</td><td>)</td>
328           <td></td>
329         </tr>
330       </table>
331 </div><div class="memdoc">
332
333 <p>Returns the I2C instance with the given I2C number. </p>
334 <p >Note this macro is intended to resolve at compile time, and does no parameter checking </p>
335
336 </div>
337 </div>
338 <a id="ga15780f5c76a6e85e6a9d91dc6ca754bc" name="ga15780f5c76a6e85e6a9d91dc6ca754bc"></a>
339 <h2 class="memtitle"><span class="permalink"><a href="#ga15780f5c76a6e85e6a9d91dc6ca754bc">&#9670;&nbsp;</a></span>I2C_NUM</h2>
340
341 <div class="memitem">
342 <div class="memproto">
343       <table class="memname">
344         <tr>
345           <td class="memname">#define I2C_NUM</td>
346           <td>(</td>
347           <td class="paramtype">&#160;</td>
348           <td class="paramname">i2c</td><td>)</td>
349           <td></td>
350         </tr>
351       </table>
352 </div><div class="memdoc">
353
354 <p>Returns the I2C number for a I2C instance. </p>
355 <p >Note this macro is intended to resolve at compile time, and does no parameter checking </p>
356
357 </div>
358 </div>
359 <h2 class="groupheader">Function Documentation</h2>
360 <a id="ga2e2ac8f345157b0095fc463ac3e584ba" name="ga2e2ac8f345157b0095fc463ac3e584ba"></a>
361 <h2 class="memtitle"><span class="permalink"><a href="#ga2e2ac8f345157b0095fc463ac3e584ba">&#9670;&nbsp;</a></span>i2c_deinit()</h2>
362
363 <div class="memitem">
364 <div class="memproto">
365       <table class="memname">
366         <tr>
367           <td class="memname">void i2c_deinit </td>
368           <td>(</td>
369           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
370           <td class="paramname"><em>i2c</em></td><td>)</td>
371           <td></td>
372         </tr>
373       </table>
374 </div><div class="memdoc">
375
376 <p>Disable the I2C HW block. </p>
377 <dl class="params"><dt>Parameters</dt><dd>
378   <table class="params">
379     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a></td></tr>
380   </table>
381   </dd>
382 </dl>
383 <p>Disable the I2C again if it is no longer used. Must be reinitialised before being used again. </p>
384
385 </div>
386 </div>
387 <a id="gacce469d1b8f8dc9548d1932c5838d9d9" name="gacce469d1b8f8dc9548d1932c5838d9d9"></a>
388 <h2 class="memtitle"><span class="permalink"><a href="#gacce469d1b8f8dc9548d1932c5838d9d9">&#9670;&nbsp;</a></span>i2c_get_dreq()</h2>
389
390 <div class="memitem">
391 <div class="memproto">
392 <table class="mlabels">
393   <tr>
394   <td class="mlabels-left">
395       <table class="memname">
396         <tr>
397           <td class="memname">static uint i2c_get_dreq </td>
398           <td>(</td>
399           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
400           <td class="paramname"><em>i2c</em>, </td>
401         </tr>
402         <tr>
403           <td class="paramkey"></td>
404           <td></td>
405           <td class="paramtype">bool&#160;</td>
406           <td class="paramname"><em>is_tx</em>&#160;</td>
407         </tr>
408         <tr>
409           <td></td>
410           <td>)</td>
411           <td></td><td></td>
412         </tr>
413       </table>
414   </td>
415   <td class="mlabels-right">
416 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
417   </tr>
418 </table>
419 </div><div class="memdoc">
420
421 <p>Return the DREQ to use for pacing transfers to/from a particular I2C instance. </p>
422 <dl class="params"><dt>Parameters</dt><dd>
423   <table class="params">
424     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a> </td></tr>
425     <tr><td class="paramname">is_tx</td><td>true for sending data to the I2C instance, false for receiving data from the I2C instance </td></tr>
426   </table>
427   </dd>
428 </dl>
429
430 </div>
431 </div>
432 <a id="gafb868326e8b0bef077a98e1302b0ff9a" name="gafb868326e8b0bef077a98e1302b0ff9a"></a>
433 <h2 class="memtitle"><span class="permalink"><a href="#gafb868326e8b0bef077a98e1302b0ff9a">&#9670;&nbsp;</a></span>i2c_get_hw()</h2>
434
435 <div class="memitem">
436 <div class="memproto">
437 <table class="mlabels">
438   <tr>
439   <td class="mlabels-left">
440       <table class="memname">
441         <tr>
442           <td class="memname">static <a class="el" href="structi2c__hw__t.html">i2c_hw_t</a> * i2c_get_hw </td>
443           <td>(</td>
444           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
445           <td class="paramname"><em>i2c</em></td><td>)</td>
446           <td></td>
447         </tr>
448       </table>
449   </td>
450   <td class="mlabels-right">
451 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
452   </tr>
453 </table>
454 </div><div class="memdoc">
455
456 <p>Return pointer to structure containing i2c hardware registers. </p>
457 <dl class="params"><dt>Parameters</dt><dd>
458   <table class="params">
459     <tr><td class="paramname">i2c</td><td>I2C instance </td></tr>
460   </table>
461   </dd>
462 </dl>
463 <dl class="section return"><dt>Returns</dt><dd>pointer to <a class="el" href="structi2c__hw__t.html">i2c_hw_t</a> </dd></dl>
464
465 </div>
466 </div>
467 <a id="gaae747755a45e2fbf96d60bfbc7837f5d" name="gaae747755a45e2fbf96d60bfbc7837f5d"></a>
468 <h2 class="memtitle"><span class="permalink"><a href="#gaae747755a45e2fbf96d60bfbc7837f5d">&#9670;&nbsp;</a></span>i2c_get_index()</h2>
469
470 <div class="memitem">
471 <div class="memproto">
472 <table class="mlabels">
473   <tr>
474   <td class="mlabels-left">
475       <table class="memname">
476         <tr>
477           <td class="memname">static uint i2c_get_index </td>
478           <td>(</td>
479           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
480           <td class="paramname"><em>i2c</em></td><td>)</td>
481           <td></td>
482         </tr>
483       </table>
484   </td>
485   <td class="mlabels-right">
486 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
487   </tr>
488 </table>
489 </div><div class="memdoc">
490
491 <p>Convert I2C instance to hardware instance number. </p>
492 <dl class="params"><dt>Parameters</dt><dd>
493   <table class="params">
494     <tr><td class="paramname">i2c</td><td>I2C instance </td></tr>
495   </table>
496   </dd>
497 </dl>
498 <dl class="section return"><dt>Returns</dt><dd>Number of I2C, 0 or 1. </dd></dl>
499
500 </div>
501 </div>
502 <a id="ga2a132ff74d7b816a6238037fa0e0c2c4" name="ga2a132ff74d7b816a6238037fa0e0c2c4"></a>
503 <h2 class="memtitle"><span class="permalink"><a href="#ga2a132ff74d7b816a6238037fa0e0c2c4">&#9670;&nbsp;</a></span>i2c_get_instance()</h2>
504
505 <div class="memitem">
506 <div class="memproto">
507 <table class="mlabels">
508   <tr>
509   <td class="mlabels-left">
510       <table class="memname">
511         <tr>
512           <td class="memname">static <a class="el" href="structi2c__inst.html">i2c_inst_t</a> * i2c_get_instance </td>
513           <td>(</td>
514           <td class="paramtype">uint&#160;</td>
515           <td class="paramname"><em>num</em></td><td>)</td>
516           <td></td>
517         </tr>
518       </table>
519   </td>
520   <td class="mlabels-right">
521 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
522   </tr>
523 </table>
524 </div><div class="memdoc">
525
526 <p>Convert I2C hardware instance number to I2C instance. </p>
527 <dl class="params"><dt>Parameters</dt><dd>
528   <table class="params">
529     <tr><td class="paramname">num</td><td>Number of I2C, 0 or 1 </td></tr>
530   </table>
531   </dd>
532 </dl>
533 <dl class="section return"><dt>Returns</dt><dd>I2C hardware instance </dd></dl>
534
535 </div>
536 </div>
537 <a id="ga5df361f77f110bbc2b63baa999507bde" name="ga5df361f77f110bbc2b63baa999507bde"></a>
538 <h2 class="memtitle"><span class="permalink"><a href="#ga5df361f77f110bbc2b63baa999507bde">&#9670;&nbsp;</a></span>i2c_get_read_available()</h2>
539
540 <div class="memitem">
541 <div class="memproto">
542 <table class="mlabels">
543   <tr>
544   <td class="mlabels-left">
545       <table class="memname">
546         <tr>
547           <td class="memname">static size_t i2c_get_read_available </td>
548           <td>(</td>
549           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
550           <td class="paramname"><em>i2c</em></td><td>)</td>
551           <td></td>
552         </tr>
553       </table>
554   </td>
555   <td class="mlabels-right">
556 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
557   </tr>
558 </table>
559 </div><div class="memdoc">
560
561 <p>Determine number of bytes received. </p>
562 <dl class="params"><dt>Parameters</dt><dd>
563   <table class="params">
564     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a> </td></tr>
565   </table>
566   </dd>
567 </dl>
568 <dl class="section return"><dt>Returns</dt><dd>0 if no data available, if return is nonzero at least that many bytes can be read without blocking. </dd></dl>
569
570 </div>
571 </div>
572 <a id="ga93f40022189e591521dd0ae5e29708ff" name="ga93f40022189e591521dd0ae5e29708ff"></a>
573 <h2 class="memtitle"><span class="permalink"><a href="#ga93f40022189e591521dd0ae5e29708ff">&#9670;&nbsp;</a></span>i2c_get_write_available()</h2>
574
575 <div class="memitem">
576 <div class="memproto">
577 <table class="mlabels">
578   <tr>
579   <td class="mlabels-left">
580       <table class="memname">
581         <tr>
582           <td class="memname">static size_t i2c_get_write_available </td>
583           <td>(</td>
584           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
585           <td class="paramname"><em>i2c</em></td><td>)</td>
586           <td></td>
587         </tr>
588       </table>
589   </td>
590   <td class="mlabels-right">
591 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
592   </tr>
593 </table>
594 </div><div class="memdoc">
595
596 <p>Determine non-blocking write space available. </p>
597 <dl class="params"><dt>Parameters</dt><dd>
598   <table class="params">
599     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a> </td></tr>
600   </table>
601   </dd>
602 </dl>
603 <dl class="section return"><dt>Returns</dt><dd>0 if no space is available in the I2C to write more data. If return is nonzero, at least that many bytes can be written without blocking. </dd></dl>
604
605 </div>
606 </div>
607 <a id="gad31793849a130033e94fa5b8e98a30a8" name="gad31793849a130033e94fa5b8e98a30a8"></a>
608 <h2 class="memtitle"><span class="permalink"><a href="#gad31793849a130033e94fa5b8e98a30a8">&#9670;&nbsp;</a></span>i2c_init()</h2>
609
610 <div class="memitem">
611 <div class="memproto">
612       <table class="memname">
613         <tr>
614           <td class="memname">uint i2c_init </td>
615           <td>(</td>
616           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
617           <td class="paramname"><em>i2c</em>, </td>
618         </tr>
619         <tr>
620           <td class="paramkey"></td>
621           <td></td>
622           <td class="paramtype">uint&#160;</td>
623           <td class="paramname"><em>baudrate</em>&#160;</td>
624         </tr>
625         <tr>
626           <td></td>
627           <td>)</td>
628           <td></td><td></td>
629         </tr>
630       </table>
631 </div><div class="memdoc">
632
633 <p>Initialise the I2C HW block. </p>
634 <p >Put the I2C hardware into a known state, and enable it. Must be called before other functions. By default, the I2C is configured to operate as a master.</p>
635 <p >The I2C bus frequency is set as close as possible to requested, and the actual rate set is returned</p>
636 <dl class="params"><dt>Parameters</dt><dd>
637   <table class="params">
638     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a> </td></tr>
639     <tr><td class="paramname">baudrate</td><td>Baudrate in Hz (e.g. 100kHz is 100000) </td></tr>
640   </table>
641   </dd>
642 </dl>
643 <dl class="section return"><dt>Returns</dt><dd>Actual set baudrate </dd></dl>
644
645 </div>
646 </div>
647 <a id="gaba4ea440285edec58eba507308c568c6" name="gaba4ea440285edec58eba507308c568c6"></a>
648 <h2 class="memtitle"><span class="permalink"><a href="#gaba4ea440285edec58eba507308c568c6">&#9670;&nbsp;</a></span>i2c_read_blocking()</h2>
649
650 <div class="memitem">
651 <div class="memproto">
652       <table class="memname">
653         <tr>
654           <td class="memname">int i2c_read_blocking </td>
655           <td>(</td>
656           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
657           <td class="paramname"><em>i2c</em>, </td>
658         </tr>
659         <tr>
660           <td class="paramkey"></td>
661           <td></td>
662           <td class="paramtype">uint8_t&#160;</td>
663           <td class="paramname"><em>addr</em>, </td>
664         </tr>
665         <tr>
666           <td class="paramkey"></td>
667           <td></td>
668           <td class="paramtype">uint8_t *&#160;</td>
669           <td class="paramname"><em>dst</em>, </td>
670         </tr>
671         <tr>
672           <td class="paramkey"></td>
673           <td></td>
674           <td class="paramtype">size_t&#160;</td>
675           <td class="paramname"><em>len</em>, </td>
676         </tr>
677         <tr>
678           <td class="paramkey"></td>
679           <td></td>
680           <td class="paramtype">bool&#160;</td>
681           <td class="paramname"><em>nostop</em>&#160;</td>
682         </tr>
683         <tr>
684           <td></td>
685           <td>)</td>
686           <td></td><td></td>
687         </tr>
688       </table>
689 </div><div class="memdoc">
690
691 <p>Attempt to read specified number of bytes from address, blocking. </p>
692 <dl class="params"><dt>Parameters</dt><dd>
693   <table class="params">
694     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a> </td></tr>
695     <tr><td class="paramname">addr</td><td>7-bit address of device to read from </td></tr>
696     <tr><td class="paramname">dst</td><td>Pointer to buffer to receive data </td></tr>
697     <tr><td class="paramname">len</td><td>Length of data in bytes to receive </td></tr>
698     <tr><td class="paramname">nostop</td><td>If true, master retains control of the bus at the end of the transfer (no Stop is issued), and the next transfer will begin with a Restart rather than a Start. </td></tr>
699   </table>
700   </dd>
701 </dl>
702 <dl class="section return"><dt>Returns</dt><dd>Number of bytes read, or PICO_ERROR_GENERIC if address not acknowledged or no device present. </dd></dl>
703
704 </div>
705 </div>
706 <a id="ga186c30fab0a661586493c8d51a493850" name="ga186c30fab0a661586493c8d51a493850"></a>
707 <h2 class="memtitle"><span class="permalink"><a href="#ga186c30fab0a661586493c8d51a493850">&#9670;&nbsp;</a></span>i2c_read_blocking_until()</h2>
708
709 <div class="memitem">
710 <div class="memproto">
711       <table class="memname">
712         <tr>
713           <td class="memname">int i2c_read_blocking_until </td>
714           <td>(</td>
715           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
716           <td class="paramname"><em>i2c</em>, </td>
717         </tr>
718         <tr>
719           <td class="paramkey"></td>
720           <td></td>
721           <td class="paramtype">uint8_t&#160;</td>
722           <td class="paramname"><em>addr</em>, </td>
723         </tr>
724         <tr>
725           <td class="paramkey"></td>
726           <td></td>
727           <td class="paramtype">uint8_t *&#160;</td>
728           <td class="paramname"><em>dst</em>, </td>
729         </tr>
730         <tr>
731           <td class="paramkey"></td>
732           <td></td>
733           <td class="paramtype">size_t&#160;</td>
734           <td class="paramname"><em>len</em>, </td>
735         </tr>
736         <tr>
737           <td class="paramkey"></td>
738           <td></td>
739           <td class="paramtype">bool&#160;</td>
740           <td class="paramname"><em>nostop</em>, </td>
741         </tr>
742         <tr>
743           <td class="paramkey"></td>
744           <td></td>
745           <td class="paramtype"><a class="el" href="group__timestamp.html#ga8b7f3d602cc053f05bacceeacc257ed8">absolute_time_t</a>&#160;</td>
746           <td class="paramname"><em>until</em>&#160;</td>
747         </tr>
748         <tr>
749           <td></td>
750           <td>)</td>
751           <td></td><td></td>
752         </tr>
753       </table>
754 </div><div class="memdoc">
755
756 <p>Attempt to read specified number of bytes from address, blocking until the specified absolute time is reached. </p>
757 <dl class="params"><dt>Parameters</dt><dd>
758   <table class="params">
759     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a> </td></tr>
760     <tr><td class="paramname">addr</td><td>7-bit address of device to read from </td></tr>
761     <tr><td class="paramname">dst</td><td>Pointer to buffer to receive data </td></tr>
762     <tr><td class="paramname">len</td><td>Length of data in bytes to receive </td></tr>
763     <tr><td class="paramname">nostop</td><td>If true, master retains control of the bus at the end of the transfer (no Stop is issued), and the next transfer will begin with a Restart rather than a Start. </td></tr>
764     <tr><td class="paramname">until</td><td>The absolute time that the block will wait until the entire transaction is complete. </td></tr>
765   </table>
766   </dd>
767 </dl>
768 <dl class="section return"><dt>Returns</dt><dd>Number of bytes read, or PICO_ERROR_GENERIC if address not acknowledged, no device present, or PICO_ERROR_TIMEOUT if a timeout occurred. </dd></dl>
769
770 </div>
771 </div>
772 <a id="gab37f59a13576235e8bed4fffc4bc4361" name="gab37f59a13576235e8bed4fffc4bc4361"></a>
773 <h2 class="memtitle"><span class="permalink"><a href="#gab37f59a13576235e8bed4fffc4bc4361">&#9670;&nbsp;</a></span>i2c_read_byte_raw()</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 i2c_read_byte_raw </td>
783           <td>(</td>
784           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
785           <td class="paramname"><em>i2c</em></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>Pop a byte from I2C Rx FIFO. </p>
797 <p >This function is non-blocking and assumes the Rx FIFO isn't empty.</p>
798 <dl class="params"><dt>Parameters</dt><dd>
799   <table class="params">
800     <tr><td class="paramname">i2c</td><td>I2C instance. </td></tr>
801   </table>
802   </dd>
803 </dl>
804 <dl class="section return"><dt>Returns</dt><dd>uint8_t Byte value. </dd></dl>
805
806 </div>
807 </div>
808 <a id="gacb6879852dedc00403f8c345e6d64611" name="gacb6879852dedc00403f8c345e6d64611"></a>
809 <h2 class="memtitle"><span class="permalink"><a href="#gacb6879852dedc00403f8c345e6d64611">&#9670;&nbsp;</a></span>i2c_read_raw_blocking()</h2>
810
811 <div class="memitem">
812 <div class="memproto">
813 <table class="mlabels">
814   <tr>
815   <td class="mlabels-left">
816       <table class="memname">
817         <tr>
818           <td class="memname">static void i2c_read_raw_blocking </td>
819           <td>(</td>
820           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
821           <td class="paramname"><em>i2c</em>, </td>
822         </tr>
823         <tr>
824           <td class="paramkey"></td>
825           <td></td>
826           <td class="paramtype">uint8_t *&#160;</td>
827           <td class="paramname"><em>dst</em>, </td>
828         </tr>
829         <tr>
830           <td class="paramkey"></td>
831           <td></td>
832           <td class="paramtype">size_t&#160;</td>
833           <td class="paramname"><em>len</em>&#160;</td>
834         </tr>
835         <tr>
836           <td></td>
837           <td>)</td>
838           <td></td><td></td>
839         </tr>
840       </table>
841   </td>
842   <td class="mlabels-right">
843 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
844   </tr>
845 </table>
846 </div><div class="memdoc">
847
848 <p>Read direct from RX FIFO. </p>
849 <dl class="params"><dt>Parameters</dt><dd>
850   <table class="params">
851     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a> </td></tr>
852     <tr><td class="paramname">dst</td><td>Buffer to accept data </td></tr>
853     <tr><td class="paramname">len</td><td>Number of bytes to read</td></tr>
854   </table>
855   </dd>
856 </dl>
857 <p>Reads directly from the I2C RX FIFO which is mainly useful for slave-mode operation. </p>
858
859 </div>
860 </div>
861 <a id="ga9662f16f2e0def852f8fc051e695528d" name="ga9662f16f2e0def852f8fc051e695528d"></a>
862 <h2 class="memtitle"><span class="permalink"><a href="#ga9662f16f2e0def852f8fc051e695528d">&#9670;&nbsp;</a></span>i2c_read_timeout_us()</h2>
863
864 <div class="memitem">
865 <div class="memproto">
866 <table class="mlabels">
867   <tr>
868   <td class="mlabels-left">
869       <table class="memname">
870         <tr>
871           <td class="memname">static int i2c_read_timeout_us </td>
872           <td>(</td>
873           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
874           <td class="paramname"><em>i2c</em>, </td>
875         </tr>
876         <tr>
877           <td class="paramkey"></td>
878           <td></td>
879           <td class="paramtype">uint8_t&#160;</td>
880           <td class="paramname"><em>addr</em>, </td>
881         </tr>
882         <tr>
883           <td class="paramkey"></td>
884           <td></td>
885           <td class="paramtype">uint8_t *&#160;</td>
886           <td class="paramname"><em>dst</em>, </td>
887         </tr>
888         <tr>
889           <td class="paramkey"></td>
890           <td></td>
891           <td class="paramtype">size_t&#160;</td>
892           <td class="paramname"><em>len</em>, </td>
893         </tr>
894         <tr>
895           <td class="paramkey"></td>
896           <td></td>
897           <td class="paramtype">bool&#160;</td>
898           <td class="paramname"><em>nostop</em>, </td>
899         </tr>
900         <tr>
901           <td class="paramkey"></td>
902           <td></td>
903           <td class="paramtype">uint&#160;</td>
904           <td class="paramname"><em>timeout_us</em>&#160;</td>
905         </tr>
906         <tr>
907           <td></td>
908           <td>)</td>
909           <td></td><td></td>
910         </tr>
911       </table>
912   </td>
913   <td class="mlabels-right">
914 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
915   </tr>
916 </table>
917 </div><div class="memdoc">
918
919 <p>Attempt to read specified number of bytes from address, with timeout. </p>
920 <dl class="params"><dt>Parameters</dt><dd>
921   <table class="params">
922     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a> </td></tr>
923     <tr><td class="paramname">addr</td><td>7-bit address of device to read from </td></tr>
924     <tr><td class="paramname">dst</td><td>Pointer to buffer to receive data </td></tr>
925     <tr><td class="paramname">len</td><td>Length of data in bytes to receive </td></tr>
926     <tr><td class="paramname">nostop</td><td>If true, master retains control of the bus at the end of the transfer (no Stop is issued), and the next transfer will begin with a Restart rather than a Start. </td></tr>
927     <tr><td class="paramname">timeout_us</td><td>The time that the function will wait for the entire transaction to complete </td></tr>
928   </table>
929   </dd>
930 </dl>
931 <dl class="section return"><dt>Returns</dt><dd>Number of bytes read, or PICO_ERROR_GENERIC if address not acknowledged, no device present, or PICO_ERROR_TIMEOUT if a timeout occurred. </dd></dl>
932
933 </div>
934 </div>
935 <a id="ga615525cad9398b3ec37e8208523c73b4" name="ga615525cad9398b3ec37e8208523c73b4"></a>
936 <h2 class="memtitle"><span class="permalink"><a href="#ga615525cad9398b3ec37e8208523c73b4">&#9670;&nbsp;</a></span>i2c_set_baudrate()</h2>
937
938 <div class="memitem">
939 <div class="memproto">
940       <table class="memname">
941         <tr>
942           <td class="memname">uint i2c_set_baudrate </td>
943           <td>(</td>
944           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
945           <td class="paramname"><em>i2c</em>, </td>
946         </tr>
947         <tr>
948           <td class="paramkey"></td>
949           <td></td>
950           <td class="paramtype">uint&#160;</td>
951           <td class="paramname"><em>baudrate</em>&#160;</td>
952         </tr>
953         <tr>
954           <td></td>
955           <td>)</td>
956           <td></td><td></td>
957         </tr>
958       </table>
959 </div><div class="memdoc">
960
961 <p>Set I2C baudrate. </p>
962 <p >Set I2C bus frequency as close as possible to requested, and return actual rate set. Baudrate may not be as exactly requested due to clocking limitations.</p>
963 <dl class="params"><dt>Parameters</dt><dd>
964   <table class="params">
965     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a> </td></tr>
966     <tr><td class="paramname">baudrate</td><td>Baudrate in Hz (e.g. 100kHz is 100000) </td></tr>
967   </table>
968   </dd>
969 </dl>
970 <dl class="section return"><dt>Returns</dt><dd>Actual set baudrate </dd></dl>
971
972 </div>
973 </div>
974 <a id="ga42571b2db5d1ed0dc083385c230dc9e8" name="ga42571b2db5d1ed0dc083385c230dc9e8"></a>
975 <h2 class="memtitle"><span class="permalink"><a href="#ga42571b2db5d1ed0dc083385c230dc9e8">&#9670;&nbsp;</a></span>i2c_set_slave_mode()</h2>
976
977 <div class="memitem">
978 <div class="memproto">
979       <table class="memname">
980         <tr>
981           <td class="memname">void i2c_set_slave_mode </td>
982           <td>(</td>
983           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
984           <td class="paramname"><em>i2c</em>, </td>
985         </tr>
986         <tr>
987           <td class="paramkey"></td>
988           <td></td>
989           <td class="paramtype">bool&#160;</td>
990           <td class="paramname"><em>slave</em>, </td>
991         </tr>
992         <tr>
993           <td class="paramkey"></td>
994           <td></td>
995           <td class="paramtype">uint8_t&#160;</td>
996           <td class="paramname"><em>addr</em>&#160;</td>
997         </tr>
998         <tr>
999           <td></td>
1000           <td>)</td>
1001           <td></td><td></td>
1002         </tr>
1003       </table>
1004 </div><div class="memdoc">
1005
1006 <p>Set I2C port to slave mode. </p>
1007 <dl class="params"><dt>Parameters</dt><dd>
1008   <table class="params">
1009     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a> </td></tr>
1010     <tr><td class="paramname">slave</td><td>true to use slave mode, false to use master mode </td></tr>
1011     <tr><td class="paramname">addr</td><td>If <code>slave</code> is true, set the slave address to this value </td></tr>
1012   </table>
1013   </dd>
1014 </dl>
1015
1016 </div>
1017 </div>
1018 <a id="ga5149e9af84926fa19db6677691ab2900" name="ga5149e9af84926fa19db6677691ab2900"></a>
1019 <h2 class="memtitle"><span class="permalink"><a href="#ga5149e9af84926fa19db6677691ab2900">&#9670;&nbsp;</a></span>i2c_write_blocking()</h2>
1020
1021 <div class="memitem">
1022 <div class="memproto">
1023       <table class="memname">
1024         <tr>
1025           <td class="memname">int i2c_write_blocking </td>
1026           <td>(</td>
1027           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
1028           <td class="paramname"><em>i2c</em>, </td>
1029         </tr>
1030         <tr>
1031           <td class="paramkey"></td>
1032           <td></td>
1033           <td class="paramtype">uint8_t&#160;</td>
1034           <td class="paramname"><em>addr</em>, </td>
1035         </tr>
1036         <tr>
1037           <td class="paramkey"></td>
1038           <td></td>
1039           <td class="paramtype">const uint8_t *&#160;</td>
1040           <td class="paramname"><em>src</em>, </td>
1041         </tr>
1042         <tr>
1043           <td class="paramkey"></td>
1044           <td></td>
1045           <td class="paramtype">size_t&#160;</td>
1046           <td class="paramname"><em>len</em>, </td>
1047         </tr>
1048         <tr>
1049           <td class="paramkey"></td>
1050           <td></td>
1051           <td class="paramtype">bool&#160;</td>
1052           <td class="paramname"><em>nostop</em>&#160;</td>
1053         </tr>
1054         <tr>
1055           <td></td>
1056           <td>)</td>
1057           <td></td><td></td>
1058         </tr>
1059       </table>
1060 </div><div class="memdoc">
1061
1062 <p>Attempt to write specified number of bytes to address, blocking. </p>
1063 <dl class="params"><dt>Parameters</dt><dd>
1064   <table class="params">
1065     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a> </td></tr>
1066     <tr><td class="paramname">addr</td><td>7-bit address of device to write to </td></tr>
1067     <tr><td class="paramname">src</td><td>Pointer to data to send </td></tr>
1068     <tr><td class="paramname">len</td><td>Length of data in bytes to send </td></tr>
1069     <tr><td class="paramname">nostop</td><td>If true, master retains control of the bus at the end of the transfer (no Stop is issued), and the next transfer will begin with a Restart rather than a Start. </td></tr>
1070   </table>
1071   </dd>
1072 </dl>
1073 <dl class="section return"><dt>Returns</dt><dd>Number of bytes written, or PICO_ERROR_GENERIC if address not acknowledged, no device present. </dd></dl>
1074
1075 </div>
1076 </div>
1077 <a id="gafbad5cc392c9c22618ff9fe3b0f20ea5" name="gafbad5cc392c9c22618ff9fe3b0f20ea5"></a>
1078 <h2 class="memtitle"><span class="permalink"><a href="#gafbad5cc392c9c22618ff9fe3b0f20ea5">&#9670;&nbsp;</a></span>i2c_write_blocking_until()</h2>
1079
1080 <div class="memitem">
1081 <div class="memproto">
1082       <table class="memname">
1083         <tr>
1084           <td class="memname">int i2c_write_blocking_until </td>
1085           <td>(</td>
1086           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
1087           <td class="paramname"><em>i2c</em>, </td>
1088         </tr>
1089         <tr>
1090           <td class="paramkey"></td>
1091           <td></td>
1092           <td class="paramtype">uint8_t&#160;</td>
1093           <td class="paramname"><em>addr</em>, </td>
1094         </tr>
1095         <tr>
1096           <td class="paramkey"></td>
1097           <td></td>
1098           <td class="paramtype">const uint8_t *&#160;</td>
1099           <td class="paramname"><em>src</em>, </td>
1100         </tr>
1101         <tr>
1102           <td class="paramkey"></td>
1103           <td></td>
1104           <td class="paramtype">size_t&#160;</td>
1105           <td class="paramname"><em>len</em>, </td>
1106         </tr>
1107         <tr>
1108           <td class="paramkey"></td>
1109           <td></td>
1110           <td class="paramtype">bool&#160;</td>
1111           <td class="paramname"><em>nostop</em>, </td>
1112         </tr>
1113         <tr>
1114           <td class="paramkey"></td>
1115           <td></td>
1116           <td class="paramtype"><a class="el" href="group__timestamp.html#ga8b7f3d602cc053f05bacceeacc257ed8">absolute_time_t</a>&#160;</td>
1117           <td class="paramname"><em>until</em>&#160;</td>
1118         </tr>
1119         <tr>
1120           <td></td>
1121           <td>)</td>
1122           <td></td><td></td>
1123         </tr>
1124       </table>
1125 </div><div class="memdoc">
1126
1127 <p>Attempt to write specified number of bytes to address, blocking until the specified absolute time is reached. </p>
1128 <dl class="params"><dt>Parameters</dt><dd>
1129   <table class="params">
1130     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a> </td></tr>
1131     <tr><td class="paramname">addr</td><td>7-bit address of device to write to </td></tr>
1132     <tr><td class="paramname">src</td><td>Pointer to data to send </td></tr>
1133     <tr><td class="paramname">len</td><td>Length of data in bytes to send </td></tr>
1134     <tr><td class="paramname">nostop</td><td>If true, master retains control of the bus at the end of the transfer (no Stop is issued), and the next transfer will begin with a Restart rather than a Start. </td></tr>
1135     <tr><td class="paramname">until</td><td>The absolute time that the block will wait until the entire transaction is complete. Note, an individual timeout of this value divided by the length of data is applied for each byte transfer, so if the first or subsequent bytes fails to transfer within that sub timeout, the function will return with an error.</td></tr>
1136   </table>
1137   </dd>
1138 </dl>
1139 <dl class="section return"><dt>Returns</dt><dd>Number of bytes written, or PICO_ERROR_GENERIC if address not acknowledged, no device present, or PICO_ERROR_TIMEOUT if a timeout occurred. </dd></dl>
1140
1141 </div>
1142 </div>
1143 <a id="ga966547dafbfd2bcb2016c132f26767f8" name="ga966547dafbfd2bcb2016c132f26767f8"></a>
1144 <h2 class="memtitle"><span class="permalink"><a href="#ga966547dafbfd2bcb2016c132f26767f8">&#9670;&nbsp;</a></span>i2c_write_byte_raw()</h2>
1145
1146 <div class="memitem">
1147 <div class="memproto">
1148 <table class="mlabels">
1149   <tr>
1150   <td class="mlabels-left">
1151       <table class="memname">
1152         <tr>
1153           <td class="memname">static void i2c_write_byte_raw </td>
1154           <td>(</td>
1155           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
1156           <td class="paramname"><em>i2c</em>, </td>
1157         </tr>
1158         <tr>
1159           <td class="paramkey"></td>
1160           <td></td>
1161           <td class="paramtype">uint8_t&#160;</td>
1162           <td class="paramname"><em>value</em>&#160;</td>
1163         </tr>
1164         <tr>
1165           <td></td>
1166           <td>)</td>
1167           <td></td><td></td>
1168         </tr>
1169       </table>
1170   </td>
1171   <td class="mlabels-right">
1172 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
1173   </tr>
1174 </table>
1175 </div><div class="memdoc">
1176
1177 <p>Push a byte into I2C Tx FIFO. </p>
1178 <p >This function is non-blocking and assumes the Tx FIFO isn't full.</p>
1179 <dl class="params"><dt>Parameters</dt><dd>
1180   <table class="params">
1181     <tr><td class="paramname">i2c</td><td>I2C instance. </td></tr>
1182     <tr><td class="paramname">value</td><td>Byte value. </td></tr>
1183   </table>
1184   </dd>
1185 </dl>
1186
1187 </div>
1188 </div>
1189 <a id="gaf33250d48e1ad099b1ade910fa97e38d" name="gaf33250d48e1ad099b1ade910fa97e38d"></a>
1190 <h2 class="memtitle"><span class="permalink"><a href="#gaf33250d48e1ad099b1ade910fa97e38d">&#9670;&nbsp;</a></span>i2c_write_raw_blocking()</h2>
1191
1192 <div class="memitem">
1193 <div class="memproto">
1194 <table class="mlabels">
1195   <tr>
1196   <td class="mlabels-left">
1197       <table class="memname">
1198         <tr>
1199           <td class="memname">static void i2c_write_raw_blocking </td>
1200           <td>(</td>
1201           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
1202           <td class="paramname"><em>i2c</em>, </td>
1203         </tr>
1204         <tr>
1205           <td class="paramkey"></td>
1206           <td></td>
1207           <td class="paramtype">const uint8_t *&#160;</td>
1208           <td class="paramname"><em>src</em>, </td>
1209         </tr>
1210         <tr>
1211           <td class="paramkey"></td>
1212           <td></td>
1213           <td class="paramtype">size_t&#160;</td>
1214           <td class="paramname"><em>len</em>&#160;</td>
1215         </tr>
1216         <tr>
1217           <td></td>
1218           <td>)</td>
1219           <td></td><td></td>
1220         </tr>
1221       </table>
1222   </td>
1223   <td class="mlabels-right">
1224 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
1225   </tr>
1226 </table>
1227 </div><div class="memdoc">
1228
1229 <p>Write direct to TX FIFO. </p>
1230 <dl class="params"><dt>Parameters</dt><dd>
1231   <table class="params">
1232     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a> </td></tr>
1233     <tr><td class="paramname">src</td><td>Data to send </td></tr>
1234     <tr><td class="paramname">len</td><td>Number of bytes to send</td></tr>
1235   </table>
1236   </dd>
1237 </dl>
1238 <p>Writes directly to the I2C TX FIFO which is mainly useful for slave-mode operation. </p>
1239
1240 </div>
1241 </div>
1242 <a id="ga0abb49ca0282530c2655f188b72eb653" name="ga0abb49ca0282530c2655f188b72eb653"></a>
1243 <h2 class="memtitle"><span class="permalink"><a href="#ga0abb49ca0282530c2655f188b72eb653">&#9670;&nbsp;</a></span>i2c_write_timeout_us()</h2>
1244
1245 <div class="memitem">
1246 <div class="memproto">
1247 <table class="mlabels">
1248   <tr>
1249   <td class="mlabels-left">
1250       <table class="memname">
1251         <tr>
1252           <td class="memname">static int i2c_write_timeout_us </td>
1253           <td>(</td>
1254           <td class="paramtype"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> *&#160;</td>
1255           <td class="paramname"><em>i2c</em>, </td>
1256         </tr>
1257         <tr>
1258           <td class="paramkey"></td>
1259           <td></td>
1260           <td class="paramtype">uint8_t&#160;</td>
1261           <td class="paramname"><em>addr</em>, </td>
1262         </tr>
1263         <tr>
1264           <td class="paramkey"></td>
1265           <td></td>
1266           <td class="paramtype">const uint8_t *&#160;</td>
1267           <td class="paramname"><em>src</em>, </td>
1268         </tr>
1269         <tr>
1270           <td class="paramkey"></td>
1271           <td></td>
1272           <td class="paramtype">size_t&#160;</td>
1273           <td class="paramname"><em>len</em>, </td>
1274         </tr>
1275         <tr>
1276           <td class="paramkey"></td>
1277           <td></td>
1278           <td class="paramtype">bool&#160;</td>
1279           <td class="paramname"><em>nostop</em>, </td>
1280         </tr>
1281         <tr>
1282           <td class="paramkey"></td>
1283           <td></td>
1284           <td class="paramtype">uint&#160;</td>
1285           <td class="paramname"><em>timeout_us</em>&#160;</td>
1286         </tr>
1287         <tr>
1288           <td></td>
1289           <td>)</td>
1290           <td></td><td></td>
1291         </tr>
1292       </table>
1293   </td>
1294   <td class="mlabels-right">
1295 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
1296   </tr>
1297 </table>
1298 </div><div class="memdoc">
1299
1300 <p>Attempt to write specified number of bytes to address, with timeout. </p>
1301 <dl class="params"><dt>Parameters</dt><dd>
1302   <table class="params">
1303     <tr><td class="paramname">i2c</td><td>Either <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a46204d38a512926541fd8bac2b62c720">i2c0</a> or <a class="el" href="rp2__common_2hardware__i2c_2include_2hardware_2i2c_8h.html#a87659b485d9e76dfc3bcef208ac4b573">i2c1</a> </td></tr>
1304     <tr><td class="paramname">addr</td><td>7-bit address of device to write to </td></tr>
1305     <tr><td class="paramname">src</td><td>Pointer to data to send </td></tr>
1306     <tr><td class="paramname">len</td><td>Length of data in bytes to send </td></tr>
1307     <tr><td class="paramname">nostop</td><td>If true, master retains control of the bus at the end of the transfer (no Stop is issued), and the next transfer will begin with a Restart rather than a Start. </td></tr>
1308     <tr><td class="paramname">timeout_us</td><td>The time that the function will wait for the entire transaction to complete. Note, an individual timeout of this value divided by the length of data is applied for each byte transfer, so if the first or subsequent bytes fails to transfer within that sub timeout, the function will return with an error.</td></tr>
1309   </table>
1310   </dd>
1311 </dl>
1312 <dl class="section return"><dt>Returns</dt><dd>Number of bytes written, or PICO_ERROR_GENERIC if address not acknowledged, no device present, or PICO_ERROR_TIMEOUT if a timeout occurred. </dd></dl>
1313
1314 </div>
1315 </div>
1316 <h2 class="groupheader">Variable Documentation</h2>
1317 <a id="ga56c7844696c095a3ad088100df011fd2" name="ga56c7844696c095a3ad088100df011fd2"></a>
1318 <h2 class="memtitle"><span class="permalink"><a href="#ga56c7844696c095a3ad088100df011fd2">&#9670;&nbsp;</a></span>i2c0_inst</h2>
1319
1320 <div class="memitem">
1321 <div class="memproto">
1322 <table class="mlabels">
1323   <tr>
1324   <td class="mlabels-left">
1325       <table class="memname">
1326         <tr>
1327           <td class="memname"><a class="el" href="structi2c__inst.html">i2c_inst_t</a> i2c0_inst</td>
1328         </tr>
1329       </table>
1330   </td>
1331   <td class="mlabels-right">
1332 <span class="mlabels"><span class="mlabel">extern</span></span>  </td>
1333   </tr>
1334 </table>
1335 </div><div class="memdoc">
1336 <p >The I2C identifiers for use in I2C functions.</p>
1337 <p >e.g. i2c_init(i2c0, 48000) </p>
1338
1339 </div>
1340 </div>
1341 </div><!-- contents -->
1342 </div><!-- doc-content -->
1343
1344         <script src="main.js"></script>
1345 </body>
1346 </html>
This page took 0.114978 seconds and 4 git commands to generate.