1 <!-- HTML header for doxygen 1.9.6-->
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" lang="en-US">
5 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
6 <meta http-equiv="X-UA-Compatible" content="IE=11"/>
7 <meta name="viewport" content="width=device-width, initial-scale=1"/>
8 <title>CMSIS-Driver: CAN Interface</title>
9 <link href="doxygen.css" rel="stylesheet" type="text/css"/>
10 <link href="tabs.css" rel="stylesheet" type="text/css"/>
11 <link href="extra_navtree.css" rel="stylesheet" type="text/css"/>
12 <link href="extra_stylesheet.css" rel="stylesheet" type="text/css"/>
13 <link href="extra_search.css" rel="stylesheet" type="text/css"/>
14 <script type="text/javascript" src="jquery.js"></script>
15 <script type="text/javascript" src="dynsections.js"></script>
16 <script type="text/javascript" src="printComponentTabs.js"></script>
17 <script type="text/javascript" src="footer.js"></script>
18 <script type="text/javascript" src="navtree.js"></script>
19 <link href="navtree.css" rel="stylesheet" type="text/css"/>
20 <script type="text/javascript" src="resize.js"></script>
21 <script type="text/javascript" src="navtreedata.js"></script>
22 <script type="text/javascript" src="navtree.js"></script>
23 <link href="search/search.css" rel="stylesheet" type="text/css"/>
24 <script type="text/javascript" src="search/searchdata.js"></script>
25 <script type="text/javascript" src="search/search.js"></script>
26 <script type="text/javascript">
27 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
28 $(document).ready(function() { init_search(); });
31 <script type="text/javascript" src="darkmode_toggle.js"></script>
32 <link href="extra_stylesheet.css" rel="stylesheet" type="text/css"/>
33 <link href="extra_navtree.css" rel="stylesheet" type="text/css"/>
34 <link href="extra_search.css" rel="stylesheet" type="text/css"/>
35 <link href="version.css" rel="stylesheet" type="text/css" />
36 <script type="text/javascript" src="../../version.js"></script>
39 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
41 <table cellspacing="0" cellpadding="0">
43 <tr style="height: 55px;">
44 <td id="projectlogo" style="padding: 1.5em;"><img alt="Logo" src="cmsis_logo_white_small.png"/></td>
45 <td style="padding-left: 1em; padding-bottom: 1em;padding-top: 1em;">
46 <div id="projectname">CMSIS-Driver
47  <span id="projectnumber"><script type="text/javascript">
49 writeHeader.call(this);
50 writeVersionDropdown.call(this, "CMSIS-Driver");
55 <div id="projectbrief">Peripheral Interface for Middleware and Application Code</div>
57 <td> <div id="MSearchBox" class="MSearchBoxInactive">
59 <span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()"> </span>
60 <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
61 onfocus="searchBox.OnSearchFieldFocus(true)"
62 onblur="searchBox.OnSearchFieldFocus(false)"
63 onkeyup="searchBox.OnSearchFieldChange(event)"/>
64 </span><span class="right">
65 <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
69 <!--END !PROJECT_NAME-->
74 <!-- end header part -->
75 <div id="CMSISnav" class="tabs1">
77 <script type="text/javascript">
78 writeComponentTabs.call(this);
82 <script type="text/javascript">
83 writeSubComponentTabs.call(this);
85 <!-- Generated by Doxygen 1.9.6 -->
86 <script type="text/javascript">
87 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
88 var searchBox = new SearchBox("searchBox", "search/",'.html');
92 <div id="side-nav" class="ui-resizable side-nav-resizable">
94 <div id="nav-tree-contents">
95 <div id="nav-sync" class="sync"></div>
98 <div id="splitbar" style="-moz-user-select:none;"
99 class="ui-resizable-handle">
102 <script type="text/javascript">
103 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
104 $(document).ready(function(){initNavTree('group__can__interface__gr.html',''); initResizable(); });
107 <div id="doc-content">
108 <!-- window showing the filter options -->
109 <div id="MSearchSelectWindow"
110 onmouseover="return searchBox.OnSearchSelectShow()"
111 onmouseout="return searchBox.OnSearchSelectHide()"
112 onkeydown="return searchBox.OnSearchSelectKey(event)">
115 <!-- iframe showing the search results (closed by default) -->
116 <div id="MSearchResultsWindow">
117 <div id="MSearchResults">
120 <div id="SRResults"></div>
121 <div class="SRStatus" id="Loading">Loading...</div>
122 <div class="SRStatus" id="Searching">Searching...</div>
123 <div class="SRStatus" id="NoMatches">No Matches</div>
130 <div class="summary">
131 <a href="#groups">Content</a> |
132 <a href="#nested-classes">Data Structures</a> |
133 <a href="#typedef-members">Typedefs</a> |
134 <a href="#func-members">Functions</a> </div>
135 <div class="headertitle"><div class="title">CAN Interface</div></div>
137 <div class="contents">
139 <p>Driver API for CAN Bus Peripheral (Driver_CAN.h)
140 <a href="#details">More...</a></p>
141 <table class="memberdecls">
142 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="groups" name="groups"></a>
143 Content</h2></td></tr>
144 <tr class="memitem:group__can__status__code__ctrls"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__status__code__ctrls.html">CAN Status Error Codes</a></td></tr>
145 <tr class="memdesc:group__can__status__code__ctrls"><td class="mdescLeft"> </td><td class="mdescRight">Status codes of the CAN driver. <br /></td></tr>
146 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
147 <tr class="memitem:group__CAN__unit__events"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__CAN__unit__events.html">CAN Unit Events</a></td></tr>
148 <tr class="memdesc:group__CAN__unit__events"><td class="mdescLeft"> </td><td class="mdescRight">Callback unit events notified via <a class="el" href="group__can__interface__gr.html#ga38795d1ed135ce3bd87f31ef1596bccf">ARM_CAN_SignalUnitEvent</a>. <br /></td></tr>
149 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
150 <tr class="memitem:group__CAN__events"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__CAN__events.html">CAN Object Events</a></td></tr>
151 <tr class="memdesc:group__CAN__events"><td class="mdescLeft"> </td><td class="mdescRight">Callback objects events notified via <a class="el" href="group__can__interface__gr.html#gabfcaeac9e2ca25936ba5a29f2d594e7e">ARM_CAN_SignalObjectEvent</a>. <br /></td></tr>
152 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
153 <tr class="memitem:group__can__control"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__control.html">CAN Control Codes</a></td></tr>
154 <tr class="memdesc:group__can__control"><td class="mdescLeft"> </td><td class="mdescRight">Codes to configure the CAN driver. <br /></td></tr>
155 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
156 </table><table class="memberdecls">
157 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
158 Data Structures</h2></td></tr>
159 <tr class="memitem:structARM__DRIVER__CAN"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#structARM__DRIVER__CAN">ARM_DRIVER_CAN</a></td></tr>
160 <tr class="memdesc:structARM__DRIVER__CAN"><td class="mdescLeft"> </td><td class="mdescRight">Access structure of the CAN Driver. <a href="group__can__interface__gr.html#structARM__DRIVER__CAN">More...</a><br /></td></tr>
161 <tr class="separator:structARM__DRIVER__CAN"><td class="memSeparator" colspan="2"> </td></tr>
162 <tr class="memitem:structARM__CAN__CAPABILITIES"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#structARM__CAN__CAPABILITIES">ARM_CAN_CAPABILITIES</a></td></tr>
163 <tr class="memdesc:structARM__CAN__CAPABILITIES"><td class="mdescLeft"> </td><td class="mdescRight">CAN Device Driver Capabilities. <a href="group__can__interface__gr.html#structARM__CAN__CAPABILITIES">More...</a><br /></td></tr>
164 <tr class="separator:structARM__CAN__CAPABILITIES"><td class="memSeparator" colspan="2"> </td></tr>
165 <tr class="memitem:structARM__CAN__STATUS"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#structARM__CAN__STATUS">ARM_CAN_STATUS</a></td></tr>
166 <tr class="memdesc:structARM__CAN__STATUS"><td class="mdescLeft"> </td><td class="mdescRight">CAN Status. <a href="group__can__interface__gr.html#structARM__CAN__STATUS">More...</a><br /></td></tr>
167 <tr class="separator:structARM__CAN__STATUS"><td class="memSeparator" colspan="2"> </td></tr>
168 <tr class="memitem:structARM__CAN__MSG__INFO"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a></td></tr>
169 <tr class="memdesc:structARM__CAN__MSG__INFO"><td class="mdescLeft"> </td><td class="mdescRight">CAN Message Information. <a href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">More...</a><br /></td></tr>
170 <tr class="separator:structARM__CAN__MSG__INFO"><td class="memSeparator" colspan="2"> </td></tr>
171 <tr class="memitem:structARM__CAN__OBJ__CAPABILITIES"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">ARM_CAN_OBJ_CAPABILITIES</a></td></tr>
172 <tr class="memdesc:structARM__CAN__OBJ__CAPABILITIES"><td class="mdescLeft"> </td><td class="mdescRight">CAN Object Capabilities. <a href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">More...</a><br /></td></tr>
173 <tr class="separator:structARM__CAN__OBJ__CAPABILITIES"><td class="memSeparator" colspan="2"> </td></tr>
174 </table><table class="memberdecls">
175 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a>
176 Typedefs</h2></td></tr>
177 <tr class="memitem:gaac07b9fdf614bf439414f5417aaa376e"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#gaac07b9fdf614bf439414f5417aaa376e">ARM_CAN_SignalUnitEvent_t</a>) (uint32_t event)</td></tr>
178 <tr class="memdesc:gaac07b9fdf614bf439414f5417aaa376e"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#ga38795d1ed135ce3bd87f31ef1596bccf">ARM_CAN_SignalUnitEvent</a> : Signal CAN Unit Event. <br /></td></tr>
179 <tr class="separator:gaac07b9fdf614bf439414f5417aaa376e"><td class="memSeparator" colspan="2"> </td></tr>
180 <tr class="memitem:ga7ceceac3e9aa0981c5cacfab88efb4eb"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga7ceceac3e9aa0981c5cacfab88efb4eb">ARM_CAN_SignalObjectEvent_t</a>) (uint32_t obj_idx, uint32_t event)</td></tr>
181 <tr class="memdesc:ga7ceceac3e9aa0981c5cacfab88efb4eb"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#gabfcaeac9e2ca25936ba5a29f2d594e7e">ARM_CAN_SignalObjectEvent</a> : Signal CAN Object Event. <br /></td></tr>
182 <tr class="separator:ga7ceceac3e9aa0981c5cacfab88efb4eb"><td class="memSeparator" colspan="2"> </td></tr>
183 </table><table class="memberdecls">
184 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
185 Functions</h2></td></tr>
186 <tr class="memitem:ga4256d5b23ffcb27759a05f8e6b854f13"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga4256d5b23ffcb27759a05f8e6b854f13">ARM_CAN_GetVersion</a> (void)</td></tr>
187 <tr class="memdesc:ga4256d5b23ffcb27759a05f8e6b854f13"><td class="mdescLeft"> </td><td class="mdescRight">Get driver version. <br /></td></tr>
188 <tr class="separator:ga4256d5b23ffcb27759a05f8e6b854f13"><td class="memSeparator" colspan="2"> </td></tr>
189 <tr class="memitem:ga35f21cabe1637b1be964024a8f77721c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__can__interface__gr.html#structARM__CAN__CAPABILITIES">ARM_CAN_CAPABILITIES</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga35f21cabe1637b1be964024a8f77721c">ARM_CAN_GetCapabilities</a> (void)</td></tr>
190 <tr class="memdesc:ga35f21cabe1637b1be964024a8f77721c"><td class="mdescLeft"> </td><td class="mdescRight">Get driver capabilities. <br /></td></tr>
191 <tr class="separator:ga35f21cabe1637b1be964024a8f77721c"><td class="memSeparator" colspan="2"> </td></tr>
192 <tr class="memitem:gaa72ceb25ba67e279d7432404632deb44"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#gaa72ceb25ba67e279d7432404632deb44">ARM_CAN_Initialize</a> (<a class="el" href="group__can__interface__gr.html#gaac07b9fdf614bf439414f5417aaa376e">ARM_CAN_SignalUnitEvent_t</a> cb_unit_event, <a class="el" href="group__can__interface__gr.html#ga7ceceac3e9aa0981c5cacfab88efb4eb">ARM_CAN_SignalObjectEvent_t</a> cb_object_event)</td></tr>
193 <tr class="memdesc:gaa72ceb25ba67e279d7432404632deb44"><td class="mdescLeft"> </td><td class="mdescRight">Initialize CAN interface and register signal (callback) functions. <br /></td></tr>
194 <tr class="separator:gaa72ceb25ba67e279d7432404632deb44"><td class="memSeparator" colspan="2"> </td></tr>
195 <tr class="memitem:ga1e3e364b64f2ab277399e3279cce5ef8"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga1e3e364b64f2ab277399e3279cce5ef8">ARM_CAN_Uninitialize</a> (void)</td></tr>
196 <tr class="memdesc:ga1e3e364b64f2ab277399e3279cce5ef8"><td class="mdescLeft"> </td><td class="mdescRight">De-initialize CAN interface. <br /></td></tr>
197 <tr class="separator:ga1e3e364b64f2ab277399e3279cce5ef8"><td class="memSeparator" colspan="2"> </td></tr>
198 <tr class="memitem:ga6f634f126ac97daef2f3115aa7bfed7c"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga6f634f126ac97daef2f3115aa7bfed7c">ARM_CAN_PowerControl</a> (<a class="el" href="group__common__drv__gr.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5">ARM_POWER_STATE</a> state)</td></tr>
199 <tr class="memdesc:ga6f634f126ac97daef2f3115aa7bfed7c"><td class="mdescLeft"> </td><td class="mdescRight">Control CAN interface power. <br /></td></tr>
200 <tr class="separator:ga6f634f126ac97daef2f3115aa7bfed7c"><td class="memSeparator" colspan="2"> </td></tr>
201 <tr class="memitem:ga1fe6cc207415de604975ae251e269361"><td class="memItemLeft" align="right" valign="top">uint32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga1fe6cc207415de604975ae251e269361">ARM_CAN_GetClock</a> (void)</td></tr>
202 <tr class="memdesc:ga1fe6cc207415de604975ae251e269361"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve CAN base clock frequency. <br /></td></tr>
203 <tr class="separator:ga1fe6cc207415de604975ae251e269361"><td class="memSeparator" colspan="2"> </td></tr>
204 <tr class="memitem:ga88bb27a8525503a250cca7a2c4a5d07a"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga88bb27a8525503a250cca7a2c4a5d07a">ARM_CAN_SetBitrate</a> (<a class="el" href="group__can__timeseg__ctrls.html#ga11c12020b81a63a73a8b53e96a7e3dea">ARM_CAN_BITRATE_SELECT</a> select, uint32_t bitrate, uint32_t bit_segments)</td></tr>
205 <tr class="memdesc:ga88bb27a8525503a250cca7a2c4a5d07a"><td class="mdescLeft"> </td><td class="mdescRight">Set bitrate for CAN interface. <br /></td></tr>
206 <tr class="separator:ga88bb27a8525503a250cca7a2c4a5d07a"><td class="memSeparator" colspan="2"> </td></tr>
207 <tr class="memitem:ga28226a6e223f9b95b4dafb7c2f48a855"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga28226a6e223f9b95b4dafb7c2f48a855">ARM_CAN_SetMode</a> (<a class="el" href="group__can__bus__mode__ctrls.html#gabbca99c46d478bcf822eee71cdf75dcd">ARM_CAN_MODE</a> mode)</td></tr>
208 <tr class="memdesc:ga28226a6e223f9b95b4dafb7c2f48a855"><td class="mdescLeft"> </td><td class="mdescRight">Set operating mode for CAN interface. <br /></td></tr>
209 <tr class="separator:ga28226a6e223f9b95b4dafb7c2f48a855"><td class="memSeparator" colspan="2"> </td></tr>
210 <tr class="memitem:ga45ab314f5121cf5a1b32d9adc600e0f7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">ARM_CAN_OBJ_CAPABILITIES</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga45ab314f5121cf5a1b32d9adc600e0f7">ARM_CAN_ObjectGetCapabilities</a> (uint32_t obj_idx)</td></tr>
211 <tr class="memdesc:ga45ab314f5121cf5a1b32d9adc600e0f7"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve capabilities of an object. <br /></td></tr>
212 <tr class="separator:ga45ab314f5121cf5a1b32d9adc600e0f7"><td class="memSeparator" colspan="2"> </td></tr>
213 <tr class="memitem:ga4f9bc7088704483388e14872c9d5385d"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga4f9bc7088704483388e14872c9d5385d">ARM_CAN_ObjectSetFilter</a> (uint32_t obj_idx, <a class="el" href="group__can__filter__operation__ctrls.html#gacb04d0f8b3969ee69362ff2b62941d75">ARM_CAN_FILTER_OPERATION</a> operation, uint32_t id, uint32_t arg)</td></tr>
214 <tr class="memdesc:ga4f9bc7088704483388e14872c9d5385d"><td class="mdescLeft"> </td><td class="mdescRight">Add or remove filter for message reception. <br /></td></tr>
215 <tr class="separator:ga4f9bc7088704483388e14872c9d5385d"><td class="memSeparator" colspan="2"> </td></tr>
216 <tr class="memitem:ga00ec0715f6755a49dae5b60dca182630"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga00ec0715f6755a49dae5b60dca182630">ARM_CAN_ObjectConfigure</a> (uint32_t obj_idx, <a class="el" href="group__can__obj__config__ctrls.html#gaa9488554de0575bc821c9f65213c4cd0">ARM_CAN_OBJ_CONFIG</a> obj_cfg)</td></tr>
217 <tr class="memdesc:ga00ec0715f6755a49dae5b60dca182630"><td class="mdescLeft"> </td><td class="mdescRight">Configure object. <br /></td></tr>
218 <tr class="separator:ga00ec0715f6755a49dae5b60dca182630"><td class="memSeparator" colspan="2"> </td></tr>
219 <tr class="memitem:ga0dcffd362b4093043442a030eaebbcfe"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a> (uint32_t obj_idx, <a class="el" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a> *msg_info, const uint8_t *data, uint8_t size)</td></tr>
220 <tr class="memdesc:ga0dcffd362b4093043442a030eaebbcfe"><td class="mdescLeft"> </td><td class="mdescRight">Send message on CAN bus. <br /></td></tr>
221 <tr class="separator:ga0dcffd362b4093043442a030eaebbcfe"><td class="memSeparator" colspan="2"> </td></tr>
222 <tr class="memitem:gafc37084df5eab32f593c2744d35cf647"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#gafc37084df5eab32f593c2744d35cf647">ARM_CAN_MessageRead</a> (uint32_t obj_idx, <a class="el" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a> *msg_info, uint8_t *data, uint8_t size)</td></tr>
223 <tr class="memdesc:gafc37084df5eab32f593c2744d35cf647"><td class="mdescLeft"> </td><td class="mdescRight">Read message received on CAN bus. <br /></td></tr>
224 <tr class="separator:gafc37084df5eab32f593c2744d35cf647"><td class="memSeparator" colspan="2"> </td></tr>
225 <tr class="memitem:ga8d9f0c5f03a8a81ab062b5aa57e5dea4"><td class="memItemLeft" align="right" valign="top">int32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga8d9f0c5f03a8a81ab062b5aa57e5dea4">ARM_CAN_Control</a> (uint32_t control, uint32_t arg)</td></tr>
226 <tr class="memdesc:ga8d9f0c5f03a8a81ab062b5aa57e5dea4"><td class="mdescLeft"> </td><td class="mdescRight">Control CAN interface. <br /></td></tr>
227 <tr class="separator:ga8d9f0c5f03a8a81ab062b5aa57e5dea4"><td class="memSeparator" colspan="2"> </td></tr>
228 <tr class="memitem:ga676d6b567fc4ab3d44f5d7a50ec9419c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__can__interface__gr.html#structARM__CAN__STATUS">ARM_CAN_STATUS</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga676d6b567fc4ab3d44f5d7a50ec9419c">ARM_CAN_GetStatus</a> (void)</td></tr>
229 <tr class="memdesc:ga676d6b567fc4ab3d44f5d7a50ec9419c"><td class="mdescLeft"> </td><td class="mdescRight">Get CAN status. <br /></td></tr>
230 <tr class="separator:ga676d6b567fc4ab3d44f5d7a50ec9419c"><td class="memSeparator" colspan="2"> </td></tr>
231 <tr class="memitem:ga38795d1ed135ce3bd87f31ef1596bccf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ga38795d1ed135ce3bd87f31ef1596bccf">ARM_CAN_SignalUnitEvent</a> (uint32_t event)</td></tr>
232 <tr class="memdesc:ga38795d1ed135ce3bd87f31ef1596bccf"><td class="mdescLeft"> </td><td class="mdescRight">Signal CAN unit event. <br /></td></tr>
233 <tr class="separator:ga38795d1ed135ce3bd87f31ef1596bccf"><td class="memSeparator" colspan="2"> </td></tr>
234 <tr class="memitem:gabfcaeac9e2ca25936ba5a29f2d594e7e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#gabfcaeac9e2ca25936ba5a29f2d594e7e">ARM_CAN_SignalObjectEvent</a> (uint32_t obj_idx, uint32_t event)</td></tr>
235 <tr class="memdesc:gabfcaeac9e2ca25936ba5a29f2d594e7e"><td class="mdescLeft"> </td><td class="mdescRight">Signal CAN object event. <br /></td></tr>
236 <tr class="separator:gabfcaeac9e2ca25936ba5a29f2d594e7e"><td class="memSeparator" colspan="2"> </td></tr>
238 <a name="details" id="details"></a><h2 class="groupheader">Description</h2>
239 <p>Driver API for CAN Bus Peripheral (Driver_CAN.h) </p>
240 <p>The <b>Controller Area Network</b> Interface Bus (CAN) implements a multi-master serial bus for connecting microcontrollers and devices, also known as nodes, to communicate with each other in applications without a host computer. CAN is a message-based protocol, designed originally for automotive applications, but meanwhile used also in many other surroundings. The complexity of the node can range from a simple I/O device up to an embedded computer with a CAN interface and sophisticated software. The node may also be a gateway allowing a standard computer to communicate over a USB or Ethernet port to the devices on a CAN network. Devices are connected to the bus through a host processor, a CAN controller, and a CAN transceiver.</p>
241 <p>The CAN Driver API allows to implement CAN Interfaces that conform to the <br />
242 <a href="https://www.bosch-semiconductors.com/" target="_blank">CAN specifications available from BOSCH</a>:</p><ul>
243 <li>CAN 2.0B: CAN Specification 2.0B (released Sep. 1991) which is now superseded by ISO 11898-1.</li>
244 <li>CAN FD: CAN with Flexible Data Rate introduced in 2012 (released April 17th, 2012).</li>
246 <p>Wikipedia offers more information about the <a href="https://en.wikipedia.org/wiki/CAN_bus" target="_blank"><b>CAN Bus</b></a>.</p>
247 <p>CAN 2.0B** Every CAN CMSIS-Driver supports the CAN 2.0B standard</p>
248 <p>CAN 2.0B supports:</p><ul>
249 <li>message can contain up to 8 data bytes</li>
250 <li>bitrates of up to 1Mbits/s</li>
251 <li><a class="el" href="group__can__interface__gr.html#Remote_Frame">Remote Frame</a> requests</li>
253 <p><a class="anchor" id="CAN_FD"></a><b>CAN FD</b></p>
254 <p>Support for CAN FD depends on the hardware. <br />
255 A CMSIS-Driver that supports CAN FD has the capability <a class="el" href="group__can__interface__gr.html#structARM__CAN__CAPABILITIES">ARM_CAN_CAPABILITIES</a> data field <b>fd_mode</b> = <span class="XML-Token">1</span>, which can be retrieved with the function <a class="el" href="group__can__interface__gr.html#ga35f21cabe1637b1be964024a8f77721c">ARM_CAN_GetCapabilities</a>.</p>
256 <p>CAN FD supports:</p><ul>
257 <li>message can contain up to 64 data bytes</li>
258 <li>faster data transfers with faster bitrate used during the data phase</li>
260 <p>CAN FD does not support <a class="el" href="group__can__interface__gr.html#Remote_Frame">Remote Frame</a> requests.</p>
261 <p><b>Block Diagram</b></p>
262 <p>The CAN Driver API defines a <b>CAN</b> interface for middleware components. The CAN Driver supports multiple nodes, which are able to send and receive messages, but not simultaneously.</p>
264 <img src="CAN_Node.png" alt=""/>
265 <div class="caption">
266 CAN Node Schematic</div></div>
267 <h2><a class="anchor" id="autotoc_md0"></a>
269 <p>The following header files define the Application Programming Interface (API) for the CAN interface:</p><ul>
270 <li><b>Driver_CAN.h</b> : Driver API for CAN Bus Peripheral</li>
272 <p>The driver implementation is a typical part of the Device Family Pack (DFP) that supports the peripherals of the microcontroller family.</p>
273 <p><b>Driver Functions</b></p>
274 <p>The driver functions are published in the access struct as explained in <a class="el" href="theoryOperation.html#DriverFunctions">Common Driver Functions</a></p><ul>
275 <li><a class="el" href="group__can__interface__gr.html#structARM__DRIVER__CAN">ARM_DRIVER_CAN</a> : access struct for CAN driver functions</li>
277 <p><b>Example Code</b></p>
278 <p>The following example code shows the usage of the CAN interface.</p>
279 <div class="fragment"><div class="line"><span class="preprocessor">#include <stdio.h></span></div>
280 <div class="line"><span class="preprocessor">#include <string.h></span></div>
281 <div class="line"><span class="preprocessor">#include "cmsis_os.h"</span></div>
282 <div class="line"> </div>
283 <div class="line"><span class="preprocessor">#include "<a class="code" href="Driver__CAN_8h.html">Driver_CAN.h</a>"</span></div>
284 <div class="line"> </div>
285 <div class="line"><span class="comment">// CAN Driver Controller selector</span></div>
286 <div class="line"><span class="preprocessor">#define CAN_CONTROLLER 1 </span><span class="comment">// CAN Controller number</span></div>
287 <div class="line"> </div>
288 <div class="line"><span class="preprocessor">#define _CAN_Driver_(n) Driver_CAN##n</span></div>
289 <div class="line"><span class="preprocessor">#define CAN_Driver_(n) _CAN_Driver_(n)</span></div>
290 <div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__can__interface__gr.html#structARM__DRIVER__CAN">ARM_DRIVER_CAN</a> CAN_Driver_(CAN_CONTROLLER);</div>
291 <div class="line"><span class="preprocessor">#define ptrCAN (&CAN_Driver_(CAN_CONTROLLER))</span></div>
292 <div class="line"> </div>
293 <div class="line">uint32_t rx_obj_idx = 0xFFFFFFFFU;</div>
294 <div class="line">uint8_t rx_data[8];</div>
295 <div class="line"><a class="code hl_struct" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a> rx_msg_info;</div>
296 <div class="line">uint32_t tx_obj_idx = 0xFFFFFFFFU;</div>
297 <div class="line">uint8_t tx_data[8];</div>
298 <div class="line"><a class="code hl_struct" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a> tx_msg_info;</div>
299 <div class="line"> </div>
300 <div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> Error_Handler (<span class="keywordtype">void</span>) { <span class="keywordflow">while</span> (1); }</div>
301 <div class="line"> </div>
302 <div class="line"><span class="keywordtype">void</span> CAN_SignalUnitEvent (uint32_t event) {}</div>
303 <div class="line"> </div>
304 <div class="line"><span class="keywordtype">void</span> CAN_SignalObjectEvent (uint32_t obj_idx, uint32_t event) {</div>
305 <div class="line"> </div>
306 <div class="line"> <span class="keywordflow">if</span> (obj_idx == rx_obj_idx) { <span class="comment">// If receive object event</span></div>
307 <div class="line"> <span class="keywordflow">if</span> (event == <a class="code hl_define" href="group__CAN__events.html#ga2c1082561eeae3b2b8132e81fc241e47">ARM_CAN_EVENT_RECEIVE</a>) { <span class="comment">// If message was received successfully</span></div>
308 <div class="line"> <span class="keywordflow">if</span> (ptrCAN->MessageRead(rx_obj_idx, &rx_msg_info, rx_data, 8U) > 0U) {</div>
309 <div class="line"> <span class="comment">// Read received message</span></div>
310 <div class="line"> <span class="comment">// process received message ...</span></div>
311 <div class="line"> }</div>
312 <div class="line"> }</div>
313 <div class="line"> }</div>
314 <div class="line"> <span class="keywordflow">if</span> (obj_idx == tx_obj_idx) { <span class="comment">// If transmit object event</span></div>
315 <div class="line"> <span class="keywordflow">if</span> (event == <a class="code hl_define" href="group__CAN__events.html#ga486f0f35ebc7e3b5931ee68b56703503">ARM_CAN_EVENT_SEND_COMPLETE</a>) { <span class="comment">// If message was sent successfully</span></div>
316 <div class="line"> <span class="comment">// acknowledge sent message ...</span></div>
317 <div class="line"> }</div>
318 <div class="line"> }</div>
319 <div class="line">}</div>
320 <div class="line"> </div>
321 <div class="line"><span class="keywordtype">int</span> main (<span class="keywordtype">void</span>) {</div>
322 <div class="line"> <a class="code hl_struct" href="group__can__interface__gr.html#structARM__CAN__CAPABILITIES">ARM_CAN_CAPABILITIES</a> can_cap;</div>
323 <div class="line"> <a class="code hl_struct" href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">ARM_CAN_OBJ_CAPABILITIES</a> can_obj_cap;</div>
324 <div class="line"> int32_t status;</div>
325 <div class="line"> uint32_t i, num_objects;</div>
326 <div class="line"> </div>
327 <div class="line"> can_cap = ptrCAN->GetCapabilities (); <span class="comment">// Get CAN driver capabilities</span></div>
328 <div class="line"> num_objects = can_cap.<a class="code hl_variable" href="group__can__interface__gr.html#a69bd1a164443cf6f501489f4d31f4681">num_objects</a>; <span class="comment">// Number of receive/transmit objects</span></div>
329 <div class="line"> </div>
330 <div class="line"> status = ptrCAN->Initialize (CAN_SignalUnitEvent, CAN_SignalObjectEvent); <span class="comment">// Initialize CAN driver</span></div>
331 <div class="line"> <span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a> ) { Error_Handler(); }</div>
332 <div class="line"> </div>
333 <div class="line"> status = ptrCAN->PowerControl (<a class="code hl_enumvalue" href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5abed52b77a9ce4775570e44a842b1295e">ARM_POWER_FULL</a>); <span class="comment">// Power-up CAN controller</span></div>
334 <div class="line"> <span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a> ) { Error_Handler(); }</div>
335 <div class="line"> </div>
336 <div class="line"> status = ptrCAN->SetMode (<a class="code hl_enumvalue" href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcda9967a5ebaa045afe54d75e5629676ddc">ARM_CAN_MODE_INITIALIZATION</a>); <span class="comment">// Activate initialization mode</span></div>
337 <div class="line"> <span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a> ) { Error_Handler(); }</div>
338 <div class="line"> </div>
339 <div class="line"> status = ptrCAN->SetBitrate (<a class="code hl_enumvalue" href="Driver__CAN_8h.html#ga11c12020b81a63a73a8b53e96a7e3deaa3b6d191c99f1eba4f01bcc5fbfaf67f3">ARM_CAN_BITRATE_NOMINAL</a>, <span class="comment">// Set nominal bitrate</span></div>
340 <div class="line"> 100000U, <span class="comment">// Set bitrate to 100 kbit/s</span></div>
341 <div class="line"> <a class="code hl_define" href="group__can__timeseg__ctrls.html#ga01183319a5a899eafea9ffe7af73d5ea">ARM_CAN_BIT_PROP_SEG</a>(5U) | <span class="comment">// Set propagation segment to 5 time quanta</span></div>
342 <div class="line"> <a class="code hl_define" href="group__can__timeseg__ctrls.html#ga03f1921ee97a7ebf5d767b6cacf40792">ARM_CAN_BIT_PHASE_SEG1</a>(1U) | <span class="comment">// Set phase segment 1 to 1 time quantum (sample point at 87.5% of bit time)</span></div>
343 <div class="line"> <a class="code hl_define" href="group__can__timeseg__ctrls.html#ga76de056d56803cb7a0d01978ee981e80">ARM_CAN_BIT_PHASE_SEG2</a>(1U) | <span class="comment">// Set phase segment 2 to 1 time quantum (total bit is 8 time quanta long)</span></div>
344 <div class="line"> <a class="code hl_define" href="group__can__timeseg__ctrls.html#gab32e97fa4edf497c111dd3f0d8779269">ARM_CAN_BIT_SJW</a>(1U)); <span class="comment">// Resynchronization jump width is same as phase segment 2</span></div>
345 <div class="line"> <span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a> ) { Error_Handler(); }</div>
346 <div class="line"> </div>
347 <div class="line"> <span class="keywordflow">for</span> (i = 0U; i < num_objects; i++) { <span class="comment">// Find first available object for receive and transmit</span></div>
348 <div class="line"> can_obj_cap = ptrCAN->ObjectGetCapabilities (i); <span class="comment">// Get object capabilities</span></div>
349 <div class="line"> <span class="keywordflow">if</span> ((rx_obj_idx == 0xFFFFFFFFU) && (can_obj_cap.<a class="code hl_variable" href="group__can__interface__gr.html#a895532773c3204e1538191f155c7bac8">rx</a> == 1U)) { rx_obj_idx = i; }</div>
350 <div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((tx_obj_idx == 0xFFFFFFFFU) && (can_obj_cap.<a class="code hl_variable" href="group__can__interface__gr.html#a9706173b2ed538efeb5ee4a952e2272f">tx</a> == 1U)) { tx_obj_idx = i; <span class="keywordflow">break</span>; }</div>
351 <div class="line"> }</div>
352 <div class="line"> <span class="keywordflow">if</span> ((rx_obj_idx == 0xFFFFFFFFU) || (tx_obj_idx == 0xFFFFFFFFU)) { Error_Handler(); }</div>
353 <div class="line"> </div>
354 <div class="line"> <span class="comment">// Set filter to receive messages with extended ID 0x12345678 to receive object</span></div>
355 <div class="line"> status = ptrCAN->ObjectSetFilter(rx_obj_idx, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75aa734058b50573de3b0cc49311997806b">ARM_CAN_FILTER_ID_EXACT_ADD</a>, <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0x12345678U), 0U);</div>
356 <div class="line"> <span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a> ) { Error_Handler(); }</div>
357 <div class="line"> </div>
358 <div class="line"> status = ptrCAN->ObjectConfigure(tx_obj_idx, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0a3e20952f92855298cd0a39a7f47b3f3c">ARM_CAN_OBJ_TX</a>); <span class="comment">// Configure transmit object</span></div>
359 <div class="line"> <span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a> ) { Error_Handler(); }</div>
360 <div class="line"> </div>
361 <div class="line"> status = ptrCAN->ObjectConfigure(rx_obj_idx, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0a14780ac7274831ee94f427cbbf67c003">ARM_CAN_OBJ_RX</a>); <span class="comment">// Configure receive object</span></div>
362 <div class="line"> <span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a> ) { Error_Handler(); }</div>
363 <div class="line"> </div>
364 <div class="line"> status = ptrCAN->SetMode (<a class="code hl_enumvalue" href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcdaa3190344bdf3452462e5c0518ac3cdc4">ARM_CAN_MODE_NORMAL</a>); <span class="comment">// Activate normal operation mode</span></div>
365 <div class="line"> <span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a> ) { Error_Handler(); }</div>
366 <div class="line"> </div>
367 <div class="line"> memset(&tx_msg_info, 0U, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a>)); <span class="comment">// Clear message info structure</span></div>
368 <div class="line"> tx_msg_info.<a class="code hl_variable" href="group__can__interface__gr.html#abaabdc509cdaba7df9f56c6c76f3ae19">id</a> = <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0x12345678U); <span class="comment">// Set extended ID for transmit message</span></div>
369 <div class="line"> tx_data[0] = 0xFFU; <span class="comment">// Initialize transmit data</span></div>
370 <div class="line"> <span class="keywordflow">while</span> (1) {</div>
371 <div class="line"> tx_data[0]++; <span class="comment">// Increment transmit data</span></div>
372 <div class="line"> status = ptrCAN->MessageSend(tx_obj_idx, &tx_msg_info, tx_data, 1U); <span class="comment">// Send data message with 1 data byte</span></div>
373 <div class="line"> <span class="keywordflow">if</span> (status != 1U) { Error_Handler(); }</div>
374 <div class="line"> <span class="keywordflow">for</span> (i = 0U; i < 1000000U; i++) { __nop(); } <span class="comment">// Wait a little while</span></div>
375 <div class="line"> }</div>
376 <div class="line">}</div>
377 <div class="ttc" id="aDriver__CAN_8h_html"><div class="ttname"><a href="Driver__CAN_8h.html">Driver_CAN.h</a></div></div>
378 <div class="ttc" id="aDriver__CAN_8h_html_ga11c12020b81a63a73a8b53e96a7e3deaa3b6d191c99f1eba4f01bcc5fbfaf67f3"><div class="ttname"><a href="Driver__CAN_8h.html#ga11c12020b81a63a73a8b53e96a7e3deaa3b6d191c99f1eba4f01bcc5fbfaf67f3">ARM_CAN_BITRATE_NOMINAL</a></div><div class="ttdeci">@ ARM_CAN_BITRATE_NOMINAL</div><div class="ttdoc">Select nominal (flexible data-rate arbitration) bitrate.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:55</div></div>
379 <div class="ttc" id="aDriver__CAN_8h_html_gaa9488554de0575bc821c9f65213c4cd0a14780ac7274831ee94f427cbbf67c003"><div class="ttname"><a href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0a14780ac7274831ee94f427cbbf67c003">ARM_CAN_OBJ_RX</a></div><div class="ttdeci">@ ARM_CAN_OBJ_RX</div><div class="ttdoc">CAN receive object.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:103</div></div>
380 <div class="ttc" id="aDriver__CAN_8h_html_gaa9488554de0575bc821c9f65213c4cd0a3e20952f92855298cd0a39a7f47b3f3c"><div class="ttname"><a href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0a3e20952f92855298cd0a39a7f47b3f3c">ARM_CAN_OBJ_TX</a></div><div class="ttdeci">@ ARM_CAN_OBJ_TX</div><div class="ttdoc">CAN transmit object.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:102</div></div>
381 <div class="ttc" id="aDriver__CAN_8h_html_gabbca99c46d478bcf822eee71cdf75dcda9967a5ebaa045afe54d75e5629676ddc"><div class="ttname"><a href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcda9967a5ebaa045afe54d75e5629676ddc">ARM_CAN_MODE_INITIALIZATION</a></div><div class="ttdeci">@ ARM_CAN_MODE_INITIALIZATION</div><div class="ttdoc">Initialization mode.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:81</div></div>
382 <div class="ttc" id="aDriver__CAN_8h_html_gabbca99c46d478bcf822eee71cdf75dcdaa3190344bdf3452462e5c0518ac3cdc4"><div class="ttname"><a href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcdaa3190344bdf3452462e5c0518ac3cdc4">ARM_CAN_MODE_NORMAL</a></div><div class="ttdeci">@ ARM_CAN_MODE_NORMAL</div><div class="ttdoc">Normal operation mode.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:82</div></div>
383 <div class="ttc" id="aDriver__CAN_8h_html_gacb04d0f8b3969ee69362ff2b62941d75aa734058b50573de3b0cc49311997806b"><div class="ttname"><a href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75aa734058b50573de3b0cc49311997806b">ARM_CAN_FILTER_ID_EXACT_ADD</a></div><div class="ttdeci">@ ARM_CAN_FILTER_ID_EXACT_ADD</div><div class="ttdoc">Add exact id filter.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:91</div></div>
384 <div class="ttc" id="aDriver__Common_8h_html_ga47d6d7c31f88f3b8ae4aaf9d8444afa5abed52b77a9ce4775570e44a842b1295e"><div class="ttname"><a href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5abed52b77a9ce4775570e44a842b1295e">ARM_POWER_FULL</a></div><div class="ttdeci">@ ARM_POWER_FULL</div><div class="ttdoc">Power on: full operation at maximum performance.</div><div class="ttdef"><b>Definition:</b> Driver_Common.h:66</div></div>
385 <div class="ttc" id="agroup__CAN__events_html_ga2c1082561eeae3b2b8132e81fc241e47"><div class="ttname"><a href="group__CAN__events.html#ga2c1082561eeae3b2b8132e81fc241e47">ARM_CAN_EVENT_RECEIVE</a></div><div class="ttdeci">#define ARM_CAN_EVENT_RECEIVE</div><div class="ttdoc">Message received.</div></div>
386 <div class="ttc" id="agroup__CAN__events_html_ga486f0f35ebc7e3b5931ee68b56703503"><div class="ttname"><a href="group__CAN__events.html#ga486f0f35ebc7e3b5931ee68b56703503">ARM_CAN_EVENT_SEND_COMPLETE</a></div><div class="ttdeci">#define ARM_CAN_EVENT_SEND_COMPLETE</div><div class="ttdoc">Send complete.</div></div>
387 <div class="ttc" id="agroup__can__identifer__ctrls_html_gae7d4efb6fb49e1ec47c2b12e22f37cae"><div class="ttname"><a href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a></div><div class="ttdeci">#define ARM_CAN_EXTENDED_ID(id)</div><div class="ttdoc">CAN identifier in extended format (29-bits)</div></div>
388 <div class="ttc" id="agroup__can__interface__gr_html_a69bd1a164443cf6f501489f4d31f4681"><div class="ttname"><a href="group__can__interface__gr.html#a69bd1a164443cf6f501489f4d31f4681">ARM_CAN_CAPABILITIES::num_objects</a></div><div class="ttdeci">uint32_t num_objects</div><div class="ttdoc">Number of CAN Message Objects available.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:338</div></div>
389 <div class="ttc" id="agroup__can__interface__gr_html_a895532773c3204e1538191f155c7bac8"><div class="ttname"><a href="group__can__interface__gr.html#a895532773c3204e1538191f155c7bac8">ARM_CAN_OBJ_CAPABILITIES::rx</a></div><div class="ttdeci">uint32_t rx</div><div class="ttdoc">Object supports reception.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:113</div></div>
390 <div class="ttc" id="agroup__can__interface__gr_html_a9706173b2ed538efeb5ee4a952e2272f"><div class="ttname"><a href="group__can__interface__gr.html#a9706173b2ed538efeb5ee4a952e2272f">ARM_CAN_OBJ_CAPABILITIES::tx</a></div><div class="ttdeci">uint32_t tx</div><div class="ttdoc">Object supports transmission.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:112</div></div>
391 <div class="ttc" id="agroup__can__interface__gr_html_abaabdc509cdaba7df9f56c6c76f3ae19"><div class="ttname"><a href="group__can__interface__gr.html#abaabdc509cdaba7df9f56c6c76f3ae19">ARM_CAN_MSG_INFO::id</a></div><div class="ttdeci">uint32_t id</div><div class="ttdoc">CAN identifier with frame format specifier (bit 31)</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:144</div></div>
392 <div class="ttc" id="agroup__can__interface__gr_html_structARM__CAN__CAPABILITIES"><div class="ttname"><a href="group__can__interface__gr.html#structARM__CAN__CAPABILITIES">ARM_CAN_CAPABILITIES</a></div><div class="ttdoc">CAN Device Driver Capabilities.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:337</div></div>
393 <div class="ttc" id="agroup__can__interface__gr_html_structARM__CAN__MSG__INFO"><div class="ttname"><a href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a></div><div class="ttdoc">CAN Message Information.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:143</div></div>
394 <div class="ttc" id="agroup__can__interface__gr_html_structARM__CAN__OBJ__CAPABILITIES"><div class="ttname"><a href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">ARM_CAN_OBJ_CAPABILITIES</a></div><div class="ttdoc">CAN Object Capabilities.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:111</div></div>
395 <div class="ttc" id="agroup__can__interface__gr_html_structARM__DRIVER__CAN"><div class="ttname"><a href="group__can__interface__gr.html#structARM__DRIVER__CAN">ARM_DRIVER_CAN</a></div><div class="ttdoc">Access structure of the CAN Driver.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:352</div></div>
396 <div class="ttc" id="agroup__can__timeseg__ctrls_html_ga01183319a5a899eafea9ffe7af73d5ea"><div class="ttname"><a href="group__can__timeseg__ctrls.html#ga01183319a5a899eafea9ffe7af73d5ea">ARM_CAN_BIT_PROP_SEG</a></div><div class="ttdeci">#define ARM_CAN_BIT_PROP_SEG(x)</div></div>
397 <div class="ttc" id="agroup__can__timeseg__ctrls_html_ga03f1921ee97a7ebf5d767b6cacf40792"><div class="ttname"><a href="group__can__timeseg__ctrls.html#ga03f1921ee97a7ebf5d767b6cacf40792">ARM_CAN_BIT_PHASE_SEG1</a></div><div class="ttdeci">#define ARM_CAN_BIT_PHASE_SEG1(x)</div></div>
398 <div class="ttc" id="agroup__can__timeseg__ctrls_html_ga76de056d56803cb7a0d01978ee981e80"><div class="ttname"><a href="group__can__timeseg__ctrls.html#ga76de056d56803cb7a0d01978ee981e80">ARM_CAN_BIT_PHASE_SEG2</a></div><div class="ttdeci">#define ARM_CAN_BIT_PHASE_SEG2(x)</div></div>
399 <div class="ttc" id="agroup__can__timeseg__ctrls_html_gab32e97fa4edf497c111dd3f0d8779269"><div class="ttname"><a href="group__can__timeseg__ctrls.html#gab32e97fa4edf497c111dd3f0d8779269">ARM_CAN_BIT_SJW</a></div><div class="ttdeci">#define ARM_CAN_BIT_SJW(x)</div></div>
400 <div class="ttc" id="agroup__execution__status_html_ga85752c5de59e8adeb001e35ff5be6be7"><div class="ttname"><a href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a></div><div class="ttdeci">#define ARM_DRIVER_OK</div><div class="ttdoc">Operation succeeded.</div></div>
401 </div><!-- fragment --><h1><a class="anchor" id="can_objects"></a>
402 CAN Message Objects</h1>
403 <p>The CMSIS-Driver for the CAN interface provides multiple CAN message objects, which can be seen as individual communication channels. The number of available CAN message objects depends on the CAN peripheral. The function <a class="el" href="group__can__interface__gr.html#ga35f21cabe1637b1be964024a8f77721c">ARM_CAN_GetCapabilities</a> returns the maximum number of available CAN message objects. The number is encoded in the structure <a class="el" href="group__can__interface__gr.html#structARM__CAN__CAPABILITIES">ARM_CAN_CAPABILITIES</a> in the data field <em>num_objects</em>. CAN message objects are addressed with the functions listed below, whereby the parameter <em>obj_idx</em> addresses an individual object. The valid range for <em>obj_idx</em> is <span class="XML-Token">[0 .. (<em>num_objects</em> - 1)]</span>.</p>
404 <table class="markdownTable">
405 <tr class="markdownTableHead">
406 <th class="markdownTableHeadLeft">Function </th><th class="markdownTableHeadLeft">Description </th></tr>
407 <tr class="markdownTableRowOdd">
408 <td class="markdownTableBodyLeft"><a class="el" href="group__can__interface__gr.html#ga45ab314f5121cf5a1b32d9adc600e0f7">ARM_CAN_ObjectGetCapabilities</a> </td><td class="markdownTableBodyLeft">Retrieves message object capabilities such as receive, transmit, <a class="el" href="group__can__interface__gr.html#Remote_Frame">Remote Frame</a> automatic handling and <a class="el" href="group__can__interface__gr.html#can_filtering">CAN Message Filtering</a>. </td></tr>
409 <tr class="markdownTableRowEven">
410 <td class="markdownTableBodyLeft"><a class="el" href="group__can__interface__gr.html#ga4f9bc7088704483388e14872c9d5385d">ARM_CAN_ObjectSetFilter</a> </td><td class="markdownTableBodyLeft">Allows to set-up CAN ID filtering for the message object. </td></tr>
411 <tr class="markdownTableRowOdd">
412 <td class="markdownTableBodyLeft"><a class="el" href="group__can__interface__gr.html#ga00ec0715f6755a49dae5b60dca182630">ARM_CAN_ObjectConfigure</a> </td><td class="markdownTableBodyLeft">Allows to configure the message object for receive, transmit or <a class="el" href="group__can__interface__gr.html#Remote_Frame">Remote Frame</a> automatic handling. </td></tr>
413 <tr class="markdownTableRowEven">
414 <td class="markdownTableBodyLeft"><a class="el" href="group__can__interface__gr.html#gafc37084df5eab32f593c2744d35cf647">ARM_CAN_MessageRead</a> </td><td class="markdownTableBodyLeft">Read received message from the message object. </td></tr>
415 <tr class="markdownTableRowOdd">
416 <td class="markdownTableBodyLeft"><a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a> </td><td class="markdownTableBodyLeft">Send CAN message or send <a class="el" href="group__can__interface__gr.html#Remote_Frame">Remote Frame</a> or set CAN message to be sent automatically on reception of matching <a class="el" href="group__can__interface__gr.html#Remote_Frame">Remote Frame</a> on the message object. </td></tr>
417 <tr class="markdownTableRowEven">
418 <td class="markdownTableBodyLeft"><a class="el" href="group__can__interface__gr.html#gabfcaeac9e2ca25936ba5a29f2d594e7e">ARM_CAN_SignalObjectEvent</a> </td><td class="markdownTableBodyLeft">Callback function that signals a message transfer or a received message overrun. </td></tr>
420 <p>Each CAN message object may have different capabilities. Before using a CAN message object, call the function <a class="el" href="group__can__interface__gr.html#ga45ab314f5121cf5a1b32d9adc600e0f7">ARM_CAN_ObjectGetCapabilities</a> to verify the available features.</p>
421 <h1><a class="anchor" id="can_filtering"></a>
422 CAN Message Filtering</h1>
423 <p>The CMSIS-Driver for the CAN interface supports ID filtering for the receiving message objects. The receiving CAN node examines the identifier to decide if it was relevant. This filtering is done by the CAN peripheral according the settings configured with the function <a class="el" href="group__can__interface__gr.html#ga4f9bc7088704483388e14872c9d5385d">ARM_CAN_ObjectSetFilter</a>.</p>
424 <p>The function <a class="el" href="group__can__interface__gr.html#ga45ab314f5121cf5a1b32d9adc600e0f7">ARM_CAN_ObjectGetCapabilities</a> retrieves the filter capabilities of the CAN message objects stored in <a class="el" href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">ARM_CAN_OBJ_CAPABILITIES</a>.</p>
425 <table class="markdownTable">
426 <tr class="markdownTableHead">
427 <th class="markdownTableHeadLeft">Data Fields </th><th class="markdownTableHeadLeft">CAN Messages Object can be filtered with ... </th></tr>
428 <tr class="markdownTableRowOdd">
429 <td class="markdownTableBodyLeft"><em>exact_filtering</em> </td><td class="markdownTableBodyLeft">an exact ID value set by using the function <a class="el" href="group__can__interface__gr.html#ga4f9bc7088704483388e14872c9d5385d">ARM_CAN_ObjectSetFilter</a> with <em>control</em> = <a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75aa734058b50573de3b0cc49311997806b">ARM_CAN_FILTER_ID_EXACT_ADD</a>. </td></tr>
430 <tr class="markdownTableRowEven">
431 <td class="markdownTableBodyLeft"><em>range_filtering</em> </td><td class="markdownTableBodyLeft">a range ID value set by using the function <a class="el" href="group__can__interface__gr.html#ga4f9bc7088704483388e14872c9d5385d">ARM_CAN_ObjectSetFilter</a> with <em>control</em> = <a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75a22123bef8e773844fce604c553bf2ed5">ARM_CAN_FILTER_ID_RANGE_ADD</a>. </td></tr>
432 <tr class="markdownTableRowOdd">
433 <td class="markdownTableBodyLeft"><em>mask_filtering</em> </td><td class="markdownTableBodyLeft">a mask ID value set by as using the function <a class="el" href="group__can__interface__gr.html#ga4f9bc7088704483388e14872c9d5385d">ARM_CAN_ObjectSetFilter</a> with <em>control</em> = <a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75ac4ad302fa9b762c1d14964141e234ba9">ARM_CAN_FILTER_ID_MASKABLE_ADD</a>. </td></tr>
434 <tr class="markdownTableRowEven">
435 <td class="markdownTableBodyLeft"><em>multiple_filters</em> </td><td class="markdownTableBodyLeft">... several filters to capture multiple ID values, or ID value ranges. </td></tr>
437 <p><b>CAN message filtering using an exact ID</b></p>
438 <p>Example: accept in message object #1 only frames with extended ID = 0x1567. </p><div class="fragment"><div class="line">status = ptrCAN->ObjectSetFilter (1, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75aa734058b50573de3b0cc49311997806b">ARM_CAN_FILTER_ID_EXACT_ADD</a>, <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0x1567), 0);</div>
439 <div class="line"><span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) ... <span class="comment">// error handling</span></div>
440 </div><!-- fragment --><p>Example: accept in message object #2 frames with extended ID = 0x3167 and extended ID = 0x42123. </p><div class="fragment"><div class="line">status = ptrCAN->ObjectSetFilter (2, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75aa734058b50573de3b0cc49311997806b">ARM_CAN_FILTER_ID_EXACT_ADD</a>, <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0x3167), 0);</div>
441 <div class="line"><span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) ... <span class="comment">// error handling</span></div>
442 <div class="line">status = ptrCAN->ObjectSetFilter (2, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75aa734058b50573de3b0cc49311997806b">ARM_CAN_FILTER_ID_EXACT_ADD</a>, <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0x42123), 0);</div>
443 <div class="line"><span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) ... <span class="comment">// error handling</span></div>
444 </div><!-- fragment --><p><b>CAN message filtering using a range ID</b></p>
445 <p>Example: accept in message object #3 only frames with extended ID >= 0x1567 and extended ID <= 0x1577. </p><div class="fragment"><div class="line">status = ptrCAN->ObjectSetFilter (3, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75a22123bef8e773844fce604c553bf2ed5">ARM_CAN_FILTER_ID_RANGE_ADD</a>, <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0x1567), <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0x1577));</div>
446 <div class="line"><span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) ... <span class="comment">// error handling</span></div>
447 <div class="ttc" id="aDriver__CAN_8h_html_gacb04d0f8b3969ee69362ff2b62941d75a22123bef8e773844fce604c553bf2ed5"><div class="ttname"><a href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75a22123bef8e773844fce604c553bf2ed5">ARM_CAN_FILTER_ID_RANGE_ADD</a></div><div class="ttdeci">@ ARM_CAN_FILTER_ID_RANGE_ADD</div><div class="ttdoc">Add range id filter.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:93</div></div>
448 </div><!-- fragment --><p><b>CAN message filtering using a mask ID</b></p>
449 <p>Using the function <a class="el" href="group__can__interface__gr.html#ga4f9bc7088704483388e14872c9d5385d">ARM_CAN_ObjectSetFilter</a> with <em>control</em> = <a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75ac4ad302fa9b762c1d14964141e234ba9">ARM_CAN_FILTER_ID_MASKABLE_ADD</a> allows to specify with <em>arg</em> a mask value.</p><ul>
450 <li>if a mask bit is <span class="XML-Token">0</span>, the corresponding <em>ID</em> bit will be accepted, regardless of the value.</li>
451 <li>if a mask bit is <span class="XML-Token">1</span>, the corresponding <em>ID</em> bit will be compared with the value of the ID filter bit; if they match the message will be accepted otherwise the frame is rejected.</li>
453 <p>Example: accept in message object #0 only frames with extended IDs 0x1560 to 0x156F. </p><div class="fragment"><div class="line">status = ptrCAN->ObjectSetFilter (0, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75ac4ad302fa9b762c1d14964141e234ba9">ARM_CAN_FILTER_ID_MASKABLE_ADD</a>, <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0x1560), 0x1FFFFFF0);</div>
454 <div class="line"><span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) ... <span class="comment">// error handling</span></div>
455 <div class="ttc" id="aDriver__CAN_8h_html_gacb04d0f8b3969ee69362ff2b62941d75ac4ad302fa9b762c1d14964141e234ba9"><div class="ttname"><a href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75ac4ad302fa9b762c1d14964141e234ba9">ARM_CAN_FILTER_ID_MASKABLE_ADD</a></div><div class="ttdeci">@ ARM_CAN_FILTER_ID_MASKABLE_ADD</div><div class="ttdoc">Add maskable id filter.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:95</div></div>
456 </div><!-- fragment --><p>Example: accept in message object #2 only frames with extended IDs 0x35603, 0x35613, 0x35623, and 0x35633. </p><div class="fragment"><div class="line">status = ptrCAN->ObjectSetFilter (2, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75ac4ad302fa9b762c1d14964141e234ba9">ARM_CAN_FILTER_ID_MASKABLE_ADD</a>, <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0x35603), 0x1FFFFFCF);</div>
457 <div class="line"><span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) ... <span class="comment">// error handling</span></div>
458 </div><!-- fragment --><p>Example: accept any message in object #4 regardless of the ID. </p><div class="fragment"><div class="line">status = ptrCAN->ObjectSetFilter (4, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75ac4ad302fa9b762c1d14964141e234ba9">ARM_CAN_FILTER_ID_MASKABLE_ADD</a>, <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0), 0);</div>
459 <div class="line"><span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) ... <span class="comment">// error handling</span></div>
460 </div><!-- fragment --><h1><a class="anchor" id="Remote_Frame"></a>
462 <p>In general, data transmission is performed on an autonomous basis with the data source node sending out Data Frames.</p>
463 <p>However, sending a <b>Remote Frame</b> allows a destination node to request the data from the source node. The examples below shows the data exchange using a <b>Remote Transmission Request (RTR)</b>.</p>
464 <p><b>Example for automatic Data Message response on RTR</b></p>
465 <p>For automatic data message response on an RTR, the object is configured with the function <a class="el" href="group__can__interface__gr.html#ga00ec0715f6755a49dae5b60dca182630">ARM_CAN_ObjectConfigure</a> <em>obj_cfg</em> = <a class="el" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0ac5d28d180ea9e4328974ffcb8b928a0c">ARM_CAN_OBJ_RX_RTR_TX_DATA</a>.</p>
466 <p>In this case, the function <a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a> sets a data message that is transmitted when an RTR with a matching CAN ID is received. If <a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a> was not called before the RTR is received, the response is hardware dependent (either last data message is repeated or no data message is sent until <a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a> is called).</p>
467 <p>After data transmission is completed, the driver calls a callback function <a class="el" href="group__can__interface__gr.html#gabfcaeac9e2ca25936ba5a29f2d594e7e">ARM_CAN_SignalObjectEvent</a> with <em>event</em> = <a class="el" href="group__CAN__events.html#ga486f0f35ebc7e3b5931ee68b56703503">ARM_CAN_EVENT_SEND_COMPLETE</a> and the related <em>obj_idx</em>.</p>
468 <p><b>Example:</b> </p><div class="fragment"><div class="line">status = ptrCAN->ObjectSetFilter(0, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75aa734058b50573de3b0cc49311997806b">ARM_CAN_FILTER_ID_EXACT_ADD</a>, <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0x12345678U), 0U);</div>
469 <div class="line"><span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) ... <span class="comment">// error handling</span></div>
470 <div class="line">status = trCAN->ObjectConfigure(0, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0ac5d28d180ea9e4328974ffcb8b928a0c">ARM_CAN_OBJ_RX_RTR_TX_DATA</a>);</div>
471 <div class="line"><span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) ... <span class="comment">// error handling</span></div>
472 <div class="line"> </div>
473 <div class="line">memset(&tx_msg_info, 0, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a>)); <span class="comment">// Clear transmit message structure</span></div>
474 <div class="line">tx_msg_info.<a class="code hl_variable" href="group__can__interface__gr.html#abaabdc509cdaba7df9f56c6c76f3ae19">id</a> = <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0x12345678U); <span class="comment">// Set ID of message</span></div>
475 <div class="line">data_buf[0] = <span class="charliteral">'1'</span>; data_buf[1] = <span class="charliteral">'2'</span>; <span class="comment">// Prepare data to transmit</span></div>
476 <div class="line">data_buf[2] = <span class="charliteral">'3'</span>; data_buf[3] = <span class="charliteral">'4'</span>;</div>
477 <div class="line">data_buf[4] = <span class="charliteral">'5'</span>; data_buf[5] = <span class="charliteral">'6'</span>;</div>
478 <div class="line">data_buf[6] = <span class="charliteral">'7'</span>; data_buf[7] = <span class="charliteral">'8'</span>;</div>
479 <div class="line">ptrCAN->MessageSend(0, &tx_msg_info, data_buf, 8); <span class="comment">// Start send message that will be triggered on RTR reception</span></div>
480 <div class="ttc" id="aDriver__CAN_8h_html_gaa9488554de0575bc821c9f65213c4cd0ac5d28d180ea9e4328974ffcb8b928a0c"><div class="ttname"><a href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0ac5d28d180ea9e4328974ffcb8b928a0c">ARM_CAN_OBJ_RX_RTR_TX_DATA</a></div><div class="ttdeci">@ ARM_CAN_OBJ_RX_RTR_TX_DATA</div><div class="ttdoc">CAN object that on RTR reception automatically transmits Data Frame.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:104</div></div>
481 </div><!-- fragment --><p><b>Example for automatic Data Message reception using RTR</b></p>
482 <p>For automatic data message reception on an RTR, the object is configured with the function <a class="el" href="group__can__interface__gr.html#ga00ec0715f6755a49dae5b60dca182630">ARM_CAN_ObjectConfigure</a> <em>obj_cfg</em> = <a class="el" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0a396d7a6cd2353e1a2936405ace6417f5">ARM_CAN_OBJ_TX_RTR_RX_DATA</a>.</p>
483 <p>The receiver or consumer requests data with transmission of an RTR with the <a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a>. This RTR requests from the transmitter or producer to send the data message. Once the data message is received, the driver calls a callback function <a class="el" href="group__can__interface__gr.html#gabfcaeac9e2ca25936ba5a29f2d594e7e">ARM_CAN_SignalObjectEvent</a> with <em>event</em> = <a class="el" href="group__CAN__events.html#ga2c1082561eeae3b2b8132e81fc241e47">ARM_CAN_EVENT_RECEIVE</a> and the related <em>obj_idx</em>. The received data message can then be read with the function <a class="el" href="group__can__interface__gr.html#gafc37084df5eab32f593c2744d35cf647">ARM_CAN_MessageRead</a>.</p>
484 <p><b>Example:</b> </p><div class="fragment"><div class="line">status = ptrCAN->ObjectSetFilter(0, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75aa734058b50573de3b0cc49311997806b">ARM_CAN_FILTER_ID_EXACT_ADD</a>, <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0x12345678U), 0U);</div>
485 <div class="line"><span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) ... <span class="comment">// error handling</span></div>
486 <div class="line">status = ptrCAN->ObjectConfigure(0, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0a396d7a6cd2353e1a2936405ace6417f5">ARM_CAN_OBJ_TX_RTR_RX_DATA</a>);</div>
487 <div class="line"><span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) ... <span class="comment">// error handling</span></div>
488 <div class="line">memset(&tx_msg_info, 0, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a>)); <span class="comment">// Clear transmit message structure</span></div>
489 <div class="line">tx_msg_info.<a class="code hl_variable" href="group__can__interface__gr.html#abaabdc509cdaba7df9f56c6c76f3ae19">id</a> = <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0x12345678U); <span class="comment">// Set ID of message</span></div>
490 <div class="line">tx_msg_info.<a class="code hl_variable" href="group__can__interface__gr.html#a1f32fc9e5d3b33babf5905140e7a53af">rtr</a> = 1; <span class="comment">// Set RTR flag of message to send RTR</span></div>
491 <div class="line">tx_msg_info.<a class="code hl_variable" href="group__can__interface__gr.html#a811fbb0cb2c2263b1a7440a7e9d78239">dlc</a> = 1; <span class="comment">// Set data length code of message to 1 to request 1 data byte</span></div>
492 <div class="line">ptrCAN->MesageSend(0, &tx_msg_info, 0, 0); <span class="comment">// Send RTR</span></div>
493 <div class="line"> </div>
494 <div class="line"><span class="comment">// Wait for ARM_CAN_EVENT_RECEIVE</span></div>
495 <div class="line">ptrCAN->MessageRead(0, &rx_msg_info, data_buf, 8); <span class="comment">// Read received message</span></div>
496 <div class="ttc" id="aDriver__CAN_8h_html_gaa9488554de0575bc821c9f65213c4cd0a396d7a6cd2353e1a2936405ace6417f5"><div class="ttname"><a href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0a396d7a6cd2353e1a2936405ace6417f5">ARM_CAN_OBJ_TX_RTR_RX_DATA</a></div><div class="ttdeci">@ ARM_CAN_OBJ_TX_RTR_RX_DATA</div><div class="ttdoc">CAN object that transmits RTR and automatically receives Data Frame.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:105</div></div>
497 <div class="ttc" id="agroup__can__interface__gr_html_a1f32fc9e5d3b33babf5905140e7a53af"><div class="ttname"><a href="group__can__interface__gr.html#a1f32fc9e5d3b33babf5905140e7a53af">ARM_CAN_MSG_INFO::rtr</a></div><div class="ttdeci">uint32_t rtr</div><div class="ttdoc">Remote transmission request frame.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:145</div></div>
498 <div class="ttc" id="agroup__can__interface__gr_html_a811fbb0cb2c2263b1a7440a7e9d78239"><div class="ttname"><a href="group__can__interface__gr.html#a811fbb0cb2c2263b1a7440a7e9d78239">ARM_CAN_MSG_INFO::dlc</a></div><div class="ttdeci">uint32_t dlc</div><div class="ttdoc">Data length code.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:149</div></div>
499 </div><!-- fragment --> <hr/><h2 class="groupheader">Data Structure Documentation</h2>
500 <a name="structARM__DRIVER__CAN" id="structARM__DRIVER__CAN"></a>
501 <h2 class="memtitle"><span class="permalink"><a href="#structARM__DRIVER__CAN">◆ </a></span>ARM_DRIVER_CAN</h2>
503 <div class="memitem">
504 <div class="memproto">
505 <table class="memname">
507 <td class="memname">struct ARM_DRIVER_CAN</td>
510 </div><div class="memdoc">
511 <div class="textblock"><p>Access structure of the CAN Driver. </p>
512 <p>The functions of the CAN are accessed by function pointers exposed by this structure. Refer to <a class="el" href="theoryOperation.html#DriverFunctions">Common Driver Functions</a> for overview information.</p>
513 <p>Each instance of a CAN provides such an access structure. The instance is identified by a postfix number in the symbol name of the access structure, for example:</p><ul>
514 <li><b>Driver_CAN0</b> is the name of the access struct of the first instance (no. 0).</li>
515 <li><b>Driver_CAN1</b> is the name of the access struct of the second instance (no. 1).</li>
517 <p>A configuration setting in the middleware allows you to connect the middleware to a specific driver instance <b>Driver_CAN<em>n</em></b>. </p>
518 </div><table class="memberdecls">
519 <tr><td colspan="2"><h3>Data Fields</h3></td></tr>
520 <tr class="memitem:a30afd9cb3113c037b5f1926f5ef93b59"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a>(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#a30afd9cb3113c037b5f1926f5ef93b59">GetVersion</a> )(void)</td></tr>
521 <tr class="memdesc:a30afd9cb3113c037b5f1926f5ef93b59"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#ga4256d5b23ffcb27759a05f8e6b854f13">ARM_CAN_GetVersion</a> : Get driver version. <br /></td></tr>
522 <tr class="separator:a30afd9cb3113c037b5f1926f5ef93b59"><td class="memSeparator" colspan="2"> </td></tr>
523 <tr class="memitem:ab6594713d03552b9b540a52aad345af9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__can__interface__gr.html#structARM__CAN__CAPABILITIES">ARM_CAN_CAPABILITIES</a>(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ab6594713d03552b9b540a52aad345af9">GetCapabilities</a> )(void)</td></tr>
524 <tr class="memdesc:ab6594713d03552b9b540a52aad345af9"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#ga35f21cabe1637b1be964024a8f77721c">ARM_CAN_GetCapabilities</a> : Get driver capabilities. <br /></td></tr>
525 <tr class="separator:ab6594713d03552b9b540a52aad345af9"><td class="memSeparator" colspan="2"> </td></tr>
526 <tr class="memitem:acd9f79564764d51a661c7efc97c13eb2"><td class="memItemLeft" align="right" valign="top">int32_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#acd9f79564764d51a661c7efc97c13eb2">Initialize</a> )(<a class="el" href="group__can__interface__gr.html#gaac07b9fdf614bf439414f5417aaa376e">ARM_CAN_SignalUnitEvent_t</a> cb_unit_event, <a class="el" href="group__can__interface__gr.html#ga7ceceac3e9aa0981c5cacfab88efb4eb">ARM_CAN_SignalObjectEvent_t</a> cb_object_event)</td></tr>
527 <tr class="memdesc:acd9f79564764d51a661c7efc97c13eb2"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#gaa72ceb25ba67e279d7432404632deb44">ARM_CAN_Initialize</a> : Initialize CAN interface. <br /></td></tr>
528 <tr class="separator:acd9f79564764d51a661c7efc97c13eb2"><td class="memSeparator" colspan="2"> </td></tr>
529 <tr class="memitem:a5ce2b3d7a3a07099bf07d1eb253e92e3"><td class="memItemLeft" align="right" valign="top">int32_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#a5ce2b3d7a3a07099bf07d1eb253e92e3">Uninitialize</a> )(void)</td></tr>
530 <tr class="memdesc:a5ce2b3d7a3a07099bf07d1eb253e92e3"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#ga1e3e364b64f2ab277399e3279cce5ef8">ARM_CAN_Uninitialize</a> : De-initialize CAN interface. <br /></td></tr>
531 <tr class="separator:a5ce2b3d7a3a07099bf07d1eb253e92e3"><td class="memSeparator" colspan="2"> </td></tr>
532 <tr class="memitem:a24ebae5c6011631f76027f9a16eaf5ce"><td class="memItemLeft" align="right" valign="top">int32_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#a24ebae5c6011631f76027f9a16eaf5ce">PowerControl</a> )(<a class="el" href="group__common__drv__gr.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5">ARM_POWER_STATE</a> state)</td></tr>
533 <tr class="memdesc:a24ebae5c6011631f76027f9a16eaf5ce"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#ga6f634f126ac97daef2f3115aa7bfed7c">ARM_CAN_PowerControl</a> : Control CAN interface power. <br /></td></tr>
534 <tr class="separator:a24ebae5c6011631f76027f9a16eaf5ce"><td class="memSeparator" colspan="2"> </td></tr>
535 <tr class="memitem:a7d3bafcb8f0f156af02d2eac84322c87"><td class="memItemLeft" align="right" valign="top">uint32_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#a7d3bafcb8f0f156af02d2eac84322c87">GetClock</a> )(void)</td></tr>
536 <tr class="memdesc:a7d3bafcb8f0f156af02d2eac84322c87"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#ga1fe6cc207415de604975ae251e269361">ARM_CAN_GetClock</a> : Retrieve CAN base clock frequency. <br /></td></tr>
537 <tr class="separator:a7d3bafcb8f0f156af02d2eac84322c87"><td class="memSeparator" colspan="2"> </td></tr>
538 <tr class="memitem:a60f8fba5d305d66cbf96676fc7dca2c9"><td class="memItemLeft" align="right" valign="top">int32_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#a60f8fba5d305d66cbf96676fc7dca2c9">SetBitrate</a> )(<a class="el" href="group__can__timeseg__ctrls.html#ga11c12020b81a63a73a8b53e96a7e3dea">ARM_CAN_BITRATE_SELECT</a> select, uint32_t bitrate, uint32_t bit_segments)</td></tr>
539 <tr class="memdesc:a60f8fba5d305d66cbf96676fc7dca2c9"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#ga88bb27a8525503a250cca7a2c4a5d07a">ARM_CAN_SetBitrate</a> : Set bitrate for CAN interface. <br /></td></tr>
540 <tr class="separator:a60f8fba5d305d66cbf96676fc7dca2c9"><td class="memSeparator" colspan="2"> </td></tr>
541 <tr class="memitem:af7e70589e135fa60323486c7edca766a"><td class="memItemLeft" align="right" valign="top">int32_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#af7e70589e135fa60323486c7edca766a">SetMode</a> )(<a class="el" href="group__can__bus__mode__ctrls.html#gabbca99c46d478bcf822eee71cdf75dcd">ARM_CAN_MODE</a> mode)</td></tr>
542 <tr class="memdesc:af7e70589e135fa60323486c7edca766a"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#ga28226a6e223f9b95b4dafb7c2f48a855">ARM_CAN_SetMode</a> : Set operating mode for CAN interface. <br /></td></tr>
543 <tr class="separator:af7e70589e135fa60323486c7edca766a"><td class="memSeparator" colspan="2"> </td></tr>
544 <tr class="memitem:a4527b64b455de3ff2c365c0de0e3920b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">ARM_CAN_OBJ_CAPABILITIES</a>(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#a4527b64b455de3ff2c365c0de0e3920b">ObjectGetCapabilities</a> )(uint32_t obj_idx)</td></tr>
545 <tr class="memdesc:a4527b64b455de3ff2c365c0de0e3920b"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#ga45ab314f5121cf5a1b32d9adc600e0f7">ARM_CAN_ObjectGetCapabilities</a> : Retrieve capabilities of an object. <br /></td></tr>
546 <tr class="separator:a4527b64b455de3ff2c365c0de0e3920b"><td class="memSeparator" colspan="2"> </td></tr>
547 <tr class="memitem:a7cfe0fa1e318fba603a20b82f08aaf63"><td class="memItemLeft" align="right" valign="top">int32_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#a7cfe0fa1e318fba603a20b82f08aaf63">ObjectSetFilter</a> )(uint32_t obj_idx, <a class="el" href="group__can__filter__operation__ctrls.html#gacb04d0f8b3969ee69362ff2b62941d75">ARM_CAN_FILTER_OPERATION</a> operation, uint32_t id, uint32_t arg)</td></tr>
548 <tr class="memdesc:a7cfe0fa1e318fba603a20b82f08aaf63"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#ga4f9bc7088704483388e14872c9d5385d">ARM_CAN_ObjectSetFilter</a> : Add or remove filter for message reception. <br /></td></tr>
549 <tr class="separator:a7cfe0fa1e318fba603a20b82f08aaf63"><td class="memSeparator" colspan="2"> </td></tr>
550 <tr class="memitem:a03a4fb159ed5ab7accb788559fdfb846"><td class="memItemLeft" align="right" valign="top">int32_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#a03a4fb159ed5ab7accb788559fdfb846">ObjectConfigure</a> )(uint32_t obj_idx, <a class="el" href="group__can__obj__config__ctrls.html#gaa9488554de0575bc821c9f65213c4cd0">ARM_CAN_OBJ_CONFIG</a> obj_cfg)</td></tr>
551 <tr class="memdesc:a03a4fb159ed5ab7accb788559fdfb846"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#ga00ec0715f6755a49dae5b60dca182630">ARM_CAN_ObjectConfigure</a> : Configure object. <br /></td></tr>
552 <tr class="separator:a03a4fb159ed5ab7accb788559fdfb846"><td class="memSeparator" colspan="2"> </td></tr>
553 <tr class="memitem:ad4b8361177ec7f79e76ec5ffe5e8054b"><td class="memItemLeft" align="right" valign="top">int32_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#ad4b8361177ec7f79e76ec5ffe5e8054b">MessageSend</a> )(uint32_t obj_idx, <a class="el" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a> *msg_info, const uint8_t *data, uint8_t size)</td></tr>
554 <tr class="memdesc:ad4b8361177ec7f79e76ec5ffe5e8054b"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a> : Send message on CAN bus. <br /></td></tr>
555 <tr class="separator:ad4b8361177ec7f79e76ec5ffe5e8054b"><td class="memSeparator" colspan="2"> </td></tr>
556 <tr class="memitem:a2f9984f08077f75874658d3261c88870"><td class="memItemLeft" align="right" valign="top">int32_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#a2f9984f08077f75874658d3261c88870">MessageRead</a> )(uint32_t obj_idx, <a class="el" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a> *msg_info, uint8_t *data, uint8_t size)</td></tr>
557 <tr class="memdesc:a2f9984f08077f75874658d3261c88870"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#gafc37084df5eab32f593c2744d35cf647">ARM_CAN_MessageRead</a> : Read message received on CAN bus. <br /></td></tr>
558 <tr class="separator:a2f9984f08077f75874658d3261c88870"><td class="memSeparator" colspan="2"> </td></tr>
559 <tr class="memitem:a5e96d73d3a3c366aba50bf5304edb029"><td class="memItemLeft" align="right" valign="top">int32_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#a5e96d73d3a3c366aba50bf5304edb029">Control</a> )(uint32_t control, uint32_t arg)</td></tr>
560 <tr class="memdesc:a5e96d73d3a3c366aba50bf5304edb029"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#ga8d9f0c5f03a8a81ab062b5aa57e5dea4">ARM_CAN_Control</a> : Control CAN interface. <br /></td></tr>
561 <tr class="separator:a5e96d73d3a3c366aba50bf5304edb029"><td class="memSeparator" colspan="2"> </td></tr>
562 <tr class="memitem:a1e6fcbdf6364ae9e01095b0fbdfcaa30"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__can__interface__gr.html#structARM__CAN__STATUS">ARM_CAN_STATUS</a>(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__can__interface__gr.html#a1e6fcbdf6364ae9e01095b0fbdfcaa30">GetStatus</a> )(void)</td></tr>
563 <tr class="memdesc:a1e6fcbdf6364ae9e01095b0fbdfcaa30"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to <a class="el" href="group__can__interface__gr.html#ga676d6b567fc4ab3d44f5d7a50ec9419c">ARM_CAN_GetStatus</a> : Get CAN status. <br /></td></tr>
564 <tr class="separator:a1e6fcbdf6364ae9e01095b0fbdfcaa30"><td class="memSeparator" colspan="2"> </td></tr>
566 <h4 class="groupheader">Field Documentation</h4>
567 <a id="a30afd9cb3113c037b5f1926f5ef93b59" name="a30afd9cb3113c037b5f1926f5ef93b59"></a>
568 <h2 class="memtitle"><span class="permalink"><a href="#a30afd9cb3113c037b5f1926f5ef93b59">◆ </a></span>GetVersion</h2>
570 <div class="memitem">
571 <div class="memproto">
572 <table class="memname">
574 <td class="memname"><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a>(* GetVersion) (void)</td>
577 </div><div class="memdoc">
579 <p>Pointer to <a class="el" href="group__can__interface__gr.html#ga4256d5b23ffcb27759a05f8e6b854f13">ARM_CAN_GetVersion</a> : Get driver version. </p>
583 <a id="ab6594713d03552b9b540a52aad345af9" name="ab6594713d03552b9b540a52aad345af9"></a>
584 <h2 class="memtitle"><span class="permalink"><a href="#ab6594713d03552b9b540a52aad345af9">◆ </a></span>GetCapabilities</h2>
586 <div class="memitem">
587 <div class="memproto">
588 <table class="memname">
590 <td class="memname"><a class="el" href="group__can__interface__gr.html#structARM__CAN__CAPABILITIES">ARM_CAN_CAPABILITIES</a>(* GetCapabilities) (void)</td>
593 </div><div class="memdoc">
595 <p>Pointer to <a class="el" href="group__can__interface__gr.html#ga35f21cabe1637b1be964024a8f77721c">ARM_CAN_GetCapabilities</a> : Get driver capabilities. </p>
599 <a id="acd9f79564764d51a661c7efc97c13eb2" name="acd9f79564764d51a661c7efc97c13eb2"></a>
600 <h2 class="memtitle"><span class="permalink"><a href="#acd9f79564764d51a661c7efc97c13eb2">◆ </a></span>Initialize</h2>
602 <div class="memitem">
603 <div class="memproto">
604 <table class="memname">
606 <td class="memname">int32_t(* Initialize) (<a class="el" href="group__can__interface__gr.html#gaac07b9fdf614bf439414f5417aaa376e">ARM_CAN_SignalUnitEvent_t</a> cb_unit_event, <a class="el" href="group__can__interface__gr.html#ga7ceceac3e9aa0981c5cacfab88efb4eb">ARM_CAN_SignalObjectEvent_t</a> cb_object_event)</td>
609 </div><div class="memdoc">
611 <p>Pointer to <a class="el" href="group__can__interface__gr.html#gaa72ceb25ba67e279d7432404632deb44">ARM_CAN_Initialize</a> : Initialize CAN interface. </p>
615 <a id="a5ce2b3d7a3a07099bf07d1eb253e92e3" name="a5ce2b3d7a3a07099bf07d1eb253e92e3"></a>
616 <h2 class="memtitle"><span class="permalink"><a href="#a5ce2b3d7a3a07099bf07d1eb253e92e3">◆ </a></span>Uninitialize</h2>
618 <div class="memitem">
619 <div class="memproto">
620 <table class="memname">
622 <td class="memname">int32_t(* Uninitialize) (void)</td>
625 </div><div class="memdoc">
627 <p>Pointer to <a class="el" href="group__can__interface__gr.html#ga1e3e364b64f2ab277399e3279cce5ef8">ARM_CAN_Uninitialize</a> : De-initialize CAN interface. </p>
631 <a id="a24ebae5c6011631f76027f9a16eaf5ce" name="a24ebae5c6011631f76027f9a16eaf5ce"></a>
632 <h2 class="memtitle"><span class="permalink"><a href="#a24ebae5c6011631f76027f9a16eaf5ce">◆ </a></span>PowerControl</h2>
634 <div class="memitem">
635 <div class="memproto">
636 <table class="memname">
638 <td class="memname">int32_t(* PowerControl) (<a class="el" href="group__common__drv__gr.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5">ARM_POWER_STATE</a> state)</td>
641 </div><div class="memdoc">
643 <p>Pointer to <a class="el" href="group__can__interface__gr.html#ga6f634f126ac97daef2f3115aa7bfed7c">ARM_CAN_PowerControl</a> : Control CAN interface power. </p>
647 <a id="a7d3bafcb8f0f156af02d2eac84322c87" name="a7d3bafcb8f0f156af02d2eac84322c87"></a>
648 <h2 class="memtitle"><span class="permalink"><a href="#a7d3bafcb8f0f156af02d2eac84322c87">◆ </a></span>GetClock</h2>
650 <div class="memitem">
651 <div class="memproto">
652 <table class="memname">
654 <td class="memname">uint32_t(* GetClock) (void)</td>
657 </div><div class="memdoc">
659 <p>Pointer to <a class="el" href="group__can__interface__gr.html#ga1fe6cc207415de604975ae251e269361">ARM_CAN_GetClock</a> : Retrieve CAN base clock frequency. </p>
663 <a id="a60f8fba5d305d66cbf96676fc7dca2c9" name="a60f8fba5d305d66cbf96676fc7dca2c9"></a>
664 <h2 class="memtitle"><span class="permalink"><a href="#a60f8fba5d305d66cbf96676fc7dca2c9">◆ </a></span>SetBitrate</h2>
666 <div class="memitem">
667 <div class="memproto">
668 <table class="memname">
670 <td class="memname">int32_t(* SetBitrate) (<a class="el" href="group__can__timeseg__ctrls.html#ga11c12020b81a63a73a8b53e96a7e3dea">ARM_CAN_BITRATE_SELECT</a> select, uint32_t bitrate, uint32_t bit_segments)</td>
673 </div><div class="memdoc">
675 <p>Pointer to <a class="el" href="group__can__interface__gr.html#ga88bb27a8525503a250cca7a2c4a5d07a">ARM_CAN_SetBitrate</a> : Set bitrate for CAN interface. </p>
679 <a id="af7e70589e135fa60323486c7edca766a" name="af7e70589e135fa60323486c7edca766a"></a>
680 <h2 class="memtitle"><span class="permalink"><a href="#af7e70589e135fa60323486c7edca766a">◆ </a></span>SetMode</h2>
682 <div class="memitem">
683 <div class="memproto">
684 <table class="memname">
686 <td class="memname">int32_t(* SetMode) (<a class="el" href="group__can__bus__mode__ctrls.html#gabbca99c46d478bcf822eee71cdf75dcd">ARM_CAN_MODE</a> mode)</td>
689 </div><div class="memdoc">
691 <p>Pointer to <a class="el" href="group__can__interface__gr.html#ga28226a6e223f9b95b4dafb7c2f48a855">ARM_CAN_SetMode</a> : Set operating mode for CAN interface. </p>
695 <a id="a4527b64b455de3ff2c365c0de0e3920b" name="a4527b64b455de3ff2c365c0de0e3920b"></a>
696 <h2 class="memtitle"><span class="permalink"><a href="#a4527b64b455de3ff2c365c0de0e3920b">◆ </a></span>ObjectGetCapabilities</h2>
698 <div class="memitem">
699 <div class="memproto">
700 <table class="memname">
702 <td class="memname"><a class="el" href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">ARM_CAN_OBJ_CAPABILITIES</a>(* ObjectGetCapabilities) (uint32_t obj_idx)</td>
705 </div><div class="memdoc">
707 <p>Pointer to <a class="el" href="group__can__interface__gr.html#ga45ab314f5121cf5a1b32d9adc600e0f7">ARM_CAN_ObjectGetCapabilities</a> : Retrieve capabilities of an object. </p>
711 <a id="a7cfe0fa1e318fba603a20b82f08aaf63" name="a7cfe0fa1e318fba603a20b82f08aaf63"></a>
712 <h2 class="memtitle"><span class="permalink"><a href="#a7cfe0fa1e318fba603a20b82f08aaf63">◆ </a></span>ObjectSetFilter</h2>
714 <div class="memitem">
715 <div class="memproto">
716 <table class="memname">
718 <td class="memname">int32_t(* ObjectSetFilter) (uint32_t obj_idx, <a class="el" href="group__can__filter__operation__ctrls.html#gacb04d0f8b3969ee69362ff2b62941d75">ARM_CAN_FILTER_OPERATION</a> operation, uint32_t id, uint32_t arg)</td>
721 </div><div class="memdoc">
723 <p>Pointer to <a class="el" href="group__can__interface__gr.html#ga4f9bc7088704483388e14872c9d5385d">ARM_CAN_ObjectSetFilter</a> : Add or remove filter for message reception. </p>
727 <a id="a03a4fb159ed5ab7accb788559fdfb846" name="a03a4fb159ed5ab7accb788559fdfb846"></a>
728 <h2 class="memtitle"><span class="permalink"><a href="#a03a4fb159ed5ab7accb788559fdfb846">◆ </a></span>ObjectConfigure</h2>
730 <div class="memitem">
731 <div class="memproto">
732 <table class="memname">
734 <td class="memname">int32_t(* ObjectConfigure) (uint32_t obj_idx, <a class="el" href="group__can__obj__config__ctrls.html#gaa9488554de0575bc821c9f65213c4cd0">ARM_CAN_OBJ_CONFIG</a> obj_cfg)</td>
737 </div><div class="memdoc">
739 <p>Pointer to <a class="el" href="group__can__interface__gr.html#ga00ec0715f6755a49dae5b60dca182630">ARM_CAN_ObjectConfigure</a> : Configure object. </p>
743 <a id="ad4b8361177ec7f79e76ec5ffe5e8054b" name="ad4b8361177ec7f79e76ec5ffe5e8054b"></a>
744 <h2 class="memtitle"><span class="permalink"><a href="#ad4b8361177ec7f79e76ec5ffe5e8054b">◆ </a></span>MessageSend</h2>
746 <div class="memitem">
747 <div class="memproto">
748 <table class="memname">
750 <td class="memname">int32_t(* MessageSend) (uint32_t obj_idx, <a class="el" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a> *msg_info, const uint8_t *data, uint8_t size)</td>
753 </div><div class="memdoc">
755 <p>Pointer to <a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a> : Send message on CAN bus. </p>
759 <a id="a2f9984f08077f75874658d3261c88870" name="a2f9984f08077f75874658d3261c88870"></a>
760 <h2 class="memtitle"><span class="permalink"><a href="#a2f9984f08077f75874658d3261c88870">◆ </a></span>MessageRead</h2>
762 <div class="memitem">
763 <div class="memproto">
764 <table class="memname">
766 <td class="memname">int32_t(* MessageRead) (uint32_t obj_idx, <a class="el" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a> *msg_info, uint8_t *data, uint8_t size)</td>
769 </div><div class="memdoc">
771 <p>Pointer to <a class="el" href="group__can__interface__gr.html#gafc37084df5eab32f593c2744d35cf647">ARM_CAN_MessageRead</a> : Read message received on CAN bus. </p>
775 <a id="a5e96d73d3a3c366aba50bf5304edb029" name="a5e96d73d3a3c366aba50bf5304edb029"></a>
776 <h2 class="memtitle"><span class="permalink"><a href="#a5e96d73d3a3c366aba50bf5304edb029">◆ </a></span>Control</h2>
778 <div class="memitem">
779 <div class="memproto">
780 <table class="memname">
782 <td class="memname">int32_t(* Control) (uint32_t control, uint32_t arg)</td>
785 </div><div class="memdoc">
787 <p>Pointer to <a class="el" href="group__can__interface__gr.html#ga8d9f0c5f03a8a81ab062b5aa57e5dea4">ARM_CAN_Control</a> : Control CAN interface. </p>
791 <a id="a1e6fcbdf6364ae9e01095b0fbdfcaa30" name="a1e6fcbdf6364ae9e01095b0fbdfcaa30"></a>
792 <h2 class="memtitle"><span class="permalink"><a href="#a1e6fcbdf6364ae9e01095b0fbdfcaa30">◆ </a></span>GetStatus</h2>
794 <div class="memitem">
795 <div class="memproto">
796 <table class="memname">
798 <td class="memname"><a class="el" href="group__can__interface__gr.html#structARM__CAN__STATUS">ARM_CAN_STATUS</a>(* GetStatus) (void)</td>
801 </div><div class="memdoc">
803 <p>Pointer to <a class="el" href="group__can__interface__gr.html#ga676d6b567fc4ab3d44f5d7a50ec9419c">ARM_CAN_GetStatus</a> : Get CAN status. </p>
810 <a name="structARM__CAN__CAPABILITIES" id="structARM__CAN__CAPABILITIES"></a>
811 <h2 class="memtitle"><span class="permalink"><a href="#structARM__CAN__CAPABILITIES">◆ </a></span>ARM_CAN_CAPABILITIES</h2>
813 <div class="memitem">
814 <div class="memproto">
815 <table class="memname">
817 <td class="memname">struct ARM_CAN_CAPABILITIES</td>
820 </div><div class="memdoc">
821 <div class="textblock"><p>CAN Device Driver Capabilities. </p>
822 <p>A CAN driver can be implemented with different capabilities encoded in the data fields of this structure.</p>
823 <p><b>Returned by:</b></p><ul>
824 <li><a class="el" href="group__can__interface__gr.html#ga35f21cabe1637b1be964024a8f77721c">ARM_CAN_GetCapabilities</a></li>
826 <dl class="section see"><dt>See also</dt><dd><a class="el" href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">ARM_CAN_OBJ_CAPABILITIES</a> for information about CAN objects. </dd></dl>
827 </div><table class="fieldtable">
828 <tr><th colspan="3">Data Fields</th></tr>
829 <tr><td class="fieldtype">
830 <a id="a69bd1a164443cf6f501489f4d31f4681" name="a69bd1a164443cf6f501489f4d31f4681"></a>uint32_t</td>
831 <td class="fieldname">
833 <td class="fielddoc">
834 Number of <a class="el" href="group__can__interface__gr.html#can_objects">CAN Message Objects</a> available. </td></tr>
835 <tr><td class="fieldtype">
836 <a id="ae0514834750c7452431717a881471e2b" name="ae0514834750c7452431717a881471e2b"></a>uint32_t</td>
837 <td class="fieldname">
838 reentrant_operation: 1</td>
839 <td class="fielddoc">
840 Support for reentrant calls to <a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a>, <a class="el" href="group__can__interface__gr.html#gafc37084df5eab32f593c2744d35cf647">ARM_CAN_MessageRead</a>, <a class="el" href="group__can__interface__gr.html#ga00ec0715f6755a49dae5b60dca182630">ARM_CAN_ObjectConfigure</a> and abort message sending used by <a class="el" href="group__can__interface__gr.html#ga8d9f0c5f03a8a81ab062b5aa57e5dea4">ARM_CAN_Control</a>. </td></tr>
841 <tr><td class="fieldtype">
842 <a id="a15d22d5906d419ed1a7ca0968be00a04" name="a15d22d5906d419ed1a7ca0968be00a04"></a>uint32_t</td>
843 <td class="fieldname">
845 <td class="fielddoc">
846 Support for CAN with flexible data-rate mode (CAN_FD) (set by <a class="el" href="group__can__interface__gr.html#ga8d9f0c5f03a8a81ab062b5aa57e5dea4">ARM_CAN_Control</a>) </td></tr>
847 <tr><td class="fieldtype">
848 <a id="a93008ac105806db484e78e0582ca118c" name="a93008ac105806db484e78e0582ca118c"></a>uint32_t</td>
849 <td class="fieldname">
850 restricted_mode: 1</td>
851 <td class="fielddoc">
852 Support for restricted operation mode (set by <a class="el" href="group__can__interface__gr.html#ga28226a6e223f9b95b4dafb7c2f48a855">ARM_CAN_SetMode</a>) </td></tr>
853 <tr><td class="fieldtype">
854 <a id="a176f42e68d9cba86b3594c40044b86c6" name="a176f42e68d9cba86b3594c40044b86c6"></a>uint32_t</td>
855 <td class="fieldname">
857 <td class="fielddoc">
858 Support for bus monitoring mode (set by <a class="el" href="group__can__interface__gr.html#ga28226a6e223f9b95b4dafb7c2f48a855">ARM_CAN_SetMode</a>) </td></tr>
859 <tr><td class="fieldtype">
860 <a id="af19cdbb26d3496ed7dd63a59a7c7711f" name="af19cdbb26d3496ed7dd63a59a7c7711f"></a>uint32_t</td>
861 <td class="fieldname">
862 internal_loopback: 1</td>
863 <td class="fielddoc">
864 Support for internal loopback mode (set by <a class="el" href="group__can__interface__gr.html#ga28226a6e223f9b95b4dafb7c2f48a855">ARM_CAN_SetMode</a>) </td></tr>
865 <tr><td class="fieldtype">
866 <a id="a2b76df7e4bfbdd9866cc906415e626c9" name="a2b76df7e4bfbdd9866cc906415e626c9"></a>uint32_t</td>
867 <td class="fieldname">
868 external_loopback: 1</td>
869 <td class="fielddoc">
870 Support for external loopback mode (set by <a class="el" href="group__can__interface__gr.html#ga28226a6e223f9b95b4dafb7c2f48a855">ARM_CAN_SetMode</a>) </td></tr>
871 <tr><td class="fieldtype">
872 <a id="aa43c4c21b173ada1b6b7568956f0d650" name="aa43c4c21b173ada1b6b7568956f0d650"></a>uint32_t</td>
873 <td class="fieldname">
875 <td class="fielddoc">
876 Reserved (must be zero) </td></tr>
881 <a name="structARM__CAN__STATUS" id="structARM__CAN__STATUS"></a>
882 <h2 class="memtitle"><span class="permalink"><a href="#structARM__CAN__STATUS">◆ </a></span>ARM_CAN_STATUS</h2>
884 <div class="memitem">
885 <div class="memproto">
886 <table class="memname">
888 <td class="memname">struct ARM_CAN_STATUS</td>
891 </div><div class="memdoc">
892 <div class="textblock"><p>CAN Status. </p>
893 <p>Structure with information about the status of the CAN unit state and errors. The data fields encode the unit bus state, last error code, transmitter error count, and receiver error count.</p>
894 <p><b>Returned by:</b></p><ul>
895 <li><a class="el" href="group__can__interface__gr.html#ga676d6b567fc4ab3d44f5d7a50ec9419c">ARM_CAN_GetStatus</a> </li>
897 </div><table class="fieldtable">
898 <tr><th colspan="3">Data Fields</th></tr>
899 <tr><td class="fieldtype">
900 <a id="a96ec94acab56690b3801e3c5fbd09fa2" name="a96ec94acab56690b3801e3c5fbd09fa2"></a>uint32_t</td>
901 <td class="fieldname">
903 <td class="fielddoc">
904 Unit bus state. </td></tr>
905 <tr><td class="fieldtype">
906 <a id="a2171ea8dff5e4b54e84728aa134854b6" name="a2171ea8dff5e4b54e84728aa134854b6"></a>uint32_t</td>
907 <td class="fieldname">
908 last_error_code: 4</td>
909 <td class="fielddoc">
910 Last error code. </td></tr>
911 <tr><td class="fieldtype">
912 <a id="a8941505f6f3ebd69825c4382184c580f" name="a8941505f6f3ebd69825c4382184c580f"></a>uint32_t</td>
913 <td class="fieldname">
914 tx_error_count: 8</td>
915 <td class="fielddoc">
916 Transmitter error count. </td></tr>
917 <tr><td class="fieldtype">
918 <a id="ab7e8b863b379b786ad1af935aa3ef2e8" name="ab7e8b863b379b786ad1af935aa3ef2e8"></a>uint32_t</td>
919 <td class="fieldname">
920 rx_error_count: 8</td>
921 <td class="fielddoc">
922 Receiver error count. </td></tr>
923 <tr><td class="fieldtype">
924 <a id="aa43c4c21b173ada1b6b7568956f0d650" name="aa43c4c21b173ada1b6b7568956f0d650"></a>uint32_t</td>
925 <td class="fieldname">
927 <td class="fielddoc">
933 <a name="structARM__CAN__MSG__INFO" id="structARM__CAN__MSG__INFO"></a>
934 <h2 class="memtitle"><span class="permalink"><a href="#structARM__CAN__MSG__INFO">◆ </a></span>ARM_CAN_MSG_INFO</h2>
936 <div class="memitem">
937 <div class="memproto">
938 <table class="memname">
940 <td class="memname">struct ARM_CAN_MSG_INFO</td>
943 </div><div class="memdoc">
944 <div class="textblock"><p>CAN Message Information. </p>
945 <p>Structure with information about the CAN message.</p>
946 <p>In CAN mode, the following <a class="el" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a> data fields are ignored: <em>edl</em>, <em>brs</em>, <em>esi</em>. <br />
947 In CAN FD mode, the following <a class="el" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a> data field is ignored: <em>rtr</em>.</p>
948 <p><b>Parameter for:</b></p><ul>
949 <li><a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a></li>
950 <li><a class="el" href="group__can__interface__gr.html#gafc37084df5eab32f593c2744d35cf647">ARM_CAN_MessageRead</a></li>
952 <dl class="section see"><dt>See also</dt><dd><a class="el" href="group__can__interface__gr.html#can_filtering">CAN Message Filtering</a> </dd>
954 <a class="el" href="group__can__interface__gr.html#Remote_Frame">Remote Frame</a> </dd></dl>
955 </div><table class="fieldtable">
956 <tr><th colspan="3">Data Fields</th></tr>
957 <tr><td class="fieldtype">
958 <a id="abaabdc509cdaba7df9f56c6c76f3ae19" name="abaabdc509cdaba7df9f56c6c76f3ae19"></a>uint32_t</td>
959 <td class="fieldname">
961 <td class="fielddoc">
962 CAN identifier with frame format specifier (bit 31) </td></tr>
963 <tr><td class="fieldtype">
964 <a id="a1f32fc9e5d3b33babf5905140e7a53af" name="a1f32fc9e5d3b33babf5905140e7a53af"></a>uint32_t</td>
965 <td class="fieldname">
967 <td class="fielddoc">
968 Remote transmission request frame. </td></tr>
969 <tr><td class="fieldtype">
970 <a id="ab6883964c9d4bdf60616684e8d2459df" name="ab6883964c9d4bdf60616684e8d2459df"></a>uint32_t</td>
971 <td class="fieldname">
973 <td class="fielddoc">
974 Flexible data-rate format extended data length. </td></tr>
975 <tr><td class="fieldtype">
976 <a id="a3539c043c5868c59f76c736fe2bcadf4" name="a3539c043c5868c59f76c736fe2bcadf4"></a>uint32_t</td>
977 <td class="fieldname">
979 <td class="fielddoc">
980 Flexible data-rate format with bitrate switch. </td></tr>
981 <tr><td class="fieldtype">
982 <a id="ada78e3124de6adf5a5d212f9ebc4bbe0" name="ada78e3124de6adf5a5d212f9ebc4bbe0"></a>uint32_t</td>
983 <td class="fieldname">
985 <td class="fielddoc">
986 Flexible data-rate format error state indicator. </td></tr>
987 <tr><td class="fieldtype">
988 <a id="a811fbb0cb2c2263b1a7440a7e9d78239" name="a811fbb0cb2c2263b1a7440a7e9d78239"></a>uint32_t</td>
989 <td class="fieldname">
991 <td class="fielddoc">
992 Data length code. </td></tr>
993 <tr><td class="fieldtype">
994 <a id="aa43c4c21b173ada1b6b7568956f0d650" name="aa43c4c21b173ada1b6b7568956f0d650"></a>uint32_t</td>
995 <td class="fieldname">
997 <td class="fielddoc">
1003 <a name="structARM__CAN__OBJ__CAPABILITIES" id="structARM__CAN__OBJ__CAPABILITIES"></a>
1004 <h2 class="memtitle"><span class="permalink"><a href="#structARM__CAN__OBJ__CAPABILITIES">◆ </a></span>ARM_CAN_OBJ_CAPABILITIES</h2>
1006 <div class="memitem">
1007 <div class="memproto">
1008 <table class="memname">
1010 <td class="memname">struct ARM_CAN_OBJ_CAPABILITIES</td>
1013 </div><div class="memdoc">
1014 <div class="textblock"><p>CAN Object Capabilities. </p>
1015 <p>A CAN object can be implemented with different capabilities encoded in the data fields of this structure.</p>
1016 <p><b>Returned by</b>:</p><ul>
1017 <li><a class="el" href="group__can__interface__gr.html#ga45ab314f5121cf5a1b32d9adc600e0f7">ARM_CAN_ObjectGetCapabilities</a></li>
1019 <dl class="section see"><dt>See also</dt><dd><a class="el" href="group__can__interface__gr.html#ga00ec0715f6755a49dae5b60dca182630">ARM_CAN_ObjectConfigure</a> </dd>
1021 <a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a> </dd>
1023 <a class="el" href="group__can__interface__gr.html#gafc37084df5eab32f593c2744d35cf647">ARM_CAN_MessageRead</a> </dd>
1025 <a class="el" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a> </dd>
1027 <a class="el" href="group__can__interface__gr.html#can_filtering">CAN Message Filtering</a> </dd></dl>
1028 </div><table class="fieldtable">
1029 <tr><th colspan="3">Data Fields</th></tr>
1030 <tr><td class="fieldtype">
1031 <a id="a9706173b2ed538efeb5ee4a952e2272f" name="a9706173b2ed538efeb5ee4a952e2272f"></a>uint32_t</td>
1032 <td class="fieldname">
1034 <td class="fielddoc">
1035 Object supports transmission. </td></tr>
1036 <tr><td class="fieldtype">
1037 <a id="a895532773c3204e1538191f155c7bac8" name="a895532773c3204e1538191f155c7bac8"></a>uint32_t</td>
1038 <td class="fieldname">
1040 <td class="fielddoc">
1041 Object supports reception. </td></tr>
1042 <tr><td class="fieldtype">
1043 <a id="a8a41139926d7c032247458d055071fda" name="a8a41139926d7c032247458d055071fda"></a>uint32_t</td>
1044 <td class="fieldname">
1045 rx_rtr_tx_data: 1</td>
1046 <td class="fielddoc">
1047 Object supports RTR reception and automatic Data Frame transmission. </td></tr>
1048 <tr><td class="fieldtype">
1049 <a id="a1debac19545140bdfe3c5fa8d53f1863" name="a1debac19545140bdfe3c5fa8d53f1863"></a>uint32_t</td>
1050 <td class="fieldname">
1051 tx_rtr_rx_data: 1</td>
1052 <td class="fielddoc">
1053 Object supports RTR transmission and automatic Data Frame reception. </td></tr>
1054 <tr><td class="fieldtype">
1055 <a id="a3662fb9a8fb81212043cadd90da704af" name="a3662fb9a8fb81212043cadd90da704af"></a>uint32_t</td>
1056 <td class="fieldname">
1057 multiple_filters: 1</td>
1058 <td class="fielddoc">
1059 Object allows assignment of multiple filters to it. </td></tr>
1060 <tr><td class="fieldtype">
1061 <a id="a886337af58da4f995529eba228fb9b7a" name="a886337af58da4f995529eba228fb9b7a"></a>uint32_t</td>
1062 <td class="fieldname">
1063 exact_filtering: 1</td>
1064 <td class="fielddoc">
1065 Object supports exact identifier filtering. </td></tr>
1066 <tr><td class="fieldtype">
1067 <a id="a96dcf869f4adc9cec686630082c7c60a" name="a96dcf869f4adc9cec686630082c7c60a"></a>uint32_t</td>
1068 <td class="fieldname">
1069 range_filtering: 1</td>
1070 <td class="fielddoc">
1071 Object supports range identifier filtering. </td></tr>
1072 <tr><td class="fieldtype">
1073 <a id="a2aa0e772d6cb8c30bb76ce1324423464" name="a2aa0e772d6cb8c30bb76ce1324423464"></a>uint32_t</td>
1074 <td class="fieldname">
1075 mask_filtering: 1</td>
1076 <td class="fielddoc">
1077 Object supports mask identifier filtering. </td></tr>
1078 <tr><td class="fieldtype">
1079 <a id="a5a782fc223b0ea5034c6676eaec6f2d4" name="a5a782fc223b0ea5034c6676eaec6f2d4"></a>uint32_t</td>
1080 <td class="fieldname">
1081 message_depth: 8</td>
1082 <td class="fielddoc">
1083 Number of messages buffers (FIFO) for that object. </td></tr>
1084 <tr><td class="fieldtype">
1085 <a id="aa43c4c21b173ada1b6b7568956f0d650" name="aa43c4c21b173ada1b6b7568956f0d650"></a>uint32_t</td>
1086 <td class="fieldname">
1088 <td class="fielddoc">
1089 Reserved (must be zero) </td></tr>
1094 <h2 class="groupheader">Typedef Documentation</h2>
1095 <a id="gaac07b9fdf614bf439414f5417aaa376e" name="gaac07b9fdf614bf439414f5417aaa376e"></a>
1096 <h2 class="memtitle"><span class="permalink"><a href="#gaac07b9fdf614bf439414f5417aaa376e">◆ </a></span>ARM_CAN_SignalUnitEvent_t</h2>
1098 <div class="memitem">
1099 <div class="memproto">
1100 <table class="memname">
1102 <td class="memname">ARM_CAN_SignalUnitEvent_t</td>
1105 </div><div class="memdoc">
1107 <p>Pointer to <a class="el" href="group__can__interface__gr.html#ga38795d1ed135ce3bd87f31ef1596bccf">ARM_CAN_SignalUnitEvent</a> : Signal CAN Unit Event. </p>
1108 <p>Provides the typedef for the callback function <a class="el" href="group__can__interface__gr.html#ga38795d1ed135ce3bd87f31ef1596bccf">ARM_CAN_SignalUnitEvent</a>.</p>
1109 <p><b>Parameter for:</b></p><ul>
1110 <li><a class="el" href="group__can__interface__gr.html#gaa72ceb25ba67e279d7432404632deb44">ARM_CAN_Initialize</a> </li>
1115 <a id="ga7ceceac3e9aa0981c5cacfab88efb4eb" name="ga7ceceac3e9aa0981c5cacfab88efb4eb"></a>
1116 <h2 class="memtitle"><span class="permalink"><a href="#ga7ceceac3e9aa0981c5cacfab88efb4eb">◆ </a></span>ARM_CAN_SignalObjectEvent_t</h2>
1118 <div class="memitem">
1119 <div class="memproto">
1120 <table class="memname">
1122 <td class="memname">ARM_CAN_SignalObjectEvent_t</td>
1125 </div><div class="memdoc">
1127 <p>Pointer to <a class="el" href="group__can__interface__gr.html#gabfcaeac9e2ca25936ba5a29f2d594e7e">ARM_CAN_SignalObjectEvent</a> : Signal CAN Object Event. </p>
1128 <p>Provides the typedef for the callback function <a class="el" href="group__can__interface__gr.html#gabfcaeac9e2ca25936ba5a29f2d594e7e">ARM_CAN_SignalObjectEvent</a>.</p>
1129 <p><b>Parameter for:</b></p><ul>
1130 <li><a class="el" href="group__can__interface__gr.html#gaa72ceb25ba67e279d7432404632deb44">ARM_CAN_Initialize</a> </li>
1135 <h2 class="groupheader">Function Documentation</h2>
1136 <a id="ga4256d5b23ffcb27759a05f8e6b854f13" name="ga4256d5b23ffcb27759a05f8e6b854f13"></a>
1137 <h2 class="memtitle"><span class="permalink"><a href="#ga4256d5b23ffcb27759a05f8e6b854f13">◆ </a></span>ARM_CAN_GetVersion()</h2>
1139 <div class="memitem">
1140 <div class="memproto">
1141 <table class="memname">
1143 <td class="memname"><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a> ARM_CAN_GetVersion </td>
1145 <td class="paramtype">void </td>
1146 <td class="paramname"></td><td>)</td>
1150 </div><div class="memdoc">
1152 <p>Get driver version. </p>
1153 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a></dd></dl>
1154 <p>The function <b>ARM_CAN_GetVersion</b> returns version information of the driver implementation in <a class="el" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a></p><ul>
1155 <li>API version is the version of the CMSIS-Driver specification used to implement this driver.</li>
1156 <li>Driver version is source code version of the actual driver implementation.</li>
1158 <p>Example: </p><div class="fragment"><div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__can__interface__gr.html#structARM__DRIVER__CAN">ARM_DRIVER_CAN</a> Driver_CAN0;</div>
1159 <div class="line"><a class="code hl_struct" href="group__can__interface__gr.html#structARM__DRIVER__CAN">ARM_DRIVER_CAN</a> *drv_info;</div>
1160 <div class="line"> </div>
1161 <div class="line"><span class="keywordtype">void</span> setup_can (<span class="keywordtype">void</span>) {</div>
1162 <div class="line"> <a class="code hl_struct" href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a> version;</div>
1163 <div class="line"> </div>
1164 <div class="line"> drv_info = &Driver_CAN0;</div>
1165 <div class="line"> version = drv_info-><a class="code hl_variable" href="group__can__interface__gr.html#a30afd9cb3113c037b5f1926f5ef93b59">GetVersion</a> ();</div>
1166 <div class="line"> <span class="keywordflow">if</span> (version.<a class="code hl_variable" href="group__common__drv__gr.html#ad180da20fbde1d3dafc074af87c19540">api</a> < 0x10A) { <span class="comment">// requires at minimum API version 1.10 or higher</span></div>
1167 <div class="line"> <span class="comment">// error handling</span></div>
1168 <div class="line"> <span class="keywordflow">return</span>;</div>
1169 <div class="line"> }</div>
1170 <div class="line">}</div>
1171 <div class="ttc" id="agroup__can__interface__gr_html_a30afd9cb3113c037b5f1926f5ef93b59"><div class="ttname"><a href="group__can__interface__gr.html#a30afd9cb3113c037b5f1926f5ef93b59">ARM_DRIVER_CAN::GetVersion</a></div><div class="ttdeci">ARM_DRIVER_VERSION(* GetVersion)(void)</div><div class="ttdoc">Pointer to ARM_CAN_GetVersion : Get driver version.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:353</div></div>
1172 <div class="ttc" id="agroup__common__drv__gr_html_ad180da20fbde1d3dafc074af87c19540"><div class="ttname"><a href="group__common__drv__gr.html#ad180da20fbde1d3dafc074af87c19540">ARM_DRIVER_VERSION::api</a></div><div class="ttdeci">uint16_t api</div><div class="ttdoc">API version.</div><div class="ttdef"><b>Definition:</b> Driver_Common.h:47</div></div>
1173 <div class="ttc" id="agroup__common__drv__gr_html_structARM__DRIVER__VERSION"><div class="ttname"><a href="group__common__drv__gr.html#structARM__DRIVER__VERSION">ARM_DRIVER_VERSION</a></div><div class="ttdoc">Driver Version.</div><div class="ttdef"><b>Definition:</b> Driver_Common.h:46</div></div>
1174 </div><!-- fragment -->
1177 <a id="ga35f21cabe1637b1be964024a8f77721c" name="ga35f21cabe1637b1be964024a8f77721c"></a>
1178 <h2 class="memtitle"><span class="permalink"><a href="#ga35f21cabe1637b1be964024a8f77721c">◆ </a></span>ARM_CAN_GetCapabilities()</h2>
1180 <div class="memitem">
1181 <div class="memproto">
1182 <table class="memname">
1184 <td class="memname"><a class="el" href="group__can__interface__gr.html#structARM__CAN__CAPABILITIES">ARM_CAN_CAPABILITIES</a> ARM_CAN_GetCapabilities </td>
1186 <td class="paramtype">void </td>
1187 <td class="paramname"></td><td>)</td>
1191 </div><div class="memdoc">
1193 <p>Get driver capabilities. </p>
1194 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__can__interface__gr.html#structARM__CAN__CAPABILITIES">ARM_CAN_CAPABILITIES</a></dd></dl>
1195 <p>The function <b>ARM_CAN_GetCapabilities</b> returns information about the capabilities in this driver implementation. The data fields of the structure <a class="el" href="group__can__interface__gr.html#structARM__CAN__CAPABILITIES">ARM_CAN_CAPABILITIES</a> encode various capabilities.</p>
1196 <p>Example: </p><div class="fragment"><div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__can__interface__gr.html#structARM__DRIVER__CAN">ARM_DRIVER_CAN</a> Driver_CAN0;</div>
1197 <div class="line"><a class="code hl_struct" href="group__can__interface__gr.html#structARM__DRIVER__CAN">ARM_DRIVER_CAN</a> *drv_info;</div>
1198 <div class="line"> </div>
1199 <div class="line"><span class="keywordtype">void</span> read_capabilities (<span class="keywordtype">void</span>) {</div>
1200 <div class="line"> <a class="code hl_struct" href="group__can__interface__gr.html#structARM__CAN__CAPABILITIES">ARM_CAN_CAPABILITIES</a> drv_capabilities;</div>
1201 <div class="line"> </div>
1202 <div class="line"> drv_info = &Driver_CAN0;</div>
1203 <div class="line"> drv_capabilities = drv_info-><a class="code hl_variable" href="group__can__interface__gr.html#ab6594713d03552b9b540a52aad345af9">GetCapabilities</a> ();</div>
1204 <div class="line"> <span class="comment">// interrogate capabilities</span></div>
1205 <div class="line"> </div>
1206 <div class="line">}</div>
1207 <div class="ttc" id="agroup__can__interface__gr_html_ab6594713d03552b9b540a52aad345af9"><div class="ttname"><a href="group__can__interface__gr.html#ab6594713d03552b9b540a52aad345af9">ARM_DRIVER_CAN::GetCapabilities</a></div><div class="ttdeci">ARM_CAN_CAPABILITIES(* GetCapabilities)(void)</div><div class="ttdoc">Pointer to ARM_CAN_GetCapabilities : Get driver capabilities.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.h:354</div></div>
1208 </div><!-- fragment -->
1211 <a id="gaa72ceb25ba67e279d7432404632deb44" name="gaa72ceb25ba67e279d7432404632deb44"></a>
1212 <h2 class="memtitle"><span class="permalink"><a href="#gaa72ceb25ba67e279d7432404632deb44">◆ </a></span>ARM_CAN_Initialize()</h2>
1214 <div class="memitem">
1215 <div class="memproto">
1216 <table class="memname">
1218 <td class="memname">int32_t ARM_CAN_Initialize </td>
1220 <td class="paramtype"><a class="el" href="group__can__interface__gr.html#gaac07b9fdf614bf439414f5417aaa376e">ARM_CAN_SignalUnitEvent_t</a> </td>
1221 <td class="paramname"><em>cb_unit_event</em>, </td>
1224 <td class="paramkey"></td>
1226 <td class="paramtype"><a class="el" href="group__can__interface__gr.html#ga7ceceac3e9aa0981c5cacfab88efb4eb">ARM_CAN_SignalObjectEvent_t</a> </td>
1227 <td class="paramname"><em>cb_object_event</em> </td>
1235 </div><div class="memdoc">
1237 <p>Initialize CAN interface and register signal (callback) functions. </p>
1238 <dl class="params"><dt>Parameters</dt><dd>
1239 <table class="params">
1240 <tr><td class="paramdir">[in]</td><td class="paramname">cb_unit_event</td><td>Pointer to <a class="el" href="group__can__interface__gr.html#ga38795d1ed135ce3bd87f31ef1596bccf">ARM_CAN_SignalUnitEvent</a> callback function </td></tr>
1241 <tr><td class="paramdir">[in]</td><td class="paramname">cb_object_event</td><td>Pointer to <a class="el" href="group__can__interface__gr.html#gabfcaeac9e2ca25936ba5a29f2d594e7e">ARM_CAN_SignalObjectEvent</a> callback function </td></tr>
1245 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1246 <p>The function <b>initializes</b> the CAN interface.</p>
1247 <p>The function performs the following operations:</p><ul>
1248 <li>Initializes the resources needed for the CAN interface, for example dynamic memory allocation, RTOS object allocation, and possibly hardware pin configuration.</li>
1249 <li>Registers the <a class="el" href="group__can__interface__gr.html#ga38795d1ed135ce3bd87f31ef1596bccf">ARM_CAN_SignalUnitEvent</a> callback function.</li>
1250 <li>Registers the <a class="el" href="group__can__interface__gr.html#gabfcaeac9e2ca25936ba5a29f2d594e7e">ARM_CAN_SignalObjectEvent</a> callback function.</li>
1252 <p>The parameter <em>cb_unit_event</em> is a pointer to the <a class="el" href="group__can__interface__gr.html#ga38795d1ed135ce3bd87f31ef1596bccf">ARM_CAN_SignalUnitEvent</a> callback function; use a NULL pointer when no callback signals are required.</p>
1253 <p>The parameter <em>cb_object_event</em> is a pointer to the <a class="el" href="group__can__interface__gr.html#gabfcaeac9e2ca25936ba5a29f2d594e7e">ARM_CAN_SignalObjectEvent</a> callback function; use a NULL pointer when no callback signals are required.</p>
1254 <p><b>Example:</b> </p><ul>
1255 <li>see <a class="el" href="group__can__interface__gr.html">CAN Interface</a> </li>
1260 <a id="ga1e3e364b64f2ab277399e3279cce5ef8" name="ga1e3e364b64f2ab277399e3279cce5ef8"></a>
1261 <h2 class="memtitle"><span class="permalink"><a href="#ga1e3e364b64f2ab277399e3279cce5ef8">◆ </a></span>ARM_CAN_Uninitialize()</h2>
1263 <div class="memitem">
1264 <div class="memproto">
1265 <table class="memname">
1267 <td class="memname">int32_t ARM_CAN_Uninitialize </td>
1269 <td class="paramtype">void </td>
1270 <td class="paramname"></td><td>)</td>
1274 </div><div class="memdoc">
1276 <p>De-initialize CAN interface. </p>
1277 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1278 <p>The function <b>ARM_CAN_Uninitialize</b> de-initializes the resources of the CAN interface. It is called to release the software resources used by the interface such as deallocate any RTOS objects, dynamic memory and pin de-configuration. </p>
1282 <a id="ga6f634f126ac97daef2f3115aa7bfed7c" name="ga6f634f126ac97daef2f3115aa7bfed7c"></a>
1283 <h2 class="memtitle"><span class="permalink"><a href="#ga6f634f126ac97daef2f3115aa7bfed7c">◆ </a></span>ARM_CAN_PowerControl()</h2>
1285 <div class="memitem">
1286 <div class="memproto">
1287 <table class="memname">
1289 <td class="memname">int32_t ARM_CAN_PowerControl </td>
1291 <td class="paramtype"><a class="el" href="group__common__drv__gr.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5">ARM_POWER_STATE</a> </td>
1292 <td class="paramname"><em>state</em></td><td>)</td>
1296 </div><div class="memdoc">
1298 <p>Control CAN interface power. </p>
1299 <dl class="params"><dt>Parameters</dt><dd>
1300 <table class="params">
1301 <tr><td class="paramdir">[in]</td><td class="paramname">state</td><td>Power state<ul>
1302 <li><a class="el" href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5ab6f5becc85ebd51c3dd2524a95d2ca35">ARM_POWER_OFF</a> : power off: no operation possible</li>
1303 <li><a class="el" href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5a9ef9e57cbcc948d0e22314e73dc8c434">ARM_POWER_LOW</a> : low power mode: retain state, detect and signal wake-up events</li>
1304 <li><a class="el" href="Driver__Common_8h.html#ga47d6d7c31f88f3b8ae4aaf9d8444afa5abed52b77a9ce4775570e44a842b1295e">ARM_POWER_FULL</a> : power on: full operation at maximum performance </li>
1310 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1311 <p>The function <b>ARM_CAN_PowerControl</b> controls the power modes of the CAN interface.</p>
1312 <p>The parameter <em>state</em> can be:</p><ul>
1313 <li>ARM_POWER_FULL: Activate clocks and driver functionality as if peripheral was reset.</li>
1314 <li>ARM_POWER_OFF: Unconditionally put peripheral into non-functional (reset) state.</li>
1315 <li>ARM_POWER_LOW: Put peripheral into low power consumption state ready to wake up on bus event. </li>
1320 <a id="ga1fe6cc207415de604975ae251e269361" name="ga1fe6cc207415de604975ae251e269361"></a>
1321 <h2 class="memtitle"><span class="permalink"><a href="#ga1fe6cc207415de604975ae251e269361">◆ </a></span>ARM_CAN_GetClock()</h2>
1323 <div class="memitem">
1324 <div class="memproto">
1325 <table class="memname">
1327 <td class="memname">uint32_t ARM_CAN_GetClock </td>
1329 <td class="paramtype">void </td>
1330 <td class="paramname"></td><td>)</td>
1334 </div><div class="memdoc">
1336 <p>Retrieve CAN base clock frequency. </p>
1337 <dl class="section return"><dt>Returns</dt><dd>base clock frequency</dd></dl>
1338 <p>The function <b>ARM_CAN_GetClock</b> returns the CAN base clock frequency in <span class="XML-Token">[Hz]</span>. This value may be used to validate the <em>bitrate</em> for the function <a class="el" href="group__can__interface__gr.html#ga88bb27a8525503a250cca7a2c4a5d07a">ARM_CAN_SetBitrate</a>.</p>
1339 <p><b>Example</b>: </p><div class="fragment"><div class="line">CAN_clock = <a class="code hl_function" href="group__can__interface__gr.html#ga1fe6cc207415de604975ae251e269361">ARM_CAN_GetClock</a>(); <span class="comment">// CAN base clock frequency</span></div>
1340 <div class="ttc" id="agroup__can__interface__gr_html_ga1fe6cc207415de604975ae251e269361"><div class="ttname"><a href="group__can__interface__gr.html#ga1fe6cc207415de604975ae251e269361">ARM_CAN_GetClock</a></div><div class="ttdeci">uint32_t ARM_CAN_GetClock(void)</div><div class="ttdoc">Retrieve CAN base clock frequency.</div><div class="ttdef"><b>Definition:</b> Driver_CAN.c:702</div></div>
1341 </div><!-- fragment -->
1344 <a id="ga88bb27a8525503a250cca7a2c4a5d07a" name="ga88bb27a8525503a250cca7a2c4a5d07a"></a>
1345 <h2 class="memtitle"><span class="permalink"><a href="#ga88bb27a8525503a250cca7a2c4a5d07a">◆ </a></span>ARM_CAN_SetBitrate()</h2>
1347 <div class="memitem">
1348 <div class="memproto">
1349 <table class="memname">
1351 <td class="memname">int32_t ARM_CAN_SetBitrate </td>
1353 <td class="paramtype"><a class="el" href="group__can__timeseg__ctrls.html#ga11c12020b81a63a73a8b53e96a7e3dea">ARM_CAN_BITRATE_SELECT</a> </td>
1354 <td class="paramname"><em>select</em>, </td>
1357 <td class="paramkey"></td>
1359 <td class="paramtype">uint32_t </td>
1360 <td class="paramname"><em>bitrate</em>, </td>
1363 <td class="paramkey"></td>
1365 <td class="paramtype">uint32_t </td>
1366 <td class="paramname"><em>bit_segments</em> </td>
1374 </div><div class="memdoc">
1376 <p>Set bitrate for CAN interface. </p>
1377 <dl class="params"><dt>Parameters</dt><dd>
1378 <table class="params">
1379 <tr><td class="paramdir">[in]</td><td class="paramname">select</td><td>Bitrate selection<ul>
1380 <li><a class="el" href="Driver__CAN_8h.html#ga11c12020b81a63a73a8b53e96a7e3deaa3b6d191c99f1eba4f01bcc5fbfaf67f3">ARM_CAN_BITRATE_NOMINAL</a> : nominal (flexible data-rate arbitration) bitrate</li>
1381 <li><a class="el" href="Driver__CAN_8h.html#ga11c12020b81a63a73a8b53e96a7e3deaaa6c9996de0cdf42da5c02086cd8f16dc">ARM_CAN_BITRATE_FD_DATA</a> : flexible data-rate data bitrate </li>
1384 <tr><td class="paramdir">[in]</td><td class="paramname">bitrate</td><td>Bitrate </td></tr>
1385 <tr><td class="paramdir">[in]</td><td class="paramname">bit_segments</td><td>Bit segments settings<ul>
1386 <li><a class="el" href="group__can__timeseg__ctrls.html#ga01183319a5a899eafea9ffe7af73d5ea">ARM_CAN_BIT_PROP_SEG(x)</a> : number of time quanta for propagation time segment</li>
1387 <li><a class="el" href="group__can__timeseg__ctrls.html#ga03f1921ee97a7ebf5d767b6cacf40792">ARM_CAN_BIT_PHASE_SEG1(x)</a> : number of time quanta for phase buffer segment 1</li>
1388 <li><a class="el" href="group__can__timeseg__ctrls.html#ga76de056d56803cb7a0d01978ee981e80">ARM_CAN_BIT_PHASE_SEG2(x)</a> : number of time quanta for phase buffer Segment 2</li>
1389 <li><a class="el" href="group__can__timeseg__ctrls.html#gab32e97fa4edf497c111dd3f0d8779269">ARM_CAN_BIT_SJW(x)</a> : number of time quanta for (re-)synchronization jump width </li>
1395 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1397 The function <b>ARM_CAN_SetBitrate</b> sets the CAN communication bit rate.</p>
1398 <p>The parameter <em>select</em> selects the bit rate affected by function call as defined in <a class="el" href="group__can__timeseg__ctrls.html#ga11c12020b81a63a73a8b53e96a7e3dea">ARM_CAN_BITRATE_SELECT</a> and listed in the table below.</p>
1399 <table class="markdownTable">
1400 <tr class="markdownTableHead">
1401 <th class="markdownTableHeadLeft">Parameter <em>select</em> </th><th class="markdownTableHeadLeft">CAN Mode Bit Rate </th></tr>
1402 <tr class="markdownTableRowOdd">
1403 <td class="markdownTableBodyLeft"><a class="el" href="Driver__CAN_8h.html#ga11c12020b81a63a73a8b53e96a7e3deaa3b6d191c99f1eba4f01bcc5fbfaf67f3">ARM_CAN_BITRATE_NOMINAL</a> </td><td class="markdownTableBodyLeft">Select nominal (flexible data-rate arbitration) bitrate (CAN 2.0B) </td></tr>
1404 <tr class="markdownTableRowEven">
1405 <td class="markdownTableBodyLeft"><a class="el" href="Driver__CAN_8h.html#ga11c12020b81a63a73a8b53e96a7e3deaaa6c9996de0cdf42da5c02086cd8f16dc">ARM_CAN_BITRATE_FD_DATA</a> </td><td class="markdownTableBodyLeft">Select flexible data-rate data bitrate (<a class="el" href="group__can__interface__gr.html#CAN_FD">CAN_FD</a>) </td></tr>
1407 <p>The parameter <em>bitrate</em> is the bit rate for the selected CAN mode.</p>
1408 <p>The parameter <em>bit_segments</em> is used to setup the time quanta for sampling (see picture below). The values listed in the table below are ORed and specify the various sampling segments. The CAN controller samples each bit on the bus at the <em>Sample Point</em>.</p>
1409 <table class="cmtable">
1411 <th>Parameter <em>bit_segments</em> </th><th>Bit <br />
1412 </th><th>for <em>select</em> = <a class="el" href="Driver__CAN_8h.html#ga11c12020b81a63a73a8b53e96a7e3deaa3b6d191c99f1eba4f01bcc5fbfaf67f3">ARM_CAN_BITRATE_NOMINAL</a> <br />
1413 (CAN specification) </th><th>for <em>select</em> = <a class="el" href="Driver__CAN_8h.html#ga11c12020b81a63a73a8b53e96a7e3deaa3b6d191c99f1eba4f01bcc5fbfaf67f3">ARM_CAN_BITRATE_NOMINAL</a> <br />
1414 (CAN FD specification) </th><th>for <em>select</em> = <a class="el" href="Driver__CAN_8h.html#ga11c12020b81a63a73a8b53e96a7e3deaaa6c9996de0cdf42da5c02086cd8f16dc">ARM_CAN_BITRATE_FD_DATA</a> <br />
1415 (CAN FD specification) </th></tr>
1417 <td><a class="el" href="group__can__timeseg__ctrls.html#ga01183319a5a899eafea9ffe7af73d5ea">ARM_CAN_BIT_PROP_SEG</a>(<em>x</em>) <br />
1418 Propagation Time Segment <br />
1419 (PROP_SEG) </td><td>0..7 </td><td><em>x</em> = <span class="XML-Token">[1..8]</span> </td><td><em>x</em> = <span class="XML-Token">[1..32] or more</span> <br />
1420 </td><td><em>x</em> = <span class="XML-Token">[0..8]</span> <br />
1423 <td><a class="el" href="group__can__timeseg__ctrls.html#ga03f1921ee97a7ebf5d767b6cacf40792">ARM_CAN_BIT_PHASE_SEG1</a>(<em>x</em>) <br />
1424 Phase Buffer Segment 1 <br />
1425 (PHASE_SEG1) </td><td>8..15 </td><td><em>x</em> = <span class="XML-Token">[1..8]</span> </td><td><em>x</em> = <span class="XML-Token">[1..32] or more</span> <br />
1426 </td><td><em>x</em> = <span class="XML-Token">[1..8]</span> <br />
1429 <td rowspan="2"><a class="el" href="group__can__timeseg__ctrls.html#ga76de056d56803cb7a0d01978ee981e80">ARM_CAN_BIT_PHASE_SEG2</a>(<em>x</em>) <br />
1430 Phase Buffer Segment 2 <br />
1431 (PHASE_SEG2) </td><td rowspan="2">16..23 </td><td><em>x</em> = <span class="XML-Token">[1..8]</span> </td><td><em>x</em> = <span class="XML-Token">[1..32] or more</span> <br />
1432 </td><td><em>x</em> = <span class="XML-Token">[1..8]</span> <br />
1435 <td colspan="3">The maximum allowed value is <span class="XML-Token">x = MAX (PHASE_SEG1, IPT)</span>. IPT = Information Processing Time. Usually, IPT = <span class="XML-Token">2</span>. Exceptions apply. Read the specifications of your CAN controller. </td></tr>
1437 <td rowspan="2"><a class="el" href="group__can__timeseg__ctrls.html#gab32e97fa4edf497c111dd3f0d8779269">ARM_CAN_BIT_SJW</a>(<em>x</em>) <br />
1438 (Re-)Synchronization Jump Width <br />
1439 (SJW). </td><td rowspan="2">24..31 </td><td><em>x</em> = <span class="XML-Token">[1..4]</span> </td><td><em>x</em> = <span class="XML-Token">[1..4]</span> <br />
1440 </td><td><em>x</em> = <span class="XML-Token">[1..4]</span> <br />
1443 <td colspan="3">The maximum allowed value is <span class="XML-Token">x = MIN (MIN (PHASE_SEG1, PHASE_SEG2), 4)</span>. SJW is not allowed to be greater than either PHASE segment. </td></tr>
1445 <p>The picture shows a Nominal Bit Time with 10 time quanta. </p><div class="image">
1446 <img src="CAN_Bit_Timing.png" alt=""/>
1447 <div class="caption">
1448 CAN Bit Timing</div></div>
1449 <p>The time quanta (N) per bit is: </p><div class="fragment"><div class="line">N = 1 + PROP_SEG + PHASE_SEG1 + PHASE_SEG2; <span class="comment">// note SYNC_SEG is always 1</span></div>
1450 </div><!-- fragment --><p>The driver uses this value and the CAN clock to calculate a suitable prescaler value (P). If the driver cannot achieve the requested <em>bitrate</em> it returns with <a class="el" href="Driver__CAN_8h.html#a90b9d9323a6049fb4fcd1efe7c892294">ARM_CAN_INVALID_BITRATE</a>. The formula for the <em>bitrate</em> is: </p><div class="fragment"><div class="line">bitrate = (CAN_Clock / P) / N;</div>
1451 </div><!-- fragment --><p><b>Example</b>: </p><div class="fragment"><div class="line">status = ptrCAN->SetBitrate (<a class="code hl_enumvalue" href="Driver__CAN_8h.html#ga11c12020b81a63a73a8b53e96a7e3deaa3b6d191c99f1eba4f01bcc5fbfaf67f3">ARM_CAN_BITRATE_NOMINAL</a>, <span class="comment">// Set nominal bitrate</span></div>
1452 <div class="line"> 125000U, <span class="comment">// Set bitrate to 125 kbit/s</span></div>
1453 <div class="line"> <a class="code hl_define" href="group__can__timeseg__ctrls.html#ga01183319a5a899eafea9ffe7af73d5ea">ARM_CAN_BIT_PROP_SEG</a>(5U) | <span class="comment">// Set propagation segment to 5 time quanta</span></div>
1454 <div class="line"> <a class="code hl_define" href="group__can__timeseg__ctrls.html#ga03f1921ee97a7ebf5d767b6cacf40792">ARM_CAN_BIT_PHASE_SEG1</a>(1U) | <span class="comment">// Set phase segment 1 to 1 time quantum (sample point at 87.5% of bit time)</span></div>
1455 <div class="line"> <a class="code hl_define" href="group__can__timeseg__ctrls.html#ga76de056d56803cb7a0d01978ee981e80">ARM_CAN_BIT_PHASE_SEG2</a>(1U) | <span class="comment">// Set phase segment 2 to 1 time quantum (total bit is 8 time quanta long)</span></div>
1456 <div class="line"> <a class="code hl_define" href="group__can__timeseg__ctrls.html#gab32e97fa4edf497c111dd3f0d8779269">ARM_CAN_BIT_SJW</a>(1U)); <span class="comment">// Resynchronization jump width is same as phase segment 2</span></div>
1457 </div><!-- fragment --><p>In this example, N = 8 and with a CAN_Clock = 8MHz the prescaler (P) is calculated by the driver to 8. </p>
1461 <a id="ga28226a6e223f9b95b4dafb7c2f48a855" name="ga28226a6e223f9b95b4dafb7c2f48a855"></a>
1462 <h2 class="memtitle"><span class="permalink"><a href="#ga28226a6e223f9b95b4dafb7c2f48a855">◆ </a></span>ARM_CAN_SetMode()</h2>
1464 <div class="memitem">
1465 <div class="memproto">
1466 <table class="memname">
1468 <td class="memname">int32_t ARM_CAN_SetMode </td>
1470 <td class="paramtype"><a class="el" href="group__can__bus__mode__ctrls.html#gabbca99c46d478bcf822eee71cdf75dcd">ARM_CAN_MODE</a> </td>
1471 <td class="paramname"><em>mode</em></td><td>)</td>
1475 </div><div class="memdoc">
1477 <p>Set operating mode for CAN interface. </p>
1478 <dl class="params"><dt>Parameters</dt><dd>
1479 <table class="params">
1480 <tr><td class="paramdir">[in]</td><td class="paramname">mode</td><td>Operating mode<ul>
1481 <li><a class="el" href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcda9967a5ebaa045afe54d75e5629676ddc">ARM_CAN_MODE_INITIALIZATION</a> : initialization mode</li>
1482 <li><a class="el" href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcdaa3190344bdf3452462e5c0518ac3cdc4">ARM_CAN_MODE_NORMAL</a> : normal operation mode</li>
1483 <li><a class="el" href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcda22a9bb26e68c2a04f641d466040d755d">ARM_CAN_MODE_RESTRICTED</a> : restricted operation mode</li>
1484 <li><a class="el" href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcda904f68f08c84c4b85c763f5d98c574ab">ARM_CAN_MODE_MONITOR</a> : bus monitoring mode</li>
1485 <li><a class="el" href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcda8579315576baa43860a398a30fd527d8">ARM_CAN_MODE_LOOPBACK_INTERNAL</a> : loopback internal mode</li>
1486 <li><a class="el" href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcda5ee1ba60abcf39d575e7cb309e641b9b">ARM_CAN_MODE_LOOPBACK_EXTERNAL</a> : loopback external mode </li>
1492 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1493 <p>The function <b>ARM_CAN_SetMode</b> sets the CAN bus communication mode using the parameter <em>mode</em>.</p>
1494 <p>The table lists the values for <em>mode</em>.</p>
1495 <table class="cmtable">
1497 <th>Parameter <em>mode</em> <br />
1498 </th><th>Bus Communication Mode </th><th>supported when <a class="el" href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">ARM_CAN_OBJ_CAPABILITIES</a> data field </th></tr>
1500 <td><a class="el" href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcda9967a5ebaa045afe54d75e5629676ddc">ARM_CAN_MODE_INITIALIZATION</a> <br />
1501 </td><td>Initialization mode; Used to setup communication parameters for the reception objects and global filtering, while peripheral is not active on the bus. Refer to <a class="el" href="group__can__interface__gr.html#can_filtering">CAN Message Filtering</a> for details. </td><td><em>always supported</em> </td></tr>
1503 <td><a class="el" href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcdaa3190344bdf3452462e5c0518ac3cdc4">ARM_CAN_MODE_NORMAL</a> </td><td>Normal operation mode. Used when peripheral is in active mode to receive, transmit, and acknowledge messages on the bus. Depending on the current unit state, it can generate error or overload messages. Verify the unit state with <a class="el" href="group__can__interface__gr.html#ga676d6b567fc4ab3d44f5d7a50ec9419c">ARM_CAN_GetStatus</a>. </td><td><em>always supported</em> </td></tr>
1505 <td><a class="el" href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcda22a9bb26e68c2a04f641d466040d755d">ARM_CAN_MODE_RESTRICTED</a> </td><td>Restricted operation mode. Used for monitoring the bus communication non-intrusively without transmitting. </td><td><em>restricted_mode</em> = <span class="XML-Token">1</span> </td></tr>
1507 <td><a class="el" href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcda904f68f08c84c4b85c763f5d98c574ab">ARM_CAN_MODE_MONITOR</a> </td><td>Bus monitoring mode. </td><td><em>monitor_mode</em> = <span class="XML-Token">1</span> </td></tr>
1509 <td><a class="el" href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcda8579315576baa43860a398a30fd527d8">ARM_CAN_MODE_LOOPBACK_INTERNAL</a> </td><td>Test mode; loopback of CAN transmission to its receiver. No transmission visible on CAN bus. </td><td><em>internal_loopback</em> = <span class="XML-Token">1</span> </td></tr>
1511 <td><a class="el" href="Driver__CAN_8h.html#gabbca99c46d478bcf822eee71cdf75dcda5ee1ba60abcf39d575e7cb309e641b9b">ARM_CAN_MODE_LOOPBACK_EXTERNAL</a> </td><td>Test mode; loopback of CAN transmission to its receiver. Transmission is visible on CAN bus. </td><td><em>external_loopback</em> = <span class="XML-Token">1</span> </td></tr>
1516 <a id="ga45ab314f5121cf5a1b32d9adc600e0f7" name="ga45ab314f5121cf5a1b32d9adc600e0f7"></a>
1517 <h2 class="memtitle"><span class="permalink"><a href="#ga45ab314f5121cf5a1b32d9adc600e0f7">◆ </a></span>ARM_CAN_ObjectGetCapabilities()</h2>
1519 <div class="memitem">
1520 <div class="memproto">
1521 <table class="memname">
1523 <td class="memname"><a class="el" href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">ARM_CAN_OBJ_CAPABILITIES</a> ARM_CAN_ObjectGetCapabilities </td>
1525 <td class="paramtype">uint32_t </td>
1526 <td class="paramname"><em>obj_idx</em></td><td>)</td>
1530 </div><div class="memdoc">
1532 <p>Retrieve capabilities of an object. </p>
1533 <dl class="params"><dt>Parameters</dt><dd>
1534 <table class="params">
1535 <tr><td class="paramdir">[in]</td><td class="paramname">obj_idx</td><td>Object index </td></tr>
1539 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">ARM_CAN_OBJ_CAPABILITIES</a></dd></dl>
1540 <p>The function <b>ARM_CAN_ObjectGetCapabilities</b> retrieves the capabilities of a CAN object. The structure <a class="el" href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">ARM_CAN_OBJ_CAPABILITIES</a> stores the values.</p>
1541 <p>The parameter <em>obj_idx</em> is the message object index.</p>
1542 <dl class="section see"><dt>See also</dt><dd><a class="el" href="group__can__interface__gr.html#ga00ec0715f6755a49dae5b60dca182630" title="Configure object.">ARM_CAN_ObjectConfigure</a> </dd>
1544 <a class="el" href="group__can__interface__gr.html#ga4f9bc7088704483388e14872c9d5385d" title="Add or remove filter for message reception.">ARM_CAN_ObjectSetFilter</a> </dd></dl>
1548 <a id="ga4f9bc7088704483388e14872c9d5385d" name="ga4f9bc7088704483388e14872c9d5385d"></a>
1549 <h2 class="memtitle"><span class="permalink"><a href="#ga4f9bc7088704483388e14872c9d5385d">◆ </a></span>ARM_CAN_ObjectSetFilter()</h2>
1551 <div class="memitem">
1552 <div class="memproto">
1553 <table class="memname">
1555 <td class="memname">int32_t ARM_CAN_ObjectSetFilter </td>
1557 <td class="paramtype">uint32_t </td>
1558 <td class="paramname"><em>obj_idx</em>, </td>
1561 <td class="paramkey"></td>
1563 <td class="paramtype"><a class="el" href="group__can__filter__operation__ctrls.html#gacb04d0f8b3969ee69362ff2b62941d75">ARM_CAN_FILTER_OPERATION</a> </td>
1564 <td class="paramname"><em>operation</em>, </td>
1567 <td class="paramkey"></td>
1569 <td class="paramtype">uint32_t </td>
1570 <td class="paramname"><em>id</em>, </td>
1573 <td class="paramkey"></td>
1575 <td class="paramtype">uint32_t </td>
1576 <td class="paramname"><em>arg</em> </td>
1584 </div><div class="memdoc">
1586 <p>Add or remove filter for message reception. </p>
1587 <dl class="params"><dt>Parameters</dt><dd>
1588 <table class="params">
1589 <tr><td class="paramdir">[in]</td><td class="paramname">obj_idx</td><td>Object index of object that filter should be or is assigned to </td></tr>
1590 <tr><td class="paramdir">[in]</td><td class="paramname">operation</td><td>Operation on filter<ul>
1591 <li><a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75aa734058b50573de3b0cc49311997806b">ARM_CAN_FILTER_ID_EXACT_ADD</a> : add exact id filter</li>
1592 <li><a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75a6fdaecf3fa244ef1e4d1069d9c6c95f8">ARM_CAN_FILTER_ID_EXACT_REMOVE</a> : remove exact id filter</li>
1593 <li><a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75a22123bef8e773844fce604c553bf2ed5">ARM_CAN_FILTER_ID_RANGE_ADD</a> : add range id filter</li>
1594 <li><a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75a17fea7d388dc702bb3318ecae911f50d">ARM_CAN_FILTER_ID_RANGE_REMOVE</a> : remove range id filter</li>
1595 <li><a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75ac4ad302fa9b762c1d14964141e234ba9">ARM_CAN_FILTER_ID_MASKABLE_ADD</a> : add maskable id filter</li>
1596 <li><a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75ad9573d5d0e112aece7abc0bc24aa92fb">ARM_CAN_FILTER_ID_MASKABLE_REMOVE</a> : remove maskable id filter </li>
1599 <tr><td class="paramdir">[in]</td><td class="paramname">id</td><td>ID or start of ID range (depending on filter type) </td></tr>
1600 <tr><td class="paramdir">[in]</td><td class="paramname">arg</td><td>Mask or end of ID range (depending on filter type) </td></tr>
1604 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1605 <p>The function <b>ARM_CAN_ObjectSetFilter</b> sets or removes the filter for message reception. Refer to <a class="el" href="group__can__interface__gr.html#can_filtering">CAN Message Filtering</a> for details on filtering.</p>
1606 <p>The parameter <em>obj_idx</em> is the message object index. <br />
1607 The parameter <em>operation</em> is the operation on the filter as listed in the table below and which are defined in the structure <a class="el" href="group__can__filter__operation__ctrls.html#gacb04d0f8b3969ee69362ff2b62941d75">ARM_CAN_FILTER_OPERATION</a>.</p>
1608 <table class="markdownTable">
1609 <tr class="markdownTableHead">
1610 <th class="markdownTableHeadLeft">Parameter <em>operation</em> </th><th class="markdownTableHeadLeft">Operation on Filter </th><th class="markdownTableHeadLeft">supported when <a class="el" href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">ARM_CAN_OBJ_CAPABILITIES</a> data field </th></tr>
1611 <tr class="markdownTableRowOdd">
1612 <td class="markdownTableBodyLeft"><a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75aa734058b50573de3b0cc49311997806b">ARM_CAN_FILTER_ID_EXACT_ADD</a> </td><td class="markdownTableBodyLeft">Add exact ID filter </td><td class="markdownTableBodyLeft"><em>exact_filtering</em> = <span class="XML-Token">1</span> </td></tr>
1613 <tr class="markdownTableRowEven">
1614 <td class="markdownTableBodyLeft"><a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75a6fdaecf3fa244ef1e4d1069d9c6c95f8">ARM_CAN_FILTER_ID_EXACT_REMOVE</a> </td><td class="markdownTableBodyLeft">Remove exact ID filter </td><td class="markdownTableBodyLeft"><em>exact_filtering</em> = <span class="XML-Token">1</span> </td></tr>
1615 <tr class="markdownTableRowOdd">
1616 <td class="markdownTableBodyLeft"><a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75a22123bef8e773844fce604c553bf2ed5">ARM_CAN_FILTER_ID_RANGE_ADD</a> </td><td class="markdownTableBodyLeft">Add range ID filter </td><td class="markdownTableBodyLeft"><em>range_filtering</em> = <span class="XML-Token">1</span> </td></tr>
1617 <tr class="markdownTableRowEven">
1618 <td class="markdownTableBodyLeft"><a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75a17fea7d388dc702bb3318ecae911f50d">ARM_CAN_FILTER_ID_RANGE_REMOVE</a> </td><td class="markdownTableBodyLeft">Remove range ID filter </td><td class="markdownTableBodyLeft"><em>range_filtering</em> = <span class="XML-Token">1</span> </td></tr>
1619 <tr class="markdownTableRowOdd">
1620 <td class="markdownTableBodyLeft"><a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75ac4ad302fa9b762c1d14964141e234ba9">ARM_CAN_FILTER_ID_MASKABLE_ADD</a> </td><td class="markdownTableBodyLeft">Add maskable ID filter </td><td class="markdownTableBodyLeft"><em>mask_filtering</em> = <span class="XML-Token">1</span> </td></tr>
1621 <tr class="markdownTableRowEven">
1622 <td class="markdownTableBodyLeft"><a class="el" href="Driver__CAN_8h.html#gacb04d0f8b3969ee69362ff2b62941d75ad9573d5d0e112aece7abc0bc24aa92fb">ARM_CAN_FILTER_ID_MASKABLE_REMOVE</a> </td><td class="markdownTableBodyLeft">Remove maskable ID filter </td><td class="markdownTableBodyLeft"><em>mask_filtering</em> = <span class="XML-Token">1</span> </td></tr>
1624 <p>The parameter <em>id</em> is the identifier of the filter or defines the start of the filter range (depends on the filter operation). <br />
1625 The parameter <em>arg</em> is the mask of the filter or defines the end of the filter range (depends on the filter operation).</p>
1626 <dl class="section see"><dt>See also</dt><dd><a class="el" href="group__can__interface__gr.html#ga00ec0715f6755a49dae5b60dca182630" title="Configure object.">ARM_CAN_ObjectConfigure</a> </dd></dl>
1630 <a id="ga00ec0715f6755a49dae5b60dca182630" name="ga00ec0715f6755a49dae5b60dca182630"></a>
1631 <h2 class="memtitle"><span class="permalink"><a href="#ga00ec0715f6755a49dae5b60dca182630">◆ </a></span>ARM_CAN_ObjectConfigure()</h2>
1633 <div class="memitem">
1634 <div class="memproto">
1635 <table class="memname">
1637 <td class="memname">int32_t ARM_CAN_ObjectConfigure </td>
1639 <td class="paramtype">uint32_t </td>
1640 <td class="paramname"><em>obj_idx</em>, </td>
1643 <td class="paramkey"></td>
1645 <td class="paramtype"><a class="el" href="group__can__obj__config__ctrls.html#gaa9488554de0575bc821c9f65213c4cd0">ARM_CAN_OBJ_CONFIG</a> </td>
1646 <td class="paramname"><em>obj_cfg</em> </td>
1654 </div><div class="memdoc">
1656 <p>Configure object. </p>
1657 <dl class="params"><dt>Parameters</dt><dd>
1658 <table class="params">
1659 <tr><td class="paramdir">[in]</td><td class="paramname">obj_idx</td><td>Object index </td></tr>
1660 <tr><td class="paramdir">[in]</td><td class="paramname">obj_cfg</td><td>Object configuration state<ul>
1661 <li><a class="el" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0aebbd0da59658805af30203be66d80249">ARM_CAN_OBJ_INACTIVE</a> : deactivate object</li>
1662 <li><a class="el" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0a14780ac7274831ee94f427cbbf67c003">ARM_CAN_OBJ_RX</a> : configure object for reception</li>
1663 <li><a class="el" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0a3e20952f92855298cd0a39a7f47b3f3c">ARM_CAN_OBJ_TX</a> : configure object for transmission</li>
1664 <li><a class="el" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0ac5d28d180ea9e4328974ffcb8b928a0c">ARM_CAN_OBJ_RX_RTR_TX_DATA</a> : configure object that on RTR reception automatically transmits Data Frame</li>
1665 <li><a class="el" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0a396d7a6cd2353e1a2936405ace6417f5">ARM_CAN_OBJ_TX_RTR_RX_DATA</a> : configure object that transmits RTR and automatically receives Data Frame </li>
1671 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1672 <p>The function <b>ARM_CAN_ObjectConfigure</b> configures the message object, which can be a mailbox or FIFO. Refer to <a class="el" href="group__can__interface__gr.html#can_filtering">CAN Message Filtering</a> for details.</p>
1673 <p>The parameter <em>obj_idx</em> specifies the message object index. <br />
1674 The parameter <em>obj_cfg</em> configures the <b>object</b> with values as shown in the following table.</p>
1675 <table class="cmtable">
1677 <th>Parameter <em>obj_cfg</em> </th><th>Object Configuration </th><th>supported when <a class="el" href="group__can__interface__gr.html#structARM__CAN__OBJ__CAPABILITIES">ARM_CAN_OBJ_CAPABILITIES</a> data field </th></tr>
1679 <td><a class="el" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0aebbd0da59658805af30203be66d80249">ARM_CAN_OBJ_INACTIVE</a> </td><td>Deactivate object (default after <a class="el" href="group__can__interface__gr.html#gaa72ceb25ba67e279d7432404632deb44">ARM_CAN_Initialize</a>) </td><td><em>always supported</em> </td></tr>
1681 <td><a class="el" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0a14780ac7274831ee94f427cbbf67c003">ARM_CAN_OBJ_RX</a> </td><td>Receive object; read received message with <a class="el" href="group__can__interface__gr.html#gafc37084df5eab32f593c2744d35cf647">ARM_CAN_MessageRead</a>. </td><td><em>rx</em> = <span class="XML-Token">1</span> </td></tr>
1683 <td><a class="el" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0a3e20952f92855298cd0a39a7f47b3f3c">ARM_CAN_OBJ_TX</a> </td><td>Transmit object; send message with <a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a>. </td><td><em>tx</em> = <span class="XML-Token">1</span> </td></tr>
1685 <td><a class="el" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0ac5d28d180ea9e4328974ffcb8b928a0c">ARM_CAN_OBJ_RX_RTR_TX_DATA</a> </td><td><a class="el" href="group__can__interface__gr.html#Remote_Frame">Remote Frame</a> Receive; when <b>RTR</b> is received data message is transmitted; set data message with <a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a>. </td><td><em>rx_rtr_tx_data</em> = <span class="XML-Token">1</span> </td></tr>
1687 <td><a class="el" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0a396d7a6cd2353e1a2936405ace6417f5">ARM_CAN_OBJ_TX_RTR_RX_DATA</a> </td><td><a class="el" href="group__can__interface__gr.html#Remote_Frame">Remote Frame</a> Transmit; a <b>RTR</b> is sent with <a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a> to trigger object reception; read received data message with <a class="el" href="group__can__interface__gr.html#gafc37084df5eab32f593c2744d35cf647">ARM_CAN_MessageRead</a>. </td><td><em>tx_rtr_rx_data</em> = <span class="XML-Token">1</span> </td></tr>
1689 <p>When the <b>object</b> is deactivated, it is not used for data communication.</p>
1690 <dl class="section see"><dt>See also</dt><dd><a class="el" href="group__can__interface__gr.html#ga4f9bc7088704483388e14872c9d5385d" title="Add or remove filter for message reception.">ARM_CAN_ObjectSetFilter</a> </dd></dl>
1694 <a id="ga0dcffd362b4093043442a030eaebbcfe" name="ga0dcffd362b4093043442a030eaebbcfe"></a>
1695 <h2 class="memtitle"><span class="permalink"><a href="#ga0dcffd362b4093043442a030eaebbcfe">◆ </a></span>ARM_CAN_MessageSend()</h2>
1697 <div class="memitem">
1698 <div class="memproto">
1699 <table class="memname">
1701 <td class="memname">int32_t ARM_CAN_MessageSend </td>
1703 <td class="paramtype">uint32_t </td>
1704 <td class="paramname"><em>obj_idx</em>, </td>
1707 <td class="paramkey"></td>
1709 <td class="paramtype"><a class="el" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a> * </td>
1710 <td class="paramname"><em>msg_info</em>, </td>
1713 <td class="paramkey"></td>
1715 <td class="paramtype">const uint8_t * </td>
1716 <td class="paramname"><em>data</em>, </td>
1719 <td class="paramkey"></td>
1721 <td class="paramtype">uint8_t </td>
1722 <td class="paramname"><em>size</em> </td>
1730 </div><div class="memdoc">
1732 <p>Send message on CAN bus. </p>
1733 <dl class="params"><dt>Parameters</dt><dd>
1734 <table class="params">
1735 <tr><td class="paramdir">[in]</td><td class="paramname">obj_idx</td><td>Object index </td></tr>
1736 <tr><td class="paramdir">[in]</td><td class="paramname">msg_info</td><td>Pointer to CAN message information </td></tr>
1737 <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>Pointer to data buffer </td></tr>
1738 <tr><td class="paramdir">[in]</td><td class="paramname">size</td><td>Number of data bytes to send </td></tr>
1742 <dl class="section return"><dt>Returns</dt><dd>value >= 0 number of data bytes accepted to send </dd>
1744 value < 0 <a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1745 <p>The function <b>ARM_CAN_MessageSend</b> sends a CAN message on the CAN bus, or sets data message that will be automatically returned upon RTR reception with matching CAN ID.</p>
1746 <p>Only one message can be sent with a call to this function (for CAN up to <span class="XML-Token">8</span> bytes; for CAN FD up to <span class="XML-Token">64</span> bytes of data). A message transmission can be terminated with a call to the function <a class="el" href="group__can__interface__gr.html#ga8d9f0c5f03a8a81ab062b5aa57e5dea4">ARM_CAN_Control</a> with <em>control</em> = <a class="el" href="group__can__mode__ctrls.html#gae051a548bf785104a934908360529438">ARM_CAN_ABORT_MESSAGE_SEND</a>.</p>
1747 <p>The parameter <em>obj_idx</em> specifies the message object index.</p>
1748 <p>The parameter <em>msg_info</em> is a pointer to the structure <a class="el" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a>, which contains the following relevant data fields for sending message:</p><ul>
1749 <li><em>id:</em> Identifier of the message; bit <span class="XML-Token">31</span> specifies if this is an <span class="XML-Token">11-bit</span> or <span class="XML-Token">29-bit</span> identifier.</li>
1750 <li><em>rtr:</em> Specifies if Remote Transmission Request should be sent (<em>dlc</em> is used for number of requested bytes), otherwise the data message will be sent. Refer to <a class="el" href="group__can__interface__gr.html#Remote_Frame">Remote Frame</a> for details.</li>
1751 <li><em>edl:</em> Specifies if Extended Data Length is used; for CAN FD, message can contain up to <span class="XML-Token">64</span> data bytes.</li>
1752 <li><em>brs:</em> Specifies if Bit Rate Switching is to be used; for CAN FD, the bit rate can be increased during data phase.</li>
1753 <li><em>dlc:</em> Data Length Code of requested data bytes when sending Remote Transmission Request.</li>
1755 <p>The parameter <em>data</em> is a pointer to the data buffer.<br />
1756 The parameter <em>size</em> is the number of data bytes to send.<br />
1757 The function returns the number of bytes accepted to be sent or <a class="el" href="group__execution__status.html#ga13c1123319c7b9a4735d63447f35116b">ARM_DRIVER_ERROR_BUSY</a> if the hardware is not ready to accept a new message for transmission.</p>
1758 <p>When the message is sent, the callback function <a class="el" href="group__can__interface__gr.html#gabfcaeac9e2ca25936ba5a29f2d594e7e">ARM_CAN_SignalObjectEvent</a> is called signalling <a class="el" href="group__CAN__events.html#ga486f0f35ebc7e3b5931ee68b56703503">ARM_CAN_EVENT_SEND_COMPLETE</a> on specified object.</p>
1759 <dl class="section see"><dt>See also</dt><dd><a class="el" href="group__can__interface__gr.html#can_filtering">CAN Message Filtering</a></dd></dl>
1760 <p><b>Example:</b></p>
1761 <div class="fragment"><div class="line">status = ptrCAN->ObjectConfigure(0, <a class="code hl_enumvalue" href="Driver__CAN_8h.html#gaa9488554de0575bc821c9f65213c4cd0a3e20952f92855298cd0a39a7f47b3f3c">ARM_CAN_OBJ_TX</a>);</div>
1762 <div class="line"><span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a> ) { Error_Handler(); }</div>
1763 <div class="line"> </div>
1764 <div class="line">memset(&tx_msg_info, 0, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a>)); <span class="comment">// Clear transmit message structure</span></div>
1765 <div class="line">tx_msg_info.id = <a class="code hl_define" href="group__can__identifer__ctrls.html#gae7d4efb6fb49e1ec47c2b12e22f37cae">ARM_CAN_EXTENDED_ID</a>(0x12345678U); <span class="comment">// Set ID of message</span></div>
1766 <div class="line">data_buf[0] = <span class="charliteral">'1'</span>; data_buf[1] = <span class="charliteral">'2'</span>; <span class="comment">// Prepare data to transmit</span></div>
1767 <div class="line">data_buf[2] = <span class="charliteral">'3'</span>; data_buf[3] = <span class="charliteral">'4'</span>;</div>
1768 <div class="line">data_buf[4] = <span class="charliteral">'5'</span>; data_buf[5] = <span class="charliteral">'6'</span>;</div>
1769 <div class="line">data_buf[6] = <span class="charliteral">'7'</span>; data_buf[7] = <span class="charliteral">'8'</span>;</div>
1770 <div class="line">status = ptrCAN->MesageSend(0, &tx_msg_info, data_buf, 8); <span class="comment">// Send message</span></div>
1771 <div class="line"><span class="keywordflow">if</span> (status != <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a> ) { Error_Handler(); }</div>
1772 </div><!-- fragment -->
1775 <a id="gafc37084df5eab32f593c2744d35cf647" name="gafc37084df5eab32f593c2744d35cf647"></a>
1776 <h2 class="memtitle"><span class="permalink"><a href="#gafc37084df5eab32f593c2744d35cf647">◆ </a></span>ARM_CAN_MessageRead()</h2>
1778 <div class="memitem">
1779 <div class="memproto">
1780 <table class="memname">
1782 <td class="memname">int32_t ARM_CAN_MessageRead </td>
1784 <td class="paramtype">uint32_t </td>
1785 <td class="paramname"><em>obj_idx</em>, </td>
1788 <td class="paramkey"></td>
1790 <td class="paramtype"><a class="el" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a> * </td>
1791 <td class="paramname"><em>msg_info</em>, </td>
1794 <td class="paramkey"></td>
1796 <td class="paramtype">uint8_t * </td>
1797 <td class="paramname"><em>data</em>, </td>
1800 <td class="paramkey"></td>
1802 <td class="paramtype">uint8_t </td>
1803 <td class="paramname"><em>size</em> </td>
1811 </div><div class="memdoc">
1813 <p>Read message received on CAN bus. </p>
1814 <dl class="params"><dt>Parameters</dt><dd>
1815 <table class="params">
1816 <tr><td class="paramdir">[in]</td><td class="paramname">obj_idx</td><td>Object index </td></tr>
1817 <tr><td class="paramdir">[out]</td><td class="paramname">msg_info</td><td>Pointer to read CAN message information </td></tr>
1818 <tr><td class="paramdir">[out]</td><td class="paramname">data</td><td>Pointer to data buffer for read data </td></tr>
1819 <tr><td class="paramdir">[in]</td><td class="paramname">size</td><td>Maximum number of data bytes to read </td></tr>
1823 <dl class="section return"><dt>Returns</dt><dd>value >= 0 number of data bytes read </dd>
1825 value < 0 <a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1826 <p>The function <b>ARM_CAN_MessageRead</b> reads the message received on the CAN bus, if <em>obj_idx</em> was configured for reception or for automatic Data Message reception using RTR and the callback function <a class="el" href="group__can__interface__gr.html#gabfcaeac9e2ca25936ba5a29f2d594e7e">ARM_CAN_SignalObjectEvent</a> was called signalling <a class="el" href="group__CAN__events.html#ga2c1082561eeae3b2b8132e81fc241e47">ARM_CAN_EVENT_RECEIVE</a>. If the message was overrun by another received message, then the callback function <a class="el" href="group__can__interface__gr.html#gabfcaeac9e2ca25936ba5a29f2d594e7e">ARM_CAN_SignalObjectEvent</a> will be called signalling <a class="el" href="group__CAN__events.html#ga6c2d29b5c49d5cd18e97f5931157a94c">ARM_CAN_EVENT_RECEIVE_OVERRUN</a>.</p>
1827 <p>The function can read a maximum of <span class="XML-Token">8</span> data bytes for CAN and <span class="XML-Token">64</span> bytes for CAN FD.</p>
1828 <p>The parameter <em>obj_idx</em> specifies the message object index. <br />
1829 The parameter <em>msg_info</em> is a pointer to the CAN information structure. <br />
1830 The parameter <em>data</em> is a pointer to the data buffer for reading data. <br />
1831 The parameter <em>size</em> is data buffer size in bytes and indicates the maximum number of bytes that can be read.</p>
1832 <p>The function returns the number of read data in bytes or the <a class="el" href="group__execution__status.html">Status Error Codes</a>.</p>
1833 <p>All data fields of the structure <a class="el" href="group__can__interface__gr.html#structARM__CAN__MSG__INFO">ARM_CAN_MSG_INFO</a> are updated as described below:</p><ul>
1834 <li>id: Identifier of the message that was received, bit <span class="XML-Token">31</span> specifies if it is a <span class="XML-Token">11-bit</span> identifier or <span class="XML-Token">29-bit</span> identifier.</li>
1835 <li>rtr: <span class="XML-Token">1</span> = Remote Frame Request was received (<em>dlc</em> is number of requested bytes). <span class="XML-Token">0</span> = data message</li>
1836 <li>edl: <span class="XML-Token">1</span> = CAN FD Extended Data Length message was received. <span class="XML-Token">0</span> = not Extended Data Length message.</li>
1837 <li>brs: <span class="XML-Token">1</span> = CAN FD Bit Rate Switching was used for message transfer. <span class="XML-Token">0</span> = no Bit Rate Switching was used.</li>
1838 <li>esi: <span class="XML-Token">1</span> = CAN FD Error State Indicator is active for received message. <span class="XML-Token">0</span> = Error State Indicator is not active.</li>
1839 <li>dlc: Data Length Code is the number of data bytes in the received message or number of data bytes requested by RTR.</li>
1841 <p>Message reception can be disabled by de-configuring the receive object with the function <a class="el" href="group__can__interface__gr.html#ga00ec0715f6755a49dae5b60dca182630">ARM_CAN_ObjectConfigure</a>. </p>
1845 <a id="ga8d9f0c5f03a8a81ab062b5aa57e5dea4" name="ga8d9f0c5f03a8a81ab062b5aa57e5dea4"></a>
1846 <h2 class="memtitle"><span class="permalink"><a href="#ga8d9f0c5f03a8a81ab062b5aa57e5dea4">◆ </a></span>ARM_CAN_Control()</h2>
1848 <div class="memitem">
1849 <div class="memproto">
1850 <table class="memname">
1852 <td class="memname">int32_t ARM_CAN_Control </td>
1854 <td class="paramtype">uint32_t </td>
1855 <td class="paramname"><em>control</em>, </td>
1858 <td class="paramkey"></td>
1860 <td class="paramtype">uint32_t </td>
1861 <td class="paramname"><em>arg</em> </td>
1869 </div><div class="memdoc">
1871 <p>Control CAN interface. </p>
1872 <dl class="params"><dt>Parameters</dt><dd>
1873 <table class="params">
1874 <tr><td class="paramdir">[in]</td><td class="paramname">control</td><td>Operation<ul>
1875 <li><a class="el" href="group__can__mode__ctrls.html#ga978ab3e8860f644dea780e87b3478ff4">ARM_CAN_SET_FD_MODE</a> : set FD operation mode</li>
1876 <li><a class="el" href="group__can__mode__ctrls.html#gae051a548bf785104a934908360529438">ARM_CAN_ABORT_MESSAGE_SEND</a> : abort sending of CAN message</li>
1877 <li><a class="el" href="group__can__mode__ctrls.html#ga0453b8900ca3a0d5210ffd6a918a78e6">ARM_CAN_CONTROL_RETRANSMISSION</a> : enable/disable automatic retransmission</li>
1878 <li><a class="el" href="group__can__mode__ctrls.html#ga398dd25256e644cd8d6506495a06bde8">ARM_CAN_SET_TRANSCEIVER_DELAY</a> : set transceiver delay </li>
1881 <tr><td class="paramdir">[in]</td><td class="paramname">arg</td><td>Argument of operation </td></tr>
1885 <dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__execution__status.html">Status Error Codes</a></dd></dl>
1886 <p>The function <b>ARM_CAN_Control</b> controls the CAN interface settings and executes various operations.</p>
1887 <p>The parameter <em>control</em> specifies various operations that are listed in the table below.</p>
1888 <p>The parameters <em>arg</em> provides, depending on the <em>control</em> value, additional information or set values.</p>
1889 <table class="markdownTable">
1890 <tr class="markdownTableHead">
1891 <th class="markdownTableHeadLeft">Parameter <em>control</em> </th><th class="markdownTableHeadLeft">Operation </th></tr>
1892 <tr class="markdownTableRowOdd">
1893 <td class="markdownTableBodyLeft"><a class="el" href="group__can__mode__ctrls.html#ga978ab3e8860f644dea780e87b3478ff4">ARM_CAN_SET_FD_MODE</a> </td><td class="markdownTableBodyLeft">Select <a href="#CAN_FD"><b>CAN FD</b></a> mode; <em>arg</em> : <span class="XML-Token">0</span> = CAN 2.0B; <span class="XML-Token">1</span> = CAN FD. </td></tr>
1894 <tr class="markdownTableRowEven">
1895 <td class="markdownTableBodyLeft"><a class="el" href="group__can__mode__ctrls.html#gae051a548bf785104a934908360529438">ARM_CAN_ABORT_MESSAGE_SEND</a> </td><td class="markdownTableBodyLeft">Abort sending of CAN message; <em>arg</em> : object index </td></tr>
1896 <tr class="markdownTableRowOdd">
1897 <td class="markdownTableBodyLeft"><a class="el" href="group__can__mode__ctrls.html#ga0453b8900ca3a0d5210ffd6a918a78e6">ARM_CAN_CONTROL_RETRANSMISSION</a> </td><td class="markdownTableBodyLeft">Enable/disable automatic retransmission; <em>arg</em> : <span class="XML-Token">0 = disable, 1 = enable (default state)</span> </td></tr>
1898 <tr class="markdownTableRowEven">
1899 <td class="markdownTableBodyLeft"><a class="el" href="group__can__mode__ctrls.html#ga398dd25256e644cd8d6506495a06bde8">ARM_CAN_SET_TRANSCEIVER_DELAY</a> </td><td class="markdownTableBodyLeft">Set transceiver delay; <em>arg</em> : delay in time quanta </td></tr>
1901 <p>Verify the CAN interface capabilities with <a class="el" href="group__can__interface__gr.html#ga35f21cabe1637b1be964024a8f77721c">ARM_CAN_GetCapabilities</a>. </p>
1905 <a id="ga676d6b567fc4ab3d44f5d7a50ec9419c" name="ga676d6b567fc4ab3d44f5d7a50ec9419c"></a>
1906 <h2 class="memtitle"><span class="permalink"><a href="#ga676d6b567fc4ab3d44f5d7a50ec9419c">◆ </a></span>ARM_CAN_GetStatus()</h2>
1908 <div class="memitem">
1909 <div class="memproto">
1910 <table class="memname">
1912 <td class="memname"><a class="el" href="group__can__interface__gr.html#structARM__CAN__STATUS">ARM_CAN_STATUS</a> ARM_CAN_GetStatus </td>
1914 <td class="paramtype">void </td>
1915 <td class="paramname"></td><td>)</td>
1919 </div><div class="memdoc">
1921 <p>Get CAN status. </p>
1922 <dl class="section return"><dt>Returns</dt><dd>CAN status <a class="el" href="group__can__interface__gr.html#structARM__CAN__STATUS">ARM_CAN_STATUS</a></dd></dl>
1923 <p>The function <b>ARM_CAN_GetStatus</b> retrieves runtime information on CAN bus and CAN unit state.</p>
1924 <p>The following defines give information about the current unit involvement in bus communication:</p>
1925 <table class="markdownTable">
1926 <tr class="markdownTableHead">
1927 <th class="markdownTableHeadLeft">Unit State </th><th class="markdownTableHeadLeft">Description </th></tr>
1928 <tr class="markdownTableRowOdd">
1929 <td class="markdownTableBodyLeft"><a class="el" href="group__can__status__code__ctrls.html#ga911a65cc31304d57d283a21476d9ade7">ARM_CAN_UNIT_STATE_INACTIVE</a> </td><td class="markdownTableBodyLeft">Unit state: Not active on the bus. Unit is in initialization state. </td></tr>
1930 <tr class="markdownTableRowEven">
1931 <td class="markdownTableBodyLeft"><a class="el" href="group__can__status__code__ctrls.html#ga5f72c295ee2b829a8ae33b96466cc0e8">ARM_CAN_UNIT_STATE_ACTIVE</a> </td><td class="markdownTableBodyLeft">Unit state: Active on the bus. Unit can generate active error frames. </td></tr>
1932 <tr class="markdownTableRowOdd">
1933 <td class="markdownTableBodyLeft"><a class="el" href="group__can__status__code__ctrls.html#gace2db0f930f935054c21242f735e1922">ARM_CAN_UNIT_STATE_PASSIVE</a> </td><td class="markdownTableBodyLeft">Unit state: Error passive. Unit is interacting on the bus but does not send active error frames. </td></tr>
1934 <tr class="markdownTableRowEven">
1935 <td class="markdownTableBodyLeft"><a class="el" href="group__can__status__code__ctrls.html#gadd78b515410235cd77d0a10213ff4192">ARM_CAN_UNIT_STATE_BUS_OFF</a> </td><td class="markdownTableBodyLeft">Unit state: Bus-off. Unit does not participate on the bus but monitors it and can recover to active state. </td></tr>
1937 <p>The following defines are error codes of the last error that happened on the bus:</p>
1938 <table class="markdownTable">
1939 <tr class="markdownTableHead">
1940 <th class="markdownTableHeadLeft">Last Error Code </th><th class="markdownTableHeadLeft">Description </th></tr>
1941 <tr class="markdownTableRowOdd">
1942 <td class="markdownTableBodyLeft"><a class="el" href="group__can__status__code__ctrls.html#ga5332a311f44caec256d59087c705e1e9">ARM_CAN_LEC_NO_ERROR</a> </td><td class="markdownTableBodyLeft">No error. There was no error since last read of status or last successful transmit or receive. </td></tr>
1943 <tr class="markdownTableRowEven">
1944 <td class="markdownTableBodyLeft"><a class="el" href="group__can__status__code__ctrls.html#ga0571c3c3e341ac0579aa713fdfdae77e">ARM_CAN_LEC_BIT_ERROR</a> </td><td class="markdownTableBodyLeft">Bit error. The bit monitored is different than the bit sent (except during arbitration phase). </td></tr>
1945 <tr class="markdownTableRowOdd">
1946 <td class="markdownTableBodyLeft"><a class="el" href="group__can__status__code__ctrls.html#ga33cbda311f4c2f2464e4070dee78b2f2">ARM_CAN_LEC_STUFF_ERROR</a> </td><td class="markdownTableBodyLeft">Bit stuffing error. There were 6 consecutive same bit levels on the bus. </td></tr>
1947 <tr class="markdownTableRowEven">
1948 <td class="markdownTableBodyLeft"><a class="el" href="group__can__status__code__ctrls.html#ga1380f80b709ca921634aecdaf34a24e5">ARM_CAN_LEC_CRC_ERROR</a> </td><td class="markdownTableBodyLeft">CRC error. CRC of received data is not as expected. </td></tr>
1949 <tr class="markdownTableRowOdd">
1950 <td class="markdownTableBodyLeft"><a class="el" href="group__can__status__code__ctrls.html#ga9f753ba50045b28653fb3215ec2e4b8a">ARM_CAN_LEC_FORM_ERROR</a> </td><td class="markdownTableBodyLeft">Illegal fixed-form bit. Error in fixed form bits. </td></tr>
1951 <tr class="markdownTableRowEven">
1952 <td class="markdownTableBodyLeft"><a class="el" href="group__can__status__code__ctrls.html#gaae6e827242137bc4d8976cd4ba73015f">ARM_CAN_LEC_ACK_ERROR</a> </td><td class="markdownTableBodyLeft">Acknowledgment error. Message was not acknowledged by any receiver on the bus. </td></tr>
1957 <a id="ga38795d1ed135ce3bd87f31ef1596bccf" name="ga38795d1ed135ce3bd87f31ef1596bccf"></a>
1958 <h2 class="memtitle"><span class="permalink"><a href="#ga38795d1ed135ce3bd87f31ef1596bccf">◆ </a></span>ARM_CAN_SignalUnitEvent()</h2>
1960 <div class="memitem">
1961 <div class="memproto">
1962 <table class="memname">
1964 <td class="memname">void ARM_CAN_SignalUnitEvent </td>
1966 <td class="paramtype">uint32_t </td>
1967 <td class="paramname"><em>event</em></td><td>)</td>
1971 </div><div class="memdoc">
1973 <p>Signal CAN unit event. </p>
1974 <dl class="params"><dt>Parameters</dt><dd>
1975 <table class="params">
1976 <tr><td class="paramdir">[in]</td><td class="paramname">event</td><td><a class="el" href="group__CAN__unit__events.html">CAN Unit Events</a> </td></tr>
1980 <dl class="section return"><dt>Returns</dt><dd>none</dd></dl>
1981 <p>The function <b>ARM_CAN_SignalUnitEvent</b> is a callback function registered by the function <a class="el" href="group__can__interface__gr.html#gaa72ceb25ba67e279d7432404632deb44">ARM_CAN_Initialize</a>.</p>
1982 <p>The parameter <em>event</em> indicates unit event that occurred during driver operation.</p>
1983 <p>The following callback notifications are generated:</p>
1984 <table class="markdownTable">
1985 <tr class="markdownTableHead">
1986 <th class="markdownTableHeadLeft">Parameter <em>event</em> </th><th class="markdownTableHeadCenter">Value </th><th class="markdownTableHeadLeft">Description </th></tr>
1987 <tr class="markdownTableRowOdd">
1988 <td class="markdownTableBodyLeft"><a class="el" href="group__CAN__unit__events.html#gaa2347c172c8a8f42ac66cb42cd7a08db">ARM_CAN_EVENT_UNIT_INACTIVE</a> </td><td class="markdownTableBodyCenter">0 </td><td class="markdownTableBodyLeft">Unit entered Inactive state. </td></tr>
1989 <tr class="markdownTableRowEven">
1990 <td class="markdownTableBodyLeft"><a class="el" href="group__CAN__unit__events.html#ga0e65231ccb20684d7c8eac80385f8c18">ARM_CAN_EVENT_UNIT_ACTIVE</a> </td><td class="markdownTableBodyCenter">1 </td><td class="markdownTableBodyLeft">Unit entered Error Active state. </td></tr>
1991 <tr class="markdownTableRowOdd">
1992 <td class="markdownTableBodyLeft"><a class="el" href="group__CAN__unit__events.html#ga3690f864edd2e124f4f9875fdde9a2eb">ARM_CAN_EVENT_UNIT_WARNING</a> </td><td class="markdownTableBodyCenter">2 </td><td class="markdownTableBodyLeft">Unit entered Error Warning state (one or both error counters >= <span class="XML-Token">96</span>). </td></tr>
1993 <tr class="markdownTableRowEven">
1994 <td class="markdownTableBodyLeft"><a class="el" href="group__CAN__unit__events.html#ga9c529d6697fe21e69639224322f8c4b4">ARM_CAN_EVENT_UNIT_PASSIVE</a> </td><td class="markdownTableBodyCenter">3 </td><td class="markdownTableBodyLeft">Unit entered Error Passive state. </td></tr>
1995 <tr class="markdownTableRowOdd">
1996 <td class="markdownTableBodyLeft"><a class="el" href="group__CAN__unit__events.html#gafa4f992a97b4ca0f079aec2990a69bed">ARM_CAN_EVENT_UNIT_BUS_OFF</a> </td><td class="markdownTableBodyCenter">4 </td><td class="markdownTableBodyLeft">Unit entered Bus-off state. </td></tr>
1998 <dl class="section see"><dt>See also</dt><dd><a class="el" href="group__can__interface__gr.html#ga676d6b567fc4ab3d44f5d7a50ec9419c">ARM_CAN_GetStatus</a> </dd></dl>
2002 <a id="gabfcaeac9e2ca25936ba5a29f2d594e7e" name="gabfcaeac9e2ca25936ba5a29f2d594e7e"></a>
2003 <h2 class="memtitle"><span class="permalink"><a href="#gabfcaeac9e2ca25936ba5a29f2d594e7e">◆ </a></span>ARM_CAN_SignalObjectEvent()</h2>
2005 <div class="memitem">
2006 <div class="memproto">
2007 <table class="memname">
2009 <td class="memname">void ARM_CAN_SignalObjectEvent </td>
2011 <td class="paramtype">uint32_t </td>
2012 <td class="paramname"><em>obj_idx</em>, </td>
2015 <td class="paramkey"></td>
2017 <td class="paramtype">uint32_t </td>
2018 <td class="paramname"><em>event</em> </td>
2026 </div><div class="memdoc">
2028 <p>Signal CAN object event. </p>
2029 <dl class="params"><dt>Parameters</dt><dd>
2030 <table class="params">
2031 <tr><td class="paramdir">[in]</td><td class="paramname">obj_idx</td><td>Object index </td></tr>
2032 <tr><td class="paramdir">[in]</td><td class="paramname">event</td><td><a class="el" href="group__CAN__events.html">CAN Object Events</a> </td></tr>
2036 <dl class="section return"><dt>Returns</dt><dd>none</dd></dl>
2037 <p>The function <b>ARM_CAN_SignalObjectEvent</b> is a callback function registered by the function <a class="el" href="group__can__interface__gr.html#gaa72ceb25ba67e279d7432404632deb44">ARM_CAN_Initialize</a> and signals a CAN message object event.</p>
2038 <p>The parameter <em>obj_idx</em> is the index of the message object. <br />
2039 The parameter <em>event</em> indicates object event that occurred during driver operation.</p>
2040 <p>The following events can be generated:</p>
2041 <table class="markdownTable">
2042 <tr class="markdownTableHead">
2043 <th class="markdownTableHeadLeft">Parameter <em>event</em> </th><th class="markdownTableHeadCenter">Bit </th><th class="markdownTableHeadLeft">Description </th></tr>
2044 <tr class="markdownTableRowOdd">
2045 <td class="markdownTableBodyLeft"><a class="el" href="group__CAN__events.html#ga486f0f35ebc7e3b5931ee68b56703503">ARM_CAN_EVENT_SEND_COMPLETE</a> </td><td class="markdownTableBodyCenter">0 </td><td class="markdownTableBodyLeft">Message was sent successfully by the <em>obj_idx</em> object. </td></tr>
2046 <tr class="markdownTableRowEven">
2047 <td class="markdownTableBodyLeft"><a class="el" href="group__CAN__events.html#ga2c1082561eeae3b2b8132e81fc241e47">ARM_CAN_EVENT_RECEIVE</a> </td><td class="markdownTableBodyCenter">1 </td><td class="markdownTableBodyLeft">Message was received successfully by the <em>obj_idx</em> object. </td></tr>
2048 <tr class="markdownTableRowOdd">
2049 <td class="markdownTableBodyLeft"><a class="el" href="group__CAN__events.html#ga6c2d29b5c49d5cd18e97f5931157a94c">ARM_CAN_EVENT_RECEIVE_OVERRUN</a> </td><td class="markdownTableBodyCenter">2 </td><td class="markdownTableBodyLeft">Message was overwritten before it was read on the <em>obj_idx</em> object. </td></tr>
2051 <dl class="section see"><dt>See also</dt><dd><a class="el" href="group__can__interface__gr.html#ga0dcffd362b4093043442a030eaebbcfe">ARM_CAN_MessageSend</a> </dd>
2053 <a class="el" href="group__can__interface__gr.html#gafc37084df5eab32f593c2744d35cf647">ARM_CAN_MessageRead</a> </dd>
2055 <a class="el" href="group__can__interface__gr.html#ga00ec0715f6755a49dae5b60dca182630">ARM_CAN_ObjectConfigure</a> </dd></dl>
2059 </div><!-- contents -->
2060 </div><!-- doc-content -->
2061 <!-- start footer part -->
2062 <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
2065 <script type="text/javascript">
2067 writeFooter.call(this);