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-Core (Cortex-M): MPU Functions for Armv6-M/v7-M</title>
9 <link href="doxygen.css" rel="stylesheet" type="text/css" />
10 <script type="text/javascript" src="jquery.js"></script>
11 <script type="text/javascript" src="dynsections.js"></script>
12 <script type="text/javascript" src="tabs.js"></script>
13 <script type="text/javascript" src="footer.js"></script>
14 <script type="text/javascript" src="navtree.js"></script>
15 <link href="navtree.css" rel="stylesheet" type="text/css"/>
16 <script type="text/javascript" src="resize.js"></script>
17 <script type="text/javascript" src="navtreedata.js"></script>
18 <script type="text/javascript" src="navtree.js"></script>
19 <link href="search/search.css" rel="stylesheet" type="text/css"/>
20 <script type="text/javascript" src="search/searchdata.js"></script>
21 <script type="text/javascript" src="search/search.js"></script>
22 <script type="text/javascript">
23 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
24 $(document).ready(function() { init_search(); });
27 <script type="text/javascript" src="darkmode_toggle.js"></script>
28 <link href="extra_stylesheet.css" rel="stylesheet" type="text/css"/>
29 <link href="extra_navtree.css" rel="stylesheet" type="text/css"/>
30 <link href="extra_search.css" rel="stylesheet" type="text/css"/>
31 <link href="extra_tabs.css" rel="stylesheet" type="text/css"/>
32 <link href="version.css" rel="stylesheet" type="text/css"/>
33 <script type="text/javascript" src="../../version.js"></script>
36 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
38 <table cellspacing="0" cellpadding="0">
40 <tr style="height: 55px;">
41 <td id="projectlogo" style="padding: 1.5em;"><img alt="Logo" src="cmsis_logo_white_small.png"/></td>
42 <td style="padding-left: 1em; padding-bottom: 1em;padding-top: 1em;">
43 <div id="projectname">CMSIS-Core (Cortex-M)
44  <span id="projectnumber"><script type="text/javascript">
46 writeHeader.call(this);
47 writeVersionDropdown.call(this, "CMSIS-Core (Cortex-M)");
52 <div id="projectbrief">CMSIS-Core support for Cortex-M processor-based devices</div>
54 <td> <div id="MSearchBox" class="MSearchBoxInactive">
56 <span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()"> </span>
57 <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
58 onfocus="searchBox.OnSearchFieldFocus(true)"
59 onblur="searchBox.OnSearchFieldFocus(false)"
60 onkeyup="searchBox.OnSearchFieldChange(event)"/>
61 </span><span class="right">
62 <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
66 <!--END !PROJECT_NAME-->
71 <!-- end header part -->
72 <div id="CMSISnav" class="tabs1">
74 <script type="text/javascript">
75 writeComponentTabs.call(this);
79 <script type="text/javascript">
80 writeSubComponentTabs.call(this);
82 <!-- Generated by Doxygen 1.9.6 -->
83 <script type="text/javascript">
84 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
85 var searchBox = new SearchBox("searchBox", "search/",'.html');
89 <div id="side-nav" class="ui-resizable side-nav-resizable">
91 <div id="nav-tree-contents">
92 <div id="nav-sync" class="sync"></div>
95 <div id="splitbar" style="-moz-user-select:none;"
96 class="ui-resizable-handle">
99 <script type="text/javascript">
100 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
101 $(document).ready(function(){initNavTree('group__mpu__functions.html',''); initResizable(); });
104 <div id="doc-content">
105 <!-- window showing the filter options -->
106 <div id="MSearchSelectWindow"
107 onmouseover="return searchBox.OnSearchSelectShow()"
108 onmouseout="return searchBox.OnSearchSelectHide()"
109 onkeydown="return searchBox.OnSearchSelectKey(event)">
112 <!-- iframe showing the search results (closed by default) -->
113 <div id="MSearchResultsWindow">
114 <div id="MSearchResults">
117 <div id="SRResults"></div>
118 <div class="SRStatus" id="Loading">Loading...</div>
119 <div class="SRStatus" id="Searching">Searching...</div>
120 <div class="SRStatus" id="NoMatches">No Matches</div>
127 <div class="summary">
128 <a href="#groups">Content</a> |
129 <a href="#nested-classes">Data Structures</a> |
130 <a href="#define-members">Macros</a> |
131 <a href="#func-members">Functions</a> </div>
132 <div class="headertitle"><div class="title">MPU Functions for Armv6-M/v7-M</div></div>
134 <div class="contents">
136 <p>Functions that relate to the Memory Protection Unit.
137 <a href="#details">More...</a></p>
138 <table class="memberdecls">
139 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="groups" name="groups"></a>
140 Content</h2></td></tr>
141 <tr class="memitem:group__mpu__defines"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mpu__defines.html">Define values</a></td></tr>
142 <tr class="memdesc:group__mpu__defines"><td class="mdescLeft"> </td><td class="mdescRight">Define values for MPU region setup. <br /></td></tr>
143 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
144 </table><table class="memberdecls">
145 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
146 Data Structures</h2></td></tr>
147 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structARM__MPU__Region__t.html">ARM_MPU_Region_t</a></td></tr>
148 <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Setup information of a single MPU Region. <a href="structARM__MPU__Region__t.html#details">More...</a><br /></td></tr>
149 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
150 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structMPU__Type.html">MPU_Type</a></td></tr>
151 <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure type to access the Memory Protection Unit (MPU). <a href="structMPU__Type.html#details">More...</a><br /></td></tr>
152 <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
153 </table><table class="memberdecls">
154 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
155 Macros</h2></td></tr>
156 <tr class="memitem:ga96b93785c92e2dbcb3a2356c25bf2adc"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a>(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size)</td></tr>
157 <tr class="memdesc:ga96b93785c92e2dbcb3a2356c25bf2adc"><td class="mdescLeft"> </td><td class="mdescRight">MPU Region Attribute and Size Register Value. <br /></td></tr>
158 <tr class="separator:ga96b93785c92e2dbcb3a2356c25bf2adc"><td class="memSeparator" colspan="2"> </td></tr>
159 <tr class="memitem:ga332ed5f8969dd4df6b61c6ae32ec36dc"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mpu__functions.html#ga332ed5f8969dd4df6b61c6ae32ec36dc">ARM_MPU_RASR_EX</a>(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size)</td></tr>
160 <tr class="memdesc:ga332ed5f8969dd4df6b61c6ae32ec36dc"><td class="mdescLeft"> </td><td class="mdescRight">MPU Region Attribute and Size Register Value. <br /></td></tr>
161 <tr class="separator:ga332ed5f8969dd4df6b61c6ae32ec36dc"><td class="memSeparator" colspan="2"> </td></tr>
162 <tr class="memitem:ga3fead12dc24a6d00ad53f55a042486ca"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mpu__functions.html#ga3fead12dc24a6d00ad53f55a042486ca">ARM_MPU_RBAR</a>(Region, BaseAddress)</td></tr>
163 <tr class="memdesc:ga3fead12dc24a6d00ad53f55a042486ca"><td class="mdescLeft"> </td><td class="mdescRight">MPU Region Base Address Register Value. <br /></td></tr>
164 <tr class="separator:ga3fead12dc24a6d00ad53f55a042486ca"><td class="memSeparator" colspan="2"> </td></tr>
165 </table><table class="memberdecls">
166 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
167 Functions</h2></td></tr>
168 <tr class="memitem:ga9dcb0afddf4ac351f33f3c7a5169c62c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__compiler__conntrol__gr.html#gaba87361bfad2ae52cfe2f40c1a1dbf9c">__STATIC_INLINE</a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mpu__functions.html#ga9dcb0afddf4ac351f33f3c7a5169c62c">ARM_MPU_ClrRegion</a> (uint32_t rnr)</td></tr>
169 <tr class="separator:ga9dcb0afddf4ac351f33f3c7a5169c62c"><td class="memSeparator" colspan="2"> </td></tr>
170 <tr class="memitem:ga7cbc0a4a066ed90e85c8176228235d57"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__compiler__conntrol__gr.html#gaba87361bfad2ae52cfe2f40c1a1dbf9c">__STATIC_INLINE</a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mpu__functions.html#ga7cbc0a4a066ed90e85c8176228235d57">ARM_MPU_Disable</a> ()</td></tr>
171 <tr class="separator:ga7cbc0a4a066ed90e85c8176228235d57"><td class="memSeparator" colspan="2"> </td></tr>
172 <tr class="memitem:ga31406efd492ec9a091a70ffa2d8a42fb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__compiler__conntrol__gr.html#gaba87361bfad2ae52cfe2f40c1a1dbf9c">__STATIC_INLINE</a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mpu__functions.html#ga31406efd492ec9a091a70ffa2d8a42fb">ARM_MPU_Enable</a> (uint32_t MPU_CTRL)</td></tr>
173 <tr class="memdesc:ga31406efd492ec9a091a70ffa2d8a42fb"><td class="mdescLeft"> </td><td class="mdescRight">Enable the memory protection unit (MPU) and. <br /></td></tr>
174 <tr class="separator:ga31406efd492ec9a091a70ffa2d8a42fb"><td class="memSeparator" colspan="2"> </td></tr>
175 <tr class="memitem:gafa27b26d5847fa8e465584e376b6078a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__compiler__conntrol__gr.html#gaba87361bfad2ae52cfe2f40c1a1dbf9c">__STATIC_INLINE</a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mpu__functions.html#gafa27b26d5847fa8e465584e376b6078a">ARM_MPU_Load</a> (MPU_Region_t const *table, uint32_t cnt)</td></tr>
176 <tr class="separator:gafa27b26d5847fa8e465584e376b6078a"><td class="memSeparator" colspan="2"> </td></tr>
177 <tr class="memitem:gac1a949403bf84eecaf407003fb553ae7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__compiler__conntrol__gr.html#gaba87361bfad2ae52cfe2f40c1a1dbf9c">__STATIC_INLINE</a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mpu__functions.html#gac1a949403bf84eecaf407003fb553ae7">ARM_MPU_OrderedMemcpy</a> (volatile uint32_t *dst, const uint32_t *<a class="el" href="group__compiler__conntrol__gr.html#ga378ac21329d33f561f90265eef89f564">__RESTRICT</a> src, uint32_t len)</td></tr>
178 <tr class="separator:gac1a949403bf84eecaf407003fb553ae7"><td class="memSeparator" colspan="2"> </td></tr>
179 <tr class="memitem:ga16931f9ad84d7289e8218e169ae6db5d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__compiler__conntrol__gr.html#gaba87361bfad2ae52cfe2f40c1a1dbf9c">__STATIC_INLINE</a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mpu__functions.html#ga16931f9ad84d7289e8218e169ae6db5d">ARM_MPU_SetRegion</a> (uint32_t rbar, uint32_t rasr)</td></tr>
180 <tr class="separator:ga16931f9ad84d7289e8218e169ae6db5d"><td class="memSeparator" colspan="2"> </td></tr>
181 <tr class="memitem:ga042ba1a6a1a58795231459ac0410b809"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__compiler__conntrol__gr.html#gaba87361bfad2ae52cfe2f40c1a1dbf9c">__STATIC_INLINE</a> void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mpu__functions.html#ga042ba1a6a1a58795231459ac0410b809">ARM_MPU_SetRegionEx</a> (uint32_t rnr, uint32_t rbar, uint32_t rasr)</td></tr>
182 <tr class="separator:ga042ba1a6a1a58795231459ac0410b809"><td class="memSeparator" colspan="2"> </td></tr>
184 <a name="details" id="details"></a><h2 class="groupheader">Description</h2>
185 <p>Functions that relate to the Memory Protection Unit. </p>
186 <p>The following functions support the optional Memory Protection Unit (MPU) that is available on the Cortex-M0+, M3, M4 and M7 processor.</p>
187 <p>The MPU is used to prevent from illegal memory accesses that are typically caused by errors in an application software.</p>
188 <p><b>Example:</b> </p><div class="fragment"><div class="line"><span class="keywordtype">int</span> main() </div>
189 <div class="line">{</div>
190 <div class="line"> <span class="comment">// Set Region 0</span></div>
191 <div class="line"> <a class="code hl_function" href="group__mpu__functions.html#ga042ba1a6a1a58795231459ac0410b809">ARM_MPU_SetRegionEx</a>(0UL, 0x08000000UL, <a class="code hl_define" href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a>(0UL, ARM_MPU_AP_FULL, 0UL, 0UL, 1UL, 1UL, 0x00UL, ARM_MPU_REGION_SIZE_1MB));</div>
192 <div class="line"> </div>
193 <div class="line"> <a class="code hl_function" href="group__mpu__functions.html#ga31406efd492ec9a091a70ffa2d8a42fb">ARM_MPU_Enable</a>(0);</div>
194 <div class="line"> </div>
195 <div class="line"> <span class="comment">// Execute application code that is access protected by the MPU</span></div>
196 <div class="line"> </div>
197 <div class="line"> <a class="code hl_function" href="group__mpu__functions.html#ga7cbc0a4a066ed90e85c8176228235d57">ARM_MPU_Disable</a>();</div>
198 <div class="line">}</div>
199 <div class="ttc" id="agroup__mpu__functions_html_ga042ba1a6a1a58795231459ac0410b809"><div class="ttname"><a href="group__mpu__functions.html#ga042ba1a6a1a58795231459ac0410b809">ARM_MPU_SetRegionEx</a></div><div class="ttdeci">__STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr)</div></div>
200 <div class="ttc" id="agroup__mpu__functions_html_ga31406efd492ec9a091a70ffa2d8a42fb"><div class="ttname"><a href="group__mpu__functions.html#ga31406efd492ec9a091a70ffa2d8a42fb">ARM_MPU_Enable</a></div><div class="ttdeci">__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_CTRL)</div><div class="ttdoc">Enable the memory protection unit (MPU) and.</div></div>
201 <div class="ttc" id="agroup__mpu__functions_html_ga7cbc0a4a066ed90e85c8176228235d57"><div class="ttname"><a href="group__mpu__functions.html#ga7cbc0a4a066ed90e85c8176228235d57">ARM_MPU_Disable</a></div><div class="ttdeci">__STATIC_INLINE void ARM_MPU_Disable()</div></div>
202 <div class="ttc" id="agroup__mpu__functions_html_ga96b93785c92e2dbcb3a2356c25bf2adc"><div class="ttname"><a href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a></div><div class="ttdeci">#define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size)</div><div class="ttdoc">MPU Region Attribute and Size Register Value.</div><div class="ttdef"><b>Definition:</b> ref_mpu.txt:59</div></div>
203 </div><!-- fragment --> <h2 class="groupheader">Macro Definition Documentation</h2>
204 <a id="ga96b93785c92e2dbcb3a2356c25bf2adc" name="ga96b93785c92e2dbcb3a2356c25bf2adc"></a>
205 <h2 class="memtitle"><span class="permalink"><a href="#ga96b93785c92e2dbcb3a2356c25bf2adc">◆ </a></span>ARM_MPU_RASR</h2>
207 <div class="memitem">
208 <div class="memproto">
209 <table class="memname">
211 <td class="memname">#define ARM_MPU_RASR</td>
213 <td class="paramtype"> </td>
214 <td class="paramname">DisableExec, </td>
217 <td class="paramkey"></td>
219 <td class="paramtype"> </td>
220 <td class="paramname">AccessPermission, </td>
223 <td class="paramkey"></td>
225 <td class="paramtype"> </td>
226 <td class="paramname">TypeExtField, </td>
229 <td class="paramkey"></td>
231 <td class="paramtype"> </td>
232 <td class="paramname">IsShareable, </td>
235 <td class="paramkey"></td>
237 <td class="paramtype"> </td>
238 <td class="paramname">IsCacheable, </td>
241 <td class="paramkey"></td>
243 <td class="paramtype"> </td>
244 <td class="paramname">IsBufferable, </td>
247 <td class="paramkey"></td>
249 <td class="paramtype"> </td>
250 <td class="paramname">SubRegionDisable, </td>
253 <td class="paramkey"></td>
255 <td class="paramtype"> </td>
256 <td class="paramname">Size </td>
264 </div><div class="memdoc">
266 <p>MPU Region Attribute and Size Register Value. </p>
267 <p>This macro is used to construct a valid <a class="el" href="structMPU__Type.html#a8f00c4a5e31b0a8d103ed3b0732c17a3">RASR</a> value. The ENABLE bit of the RASR value is implicitly set to 1.</p>
268 <dl class="params"><dt>Parameters</dt><dd>
269 <table class="params">
270 <tr><td class="paramname">DisableExec</td><td>Instruction access disable bit. 1 = disable instruction fetches. </td></tr>
271 <tr><td class="paramname">AccessPermission</td><td>Data access permission configures read/write access for User and Privileged mode. Possible values see <a class="el" href="group__mpu__defines.html#gabc4788126d7798469cb862a08d3050cc">ARM_MPU_AP_xxx</a>. </td></tr>
272 <tr><td class="paramname">TypeExtField</td><td>Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. </td></tr>
273 <tr><td class="paramname">IsShareable</td><td>1 = region is shareable between multiple bus masters. </td></tr>
274 <tr><td class="paramname">IsCacheable</td><td>1 = region is cacheable (values may be kept in cache). </td></tr>
275 <tr><td class="paramname">IsBufferable</td><td>1 = region is bufferable (when using write-back caching). Cacheable but non-bufferable regions use write-through policy. </td></tr>
276 <tr><td class="paramname">SubRegionDisable</td><td>Sub-region disable field (8 bits). </td></tr>
277 <tr><td class="paramname">Size</td><td>Region size with values defined under <a class="el" href="group__mpu__defines.html#gadb0a92c0928c113120567e85ff1ba05c">ARM_MPU_REGION_SIZE_xxx</a>. </td></tr>
284 <a id="ga332ed5f8969dd4df6b61c6ae32ec36dc" name="ga332ed5f8969dd4df6b61c6ae32ec36dc"></a>
285 <h2 class="memtitle"><span class="permalink"><a href="#ga332ed5f8969dd4df6b61c6ae32ec36dc">◆ </a></span>ARM_MPU_RASR_EX</h2>
287 <div class="memitem">
288 <div class="memproto">
289 <table class="memname">
291 <td class="memname">#define ARM_MPU_RASR_EX</td>
293 <td class="paramtype"> </td>
294 <td class="paramname">DisableExec, </td>
297 <td class="paramkey"></td>
299 <td class="paramtype"> </td>
300 <td class="paramname">AccessPermission, </td>
303 <td class="paramkey"></td>
305 <td class="paramtype"> </td>
306 <td class="paramname">AccessAttributes, </td>
309 <td class="paramkey"></td>
311 <td class="paramtype"> </td>
312 <td class="paramname">SubRegionDisable, </td>
315 <td class="paramkey"></td>
317 <td class="paramtype"> </td>
318 <td class="paramname">Size </td>
326 </div><div class="memdoc">
328 <p>MPU Region Attribute and Size Register Value. </p>
329 <p>This macro is used to construct a valid <a class="el" href="structMPU__Type.html#a8f00c4a5e31b0a8d103ed3b0732c17a3">RASR</a> value. The ENABLE bit of the RASR value is implicitly set to 1.</p>
330 <dl class="params"><dt>Parameters</dt><dd>
331 <table class="params">
332 <tr><td class="paramname">DisableExec</td><td>Instruction access disable bit, 1= disable instruction fetches. </td></tr>
333 <tr><td class="paramname">AccessPermission</td><td>Data access permission configures read/write access for User and Privileged mode. Possible values see <a class="el" href="group__mpu__defines.html#gabc4788126d7798469cb862a08d3050cc">ARM_MPU_AP_xxx</a>. </td></tr>
334 <tr><td class="paramname">AccessAttributes</td><td>Memory access attribution, see <a class="el" href="group__mpu__defines.html#ga71d41084e984be70a23cb640fd89d1e2">ARM_MPU_ACCESS_xxx</a>. </td></tr>
335 <tr><td class="paramname">SubRegionDisable</td><td>Sub-region disable field (8 bits). </td></tr>
336 <tr><td class="paramname">Size</td><td>Region size with values defined under <a class="el" href="group__mpu__defines.html#gadb0a92c0928c113120567e85ff1ba05c">ARM_MPU_REGION_SIZE_xxx</a>. </td></tr>
343 <a id="ga3fead12dc24a6d00ad53f55a042486ca" name="ga3fead12dc24a6d00ad53f55a042486ca"></a>
344 <h2 class="memtitle"><span class="permalink"><a href="#ga3fead12dc24a6d00ad53f55a042486ca">◆ </a></span>ARM_MPU_RBAR</h2>
346 <div class="memitem">
347 <div class="memproto">
348 <table class="memname">
350 <td class="memname">#define ARM_MPU_RBAR</td>
352 <td class="paramtype"> </td>
353 <td class="paramname">Region, </td>
356 <td class="paramkey"></td>
358 <td class="paramtype"> </td>
359 <td class="paramname">BaseAddress </td>
367 </div><div class="memdoc">
369 <p>MPU Region Base Address Register Value. </p>
370 <p>This preprocessor function can be used to construct a valid <a class="el" href="structMPU__Type.html#a990c609b26d990b8ba832b110adfd353">RBAR</a> value. The VALID bit is implicitly set to 1.</p>
371 <dl class="params"><dt>Parameters</dt><dd>
372 <table class="params">
373 <tr><td class="paramname">Region</td><td>The region to be configured, number 0 to 15. </td></tr>
374 <tr><td class="paramname">BaseAddress</td><td>The base address for the region. </td></tr>
381 <h2 class="groupheader">Function Documentation</h2>
382 <a id="ga9dcb0afddf4ac351f33f3c7a5169c62c" name="ga9dcb0afddf4ac351f33f3c7a5169c62c"></a>
383 <h2 class="memtitle"><span class="permalink"><a href="#ga9dcb0afddf4ac351f33f3c7a5169c62c">◆ </a></span>ARM_MPU_ClrRegion()</h2>
385 <div class="memitem">
386 <div class="memproto">
387 <table class="memname">
389 <td class="memname"><a class="el" href="group__compiler__conntrol__gr.html#gaba87361bfad2ae52cfe2f40c1a1dbf9c">__STATIC_INLINE</a> void ARM_MPU_ClrRegion </td>
391 <td class="paramtype">uint32_t </td>
392 <td class="paramname"><em>rnr</em></td><td>)</td>
396 </div><div class="memdoc">
397 <p>Clear and disable the given MPU region. </p><dl class="params"><dt>Parameters</dt><dd>
398 <table class="params">
399 <tr><td class="paramname">rnr</td><td>Region number to be cleared. </td></tr>
406 <a id="ga7cbc0a4a066ed90e85c8176228235d57" name="ga7cbc0a4a066ed90e85c8176228235d57"></a>
407 <h2 class="memtitle"><span class="permalink"><a href="#ga7cbc0a4a066ed90e85c8176228235d57">◆ </a></span>ARM_MPU_Disable()</h2>
409 <div class="memitem">
410 <div class="memproto">
411 <table class="memname">
413 <td class="memname"><a class="el" href="group__compiler__conntrol__gr.html#gaba87361bfad2ae52cfe2f40c1a1dbf9c">__STATIC_INLINE</a> void ARM_MPU_Disable </td>
415 <td class="paramname"></td><td>)</td>
419 </div><div class="memdoc">
420 <p>Disable the MPU. </p>
424 <a id="ga31406efd492ec9a091a70ffa2d8a42fb" name="ga31406efd492ec9a091a70ffa2d8a42fb"></a>
425 <h2 class="memtitle"><span class="permalink"><a href="#ga31406efd492ec9a091a70ffa2d8a42fb">◆ </a></span>ARM_MPU_Enable()</h2>
427 <div class="memitem">
428 <div class="memproto">
429 <table class="memname">
431 <td class="memname"><a class="el" href="group__compiler__conntrol__gr.html#gaba87361bfad2ae52cfe2f40c1a1dbf9c">__STATIC_INLINE</a> void ARM_MPU_Enable </td>
433 <td class="paramtype">uint32_t </td>
434 <td class="paramname"><em>MPU_CTRL</em></td><td>)</td>
438 </div><div class="memdoc">
440 <p>Enable the memory protection unit (MPU) and. </p>
441 <dl class="params"><dt>Parameters</dt><dd>
442 <table class="params">
443 <tr><td class="paramname">MPU_CTRL</td><td>Additional control settings that configure MPU behaviour</td></tr>
447 <p>The function <a class="el" href="group__mpu__functions.html#ga31406efd492ec9a091a70ffa2d8a42fb">ARM_MPU_Enable</a> writes to the register <a class="el" href="structMPU__Type.html#a769178ef949f0d5d8f18ddbd9e4e926f">MPU->CTRL</a> and sets bit ENABLE. The parameter <em>MPU_CTRL</em> provides additional bit values (see table below) that configure the MPU behaviour. For processors that implement an <b>MPU Fault Handler</b> the <a class="el" href="group__NVIC__gr.html">MemoryManagement_IRQn</a> exception is enabled by setting the bit MEMFAULTACT in register SBC->SHCSR.</p>
448 <p>The following table contains possible values for the parameter <em>MPU_CTRL</em> that set specific bits in register MPU->CTRL. </p><table class="markdownTable">
449 <tr class="markdownTableHead">
450 <th class="markdownTableHeadLeft">Bit </th><th class="markdownTableHeadLeft">MPU_CTRL value </th><th class="markdownTableHeadLeft">When applied </th><th class="markdownTableHeadLeft">When not applied </th></tr>
451 <tr class="markdownTableRowOdd">
452 <td class="markdownTableBodyLeft">1 </td><td class="markdownTableBodyLeft">MPU_CTRL_HFNMIENA_Msk </td><td class="markdownTableBodyLeft">Enable MPU during hard fault, NMI, and FAULTMASK handlers execution </td><td class="markdownTableBodyLeft">Disable MPU during hard fault, NMI, and FAULTMASK handler execution </td></tr>
453 <tr class="markdownTableRowEven">
454 <td class="markdownTableBodyLeft">2 </td><td class="markdownTableBodyLeft">MPU_CTRL_PRIVDEFENA_Msk </td><td class="markdownTableBodyLeft">Enable default memory map as a background region for privileged access </td><td class="markdownTableBodyLeft">Use only MPU region settings </td></tr>
456 <p><b>Example:</b></p>
457 <div class="fragment"><div class="line"><span class="comment">// enable MPU with all region definitions. Exceptions are not protected by MPU.</span></div>
458 <div class="line"> MPU_Enable (0);</div>
459 <div class="line"> </div>
460 <div class="line"><span class="comment">// enable MPU with all region definitions and background regions for privileged access. Exceptions are protected by MPU.</span></div>
461 <div class="line"> MPU_Enable (MPU_CTRL_PRIVDEFENA_Msk | MPU_CTRL_HFNMIENA_Msk);</div>
462 </div><!-- fragment -->
465 <a id="gafa27b26d5847fa8e465584e376b6078a" name="gafa27b26d5847fa8e465584e376b6078a"></a>
466 <h2 class="memtitle"><span class="permalink"><a href="#gafa27b26d5847fa8e465584e376b6078a">◆ </a></span>ARM_MPU_Load()</h2>
468 <div class="memitem">
469 <div class="memproto">
470 <table class="memname">
472 <td class="memname"><a class="el" href="group__compiler__conntrol__gr.html#gaba87361bfad2ae52cfe2f40c1a1dbf9c">__STATIC_INLINE</a> void ARM_MPU_Load </td>
474 <td class="paramtype">MPU_Region_t const * </td>
475 <td class="paramname"><em>table</em>, </td>
478 <td class="paramkey"></td>
480 <td class="paramtype">uint32_t </td>
481 <td class="paramname"><em>cnt</em> </td>
489 </div><div class="memdoc">
490 <p>Load the given number of MPU regions from a table. </p><dl class="params"><dt>Parameters</dt><dd>
491 <table class="params">
492 <tr><td class="paramname">table</td><td>Pointer to the MPU configuration table. </td></tr>
493 <tr><td class="paramname">cnt</td><td>Number of regions to be configured.</td></tr>
497 <dl class="section note"><dt>Note</dt><dd>only up to 16 regions can be handled as the function <a class="el" href="group__mpu__functions.html#gafa27b26d5847fa8e465584e376b6078a">ARM_MPU_Load</a> uses the REGION field in <a class="el" href="structMPU__Type.html#a990c609b26d990b8ba832b110adfd353">MPU->RBAR</a>.</dd></dl>
498 <p><b>Example:</b> </p><div class="fragment"><div class="line"><span class="keyword">const</span> <a class="code hl_struct" href="structARM__MPU__Region__t.html">ARM_MPU_Region_t</a> mpuTable[3][4] = {</div>
499 <div class="line"> {</div>
500 <div class="line"> { .<a class="code hl_variable" href="structARM__MPU__Region__t.html#afe7a7721aa08988d915670efa432cdd2">RBAR</a> = <a class="code hl_define" href="group__mpu__functions.html#ga3fead12dc24a6d00ad53f55a042486ca">ARM_MPU_RBAR</a>(0UL, 0x08000000UL), .RASR = <a class="code hl_define" href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a>(0UL, ARM_MPU_AP_FULL, 0UL, 0UL, 1UL, 1UL, 0x00UL, ARM_MPU_REGION_SIZE_1MB) },</div>
501 <div class="line"> { .RBAR = <a class="code hl_define" href="group__mpu__functions.html#ga3fead12dc24a6d00ad53f55a042486ca">ARM_MPU_RBAR</a>(1UL, 0x20000000UL), .RASR = <a class="code hl_define" href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a>(1UL, ARM_MPU_AP_FULL, 0UL, 0UL, 1UL, 1UL, 0x00UL, ARM_MPU_REGION_SIZE_32KB) },</div>
502 <div class="line"> { .RBAR = <a class="code hl_define" href="group__mpu__functions.html#ga3fead12dc24a6d00ad53f55a042486ca">ARM_MPU_RBAR</a>(2UL, 0x40020000UL), .RASR = <a class="code hl_define" href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a>(1UL, ARM_MPU_AP_FULL, 2UL, 0UL, 0UL, 0UL, 0x00UL, ARM_MPU_REGION_SIZE_8KB) }, </div>
503 <div class="line"> { .RBAR = <a class="code hl_define" href="group__mpu__functions.html#ga3fead12dc24a6d00ad53f55a042486ca">ARM_MPU_RBAR</a>(3UL, 0x40022000UL), .RASR = <a class="code hl_define" href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a>(1UL, ARM_MPU_AP_FULL, 2UL, 0UL, 0UL, 0UL, 0xC0UL, ARM_MPU_REGION_SIZE_4KB) }</div>
504 <div class="line"> },</div>
505 <div class="line"> {</div>
506 <div class="line"> { .RBAR = <a class="code hl_define" href="group__mpu__functions.html#ga3fead12dc24a6d00ad53f55a042486ca">ARM_MPU_RBAR</a>(4UL, 0x08000000UL), .RASR = <a class="code hl_define" href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a>(0UL, ARM_MPU_AP_FULL, 0UL, 0UL, 1UL, 1UL, 0x00UL, ARM_MPU_REGION_SIZE_1MB) },</div>
507 <div class="line"> { .RBAR = <a class="code hl_define" href="group__mpu__functions.html#ga3fead12dc24a6d00ad53f55a042486ca">ARM_MPU_RBAR</a>(5UL, 0x20000000UL), .RASR = <a class="code hl_define" href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a>(1UL, ARM_MPU_AP_FULL, 0UL, 0UL, 1UL, 1UL, 0x00UL, ARM_MPU_REGION_SIZE_32KB) },</div>
508 <div class="line"> { .RBAR = <a class="code hl_define" href="group__mpu__functions.html#ga3fead12dc24a6d00ad53f55a042486ca">ARM_MPU_RBAR</a>(6UL, 0x40020000UL), .RASR = <a class="code hl_define" href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a>(1UL, ARM_MPU_AP_FULL, 2UL, 0UL, 0UL, 0UL, 0x00UL, ARM_MPU_REGION_SIZE_8KB) }, </div>
509 <div class="line"> { .RBAR = <a class="code hl_define" href="group__mpu__functions.html#ga3fead12dc24a6d00ad53f55a042486ca">ARM_MPU_RBAR</a>(7UL, 0x40022000UL), .RASR = <a class="code hl_define" href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a>(1UL, ARM_MPU_AP_FULL, 2UL, 0UL, 0UL, 0UL, 0xC0UL, ARM_MPU_REGION_SIZE_4KB) }</div>
510 <div class="line"> },</div>
511 <div class="line"> {</div>
512 <div class="line"> { .RBAR = <a class="code hl_define" href="group__mpu__functions.html#ga3fead12dc24a6d00ad53f55a042486ca">ARM_MPU_RBAR</a>(4UL, 0x18000000UL), .RASR = <a class="code hl_define" href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a>(0UL, ARM_MPU_AP_FULL, 0UL, 0UL, 1UL, 1UL, 0x00UL, ARM_MPU_REGION_SIZE_1MB) },</div>
513 <div class="line"> { .RBAR = <a class="code hl_define" href="group__mpu__functions.html#ga3fead12dc24a6d00ad53f55a042486ca">ARM_MPU_RBAR</a>(5UL, 0x30000000UL), .RASR = <a class="code hl_define" href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a>(1UL, ARM_MPU_AP_FULL, 0UL, 0UL, 1UL, 1UL, 0x00UL, ARM_MPU_REGION_SIZE_32KB) },</div>
514 <div class="line"> { .RBAR = <a class="code hl_define" href="group__mpu__functions.html#ga3fead12dc24a6d00ad53f55a042486ca">ARM_MPU_RBAR</a>(6UL, 0x50020000UL), .RASR = <a class="code hl_define" href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a>(1UL, ARM_MPU_AP_FULL, 2UL, 0UL, 0UL, 0UL, 0x00UL, ARM_MPU_REGION_SIZE_8KB) }, </div>
515 <div class="line"> { .RBAR = <a class="code hl_define" href="group__mpu__functions.html#ga3fead12dc24a6d00ad53f55a042486ca">ARM_MPU_RBAR</a>(7UL, 0x50022000UL), .RASR = <a class="code hl_define" href="group__mpu__functions.html#ga96b93785c92e2dbcb3a2356c25bf2adc">ARM_MPU_RASR</a>(1UL, ARM_MPU_AP_FULL, 2UL, 0UL, 0UL, 0UL, 0xC0UL, ARM_MPU_REGION_SIZE_4KB) }</div>
516 <div class="line"> }</div>
517 <div class="line">};</div>
518 <div class="line"> </div>
519 <div class="line"><span class="keywordtype">void</span> UpdateMpu(uint32_t idx)</div>
520 <div class="line">{</div>
521 <div class="line"> <a class="code hl_function" href="group__mpu__functions.html#gafa27b26d5847fa8e465584e376b6078a">ARM_MPU_Load</a>(mpuTable[idx], 4);</div>
522 <div class="line">}</div>
523 <div class="ttc" id="agroup__mpu__functions_html_ga3fead12dc24a6d00ad53f55a042486ca"><div class="ttname"><a href="group__mpu__functions.html#ga3fead12dc24a6d00ad53f55a042486ca">ARM_MPU_RBAR</a></div><div class="ttdeci">#define ARM_MPU_RBAR(Region, BaseAddress)</div><div class="ttdoc">MPU Region Base Address Register Value.</div><div class="ttdef"><b>Definition:</b> ref_mpu.txt:41</div></div>
524 <div class="ttc" id="agroup__mpu__functions_html_gafa27b26d5847fa8e465584e376b6078a"><div class="ttname"><a href="group__mpu__functions.html#gafa27b26d5847fa8e465584e376b6078a">ARM_MPU_Load</a></div><div class="ttdeci">__STATIC_INLINE void ARM_MPU_Load(MPU_Region_t const *table, uint32_t cnt)</div></div>
525 <div class="ttc" id="astructARM__MPU__Region__t_html"><div class="ttname"><a href="structARM__MPU__Region__t.html">ARM_MPU_Region_t</a></div><div class="ttdoc">Setup information of a single MPU Region.</div><div class="ttdef"><b>Definition:</b> ref_mpu.txt:84</div></div>
526 <div class="ttc" id="astructARM__MPU__Region__t_html_afe7a7721aa08988d915670efa432cdd2"><div class="ttname"><a href="structARM__MPU__Region__t.html#afe7a7721aa08988d915670efa432cdd2">ARM_MPU_Region_t::RBAR</a></div><div class="ttdeci">uint32_t RBAR</div><div class="ttdoc">The region base address register value (RBAR)</div><div class="ttdef"><b>Definition:</b> ref_mpu.txt:85</div></div>
527 </div><!-- fragment -->
530 <a id="gac1a949403bf84eecaf407003fb553ae7" name="gac1a949403bf84eecaf407003fb553ae7"></a>
531 <h2 class="memtitle"><span class="permalink"><a href="#gac1a949403bf84eecaf407003fb553ae7">◆ </a></span>ARM_MPU_OrderedMemcpy()</h2>
533 <div class="memitem">
534 <div class="memproto">
535 <table class="memname">
537 <td class="memname"><a class="el" href="group__compiler__conntrol__gr.html#gaba87361bfad2ae52cfe2f40c1a1dbf9c">__STATIC_INLINE</a> void ARM_MPU_OrderedMemcpy </td>
539 <td class="paramtype">volatile uint32_t * </td>
540 <td class="paramname"><em>dst</em>, </td>
543 <td class="paramkey"></td>
545 <td class="paramtype">const uint32_t *<a class="el" href="group__compiler__conntrol__gr.html#ga378ac21329d33f561f90265eef89f564">__RESTRICT</a> </td>
546 <td class="paramname"><em>src</em>, </td>
549 <td class="paramkey"></td>
551 <td class="paramtype">uint32_t </td>
552 <td class="paramname"><em>len</em> </td>
560 </div><div class="memdoc">
561 <p>Memcpy with strictly ordered memory access, e.g. used by code in <a class="el" href="group__mpu__functions.html#gafa27b26d5847fa8e465584e376b6078a">ARM_MPU_Load</a>. </p><dl class="params"><dt>Parameters</dt><dd>
562 <table class="params">
563 <tr><td class="paramname">dst</td><td>Destination data is copied to. </td></tr>
564 <tr><td class="paramname">src</td><td>Source data is copied from. </td></tr>
565 <tr><td class="paramname">len</td><td>Amount of data words to be copied. </td></tr>
572 <a id="ga16931f9ad84d7289e8218e169ae6db5d" name="ga16931f9ad84d7289e8218e169ae6db5d"></a>
573 <h2 class="memtitle"><span class="permalink"><a href="#ga16931f9ad84d7289e8218e169ae6db5d">◆ </a></span>ARM_MPU_SetRegion()</h2>
575 <div class="memitem">
576 <div class="memproto">
577 <table class="memname">
579 <td class="memname"><a class="el" href="group__compiler__conntrol__gr.html#gaba87361bfad2ae52cfe2f40c1a1dbf9c">__STATIC_INLINE</a> void ARM_MPU_SetRegion </td>
581 <td class="paramtype">uint32_t </td>
582 <td class="paramname"><em>rbar</em>, </td>
585 <td class="paramkey"></td>
587 <td class="paramtype">uint32_t </td>
588 <td class="paramname"><em>rasr</em> </td>
596 </div><div class="memdoc">
597 <p>Configure an MPU region.</p>
598 <p>The region number should be contained in the rbar value.</p>
599 <dl class="params"><dt>Parameters</dt><dd>
600 <table class="params">
601 <tr><td class="paramname">rbar</td><td>Value for <a class="el" href="structMPU__Type.html#a990c609b26d990b8ba832b110adfd353">RBAR</a> register. </td></tr>
602 <tr><td class="paramname">rasr</td><td>Value for <a class="el" href="structMPU__Type.html#a8f00c4a5e31b0a8d103ed3b0732c17a3">RASR</a> register. </td></tr>
609 <a id="ga042ba1a6a1a58795231459ac0410b809" name="ga042ba1a6a1a58795231459ac0410b809"></a>
610 <h2 class="memtitle"><span class="permalink"><a href="#ga042ba1a6a1a58795231459ac0410b809">◆ </a></span>ARM_MPU_SetRegionEx()</h2>
612 <div class="memitem">
613 <div class="memproto">
614 <table class="memname">
616 <td class="memname"><a class="el" href="group__compiler__conntrol__gr.html#gaba87361bfad2ae52cfe2f40c1a1dbf9c">__STATIC_INLINE</a> void ARM_MPU_SetRegionEx </td>
618 <td class="paramtype">uint32_t </td>
619 <td class="paramname"><em>rnr</em>, </td>
622 <td class="paramkey"></td>
624 <td class="paramtype">uint32_t </td>
625 <td class="paramname"><em>rbar</em>, </td>
628 <td class="paramkey"></td>
630 <td class="paramtype">uint32_t </td>
631 <td class="paramname"><em>rasr</em> </td>
639 </div><div class="memdoc">
640 <p>Configure the given MPU region. </p><dl class="params"><dt>Parameters</dt><dd>
641 <table class="params">
642 <tr><td class="paramname">rnr</td><td>Region number to be configured. </td></tr>
643 <tr><td class="paramname">rbar</td><td>Value for <a class="el" href="structMPU__Type.html#a990c609b26d990b8ba832b110adfd353">RBAR</a> register. </td></tr>
644 <tr><td class="paramname">rasr</td><td>Value for <a class="el" href="structMPU__Type.html#a8f00c4a5e31b0a8d103ed3b0732c17a3">RASR</a> register. </td></tr>
651 </div><!-- contents -->
652 </div><!-- doc-content -->
653 <!-- start footer part -->
654 <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
657 <script type="text/javascript">
659 writeFooter.call(this);