summaryrefslogtreecommitdiff
path: root/docs/Core/html/templates_pg.html
blob: 39d5506ed887b7b71af29132182255d4ba20923c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>CMSIS-Core Device Templates</title>
<title>CMSIS-Core (Cortex-M): CMSIS-Core Device Templates</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 46px;">
  <td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">CMSIS-Core (Cortex-M)
   &#160;<span id="projectnumber">Version 5.3.0</span>
   </div>
   <div id="projectbrief">CMSIS-Core support for Cortex-M processor-based devices</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
    <ul class="tablist">
      <script type="text/javascript">
		<!--
		writeComponentTabs.call(this);
		//-->
      </script>
	  </ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
      <li><a href="modules.html"><span>Reference</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('templates_pg.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">CMSIS-Core Device Templates </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Arm supplies CMSIS-Core device template files for the all supported Cortex-M processors and various compiler vendors. Refer to the list of <a class="el" href="index.html#tested_tools_sec">Tested and Verified Toolchains</a> for compliance.</p>
<p>These CMSIS-Core device template files include the following:</p>
<ul>
<li>Register names of the Core Peripherals and names of the Core Exception Vectors.</li>
<li>Functions to access core peripherals, special CPU instructions and SIMD instructions (for Cortex-M4 and Cortex-M7)</li>
<li>Generic startup code and system configuration code.</li>
</ul>
<p>The detailed file structure of the CMSIS-Core device templates is shown in the following picture.</p>
<div class="image">
<img src="CMSIS_CORE_Files.png" alt="CMSIS_CORE_Files.png"/>
<div class="caption">
CMSIS-Core File Structure</div></div>
 <h1><a class="anchor" id="CMSIS_Processor_files"></a>
CMSIS-Core Processor Files</h1>
<p>The CMSIS-Core processor files provided by Arm are in the directory .\CMSIS\Core\Include. These header files define all processor specific attributes do not need any modifications. The <b>core_&lt;cpu&gt;.h</b> defines the core peripherals and provides helper functions that access the core registers. One file is available for each supported Cortex-M processor:</p>
<table class="doxtable">
<tr>
<th align="left">Header File </th><th align="left">Processor  </th></tr>
<tr>
<td align="left">core_cm0.h </td><td align="left">for the Cortex-M0 processor </td></tr>
<tr>
<td align="left">core_cm0plus.h </td><td align="left">for the Cortex-M0+ processor </td></tr>
<tr>
<td align="left">core_cm3.h </td><td align="left">for the Cortex-M3 processor </td></tr>
<tr>
<td align="left">core_cm4.h </td><td align="left">for the Cortex-M4 processor </td></tr>
<tr>
<td align="left">core_cm7.h </td><td align="left">for the Cortex-M7 processor </td></tr>
<tr>
<td align="left">core_cm23.h </td><td align="left">for the Cortex-M23 processor </td></tr>
<tr>
<td align="left">core_cm33.h </td><td align="left">for the Cortex-M33 processor </td></tr>
<tr>
<td align="left">core_cm35p.h </td><td align="left">for the Cortex-M35P processor </td></tr>
<tr>
<td align="left">core_sc000.h </td><td align="left">for the SecurCore SC000 processor </td></tr>
<tr>
<td align="left">core_sc300.h </td><td align="left">for the SecurCore SC300 processor </td></tr>
<tr>
<td align="left">core_armv8mbl.h </td><td align="left">for the Armv8-M Baseline processor </td></tr>
<tr>
<td align="left">core_armv8mml.h </td><td align="left">for the Armv8-M Mainline processor </td></tr>
</table>
<h1><a class="anchor" id="device_examples"></a>
Device Examples</h1>
<p>The CMSIS Software Pack defines several devices that are based on the various processors. The device related CMSIS-Core files are in the directory .\Device\ARM and include CMSIS-Core processor file explained before. The following sample devices are defined in the CMSIS-Pack description file <b>ARM.CMSIS.pdsc</b>:</p>
<table class="doxtable">
<tr>
<th align="left">Family </th><th align="left">Device </th><th align="left">Description  </th></tr>
<tr>
<td align="left">ARM Cortex-M0 </td><td align="left">ARMCM0 </td><td align="left">Cortex-M0 based device </td></tr>
<tr>
<td align="left">ARM Cortex-M0 plus </td><td align="left">ARMCM0P </td><td align="left">Cortex-M0+ based device </td></tr>
<tr>
<td align="left">ARM Cortex-M3 </td><td align="left">ARMCM3 </td><td align="left">Cortex-M3 based device </td></tr>
<tr>
<td align="left">ARM Cortex-M4 </td><td align="left">ARMCM4 </td><td align="left">Cortex-M4 based device without floating-point hardware </td></tr>
<tr>
<td align="left">ARM Cortex-M4 </td><td align="left">ARMCM4_FP </td><td align="left">Cortex-M4 based device with floating-point hardware </td></tr>
<tr>
<td align="left">ARM Cortex-M7 </td><td align="left">ARMCM7 </td><td align="left">Cortex-M4 based device without floating-point hardware </td></tr>
<tr>
<td align="left">ARM Cortex-M7 </td><td align="left">ARMCM7_FP </td><td align="left">Cortex-M7 based device with single precision floating-point unit (FPU) </td></tr>
<tr>
<td align="left">ARM Cortex-M7 </td><td align="left">ARMCM7_DP </td><td align="left">Cortex-M7 based device with double precision floating-point unit </td></tr>
<tr>
<td align="left">ARM Cortex-M7 </td><td align="left">ARMCM7 </td><td align="left">Cortex-M7 based device without floating-point hardware </td></tr>
<tr>
<td align="left">ARM Cortex-M23 </td><td align="left">ARMCM23 </td><td align="left">Cortex-M23 based device without TrustZone </td></tr>
<tr>
<td align="left">ARM Cortex-M23 </td><td align="left">ARMCM23_TZ </td><td align="left">Cortex-M23 based device with TrustZone </td></tr>
<tr>
<td align="left">ARM Cortex-M33 </td><td align="left">ARMCM33 </td><td align="left">Cortex-M33 based device without TrustZone, SIMD, FPU </td></tr>
<tr>
<td align="left">ARM Cortex-M33 </td><td align="left">ARMCM33_TZ </td><td align="left">Cortex-M33 based device with TrustZone, no SIMD, no FPU </td></tr>
<tr>
<td align="left">ARM Cortex-M33 </td><td align="left">ARMCM33_DSP_FP </td><td align="left">Cortex-M33 based device with SIMD, FPU, no TrustZone </td></tr>
<tr>
<td align="left">ARM Cortex-M33 </td><td align="left">ARMCM33_DSP_FP_TZ </td><td align="left">Cortex-M33 based device with TrustZone, SIMD, FPU </td></tr>
<tr>
<td align="left">ARM Cortex-M35P </td><td align="left">ARMCM35P </td><td align="left">Cortex-M35P based device without TrustZone, SIMD, FPU </td></tr>
<tr>
<td align="left">ARM Cortex-M35P </td><td align="left">ARMCM35P_TZ </td><td align="left">Cortex-M35P based device with TrustZone, no SIMD, no FPU </td></tr>
<tr>
<td align="left">ARM Cortex-M35P </td><td align="left">ARMCM35P_DSP_FP </td><td align="left">Cortex-M35P based device with SIMD, FPU, no TrustZone </td></tr>
<tr>
<td align="left">ARM Cortex-M35P </td><td align="left">ARMCM35P_DSP_FP_TZ </td><td align="left">Cortex-M35P based device with TrustZone, SIMD, FPU </td></tr>
<tr>
<td align="left">ARM SC000 </td><td align="left">ARM SC000 </td><td align="left">SC000 based device </td></tr>
<tr>
<td align="left">ARM SC300 </td><td align="left">ARM SC300 </td><td align="left">SC300 based device </td></tr>
<tr>
<td align="left">ARMv8-M Baseline </td><td align="left">ARMv8MBL </td><td align="left">Armv8-M Baseline based device with TrustZone </td></tr>
<tr>
<td align="left">ARMv8-M Mainline </td><td align="left">ARMv8MML </td><td align="left">Armv8-M Mainline based device with TrustZone </td></tr>
<tr>
<td align="left">ARMv8-M Mainline </td><td align="left">ARMv8MML_DP </td><td align="left">Armv8-M Mainline based device with TrustZone and double precision FPU </td></tr>
<tr>
<td align="left">ARMv8-M Mainline </td><td align="left">ARMv8MML_SP </td><td align="left">Armv8-M Mainline based device with TrustZone and single precision FPU </td></tr>
<tr>
<td align="left">ARMv8-M Mainline </td><td align="left">ARMv8MML_DSP </td><td align="left">Armv8-M Mainline based device with TrustZone and SIMD </td></tr>
<tr>
<td align="left">ARMv8-M Mainline </td><td align="left">ARMv8MML_DSP_DP </td><td align="left">Armv8-M Mainline based device with TrustZone, SIMD, and double precision FPU </td></tr>
<tr>
<td align="left">ARMv8-M Mainline </td><td align="left">ARMv8MML_DSP_SP </td><td align="left">Armv8-M Mainline based device with TrustZone, SIMD, and single precision FPU </td></tr>
</table>
<h1><a class="anchor" id="template_files_sec"></a>
Template Files</h1>
<p>To simplify the creation of CMSIS-Core device files, the following template files are provided that should be extended by the silicon vendor to reflect the actual device and device peripherals. Silicon vendors add to these template files the following information:</p>
<ul>
<li><b>Device Peripheral Access Layer</b> that provides definitions for device-specific peripherals.</li>
<li><b>Access Functions for Peripherals</b> (optional) that provides additional helper functions to access device-specific peripherals.</li>
<li><b>Interrupt vectors</b> in the startup file that are device specific.</li>
</ul>
<table  class="cmtable">
<tr>
<th>Template File </th><th>Description  </th></tr>
<tr>
<td>.\Device\_Template_Vendor\Vendor\Device\Source\ARM\startup_Device.s </td><td>Startup file template for Arm C/C++ Compiler.  </td></tr>
<tr>
<td>.\Device\_Template_Vendor\Vendor\Device\Source\GCC\startup_Device.s </td><td>Startup file template for GNU GCC Arm Embedded Compiler.  </td></tr>
<tr>
<td>.\Device\_Template_Vendor\Vendor\Device\Source\IAR\startup_Device.s </td><td>Startup file template for IAR C/C++ Compiler.  </td></tr>
<tr>
<td>.\Device\_Template_Vendor\Vendor\Device\Source\system_Device.c </td><td>Generic system_Device.c file for system configuration (i.e. processor clock and memory bus system).  </td></tr>
<tr>
<td>.\Device\_Template_Vendor\Vendor\Device\Include\Device.h </td><td>Generic device header file. Needs to be extended with the device-specific peripheral registers. Optionally functions that access the peripherals can be part of that file.  </td></tr>
<tr>
<td>.\Device\_Template_Vendor\Vendor\Device\Include\system_Device.h </td><td>Generic system device configuration include file.  </td></tr>
</table>
<p><b>Adapt Template Files to a Device</b></p>
<p>The following steps describe how to adopt the template files to a specific device or device family. Copy the complete all files in the template directory and replace:</p>
<ul>
<li>directory name 'Vendor' with the abbreviation for the device vendor e.g.: NXP.</li>
<li>directory name 'Device' with the specific device name e.g.: LPC17xx.</li>
<li>in the file names 'Device' with the specific device name e.g.: LPC17xx.</li>
</ul>
<p>Each template file contains comments that start with <b>ToDo:</b> that describe a required modification. The template files contain place holders:</p>
<table  class="cmtable">
<tr>
<th>Placeholder </th><th>Replaced with  </th></tr>
<tr>
<td>&lt;Device&gt; </td><td>the specific device name or device family name; i.e. LPC17xx.  </td></tr>
<tr>
<td>&lt;DeviceInterrupt&gt; </td><td>a specific interrupt name of the device; i.e. TIM1 for Timer 1. </td></tr>
<tr>
<td>&lt;DeviceAbbreviation&gt; </td><td>short name or abbreviation of the device family; i.e. LPC.  </td></tr>
<tr>
<td>Cortex-M# </td><td>the specific Cortex-M processor name; i.e. Cortex-M3.  </td></tr>
</table>
<p>The device configuration of the template files is described in detail on the following pages:</p>
<ul>
<li><a class="el" href="startup_c_pg.html">Startup File startup_&lt;device&gt;.c</a></li>
<li><a class="el" href="startup_s_pg.html">Startup File startup_&lt;device&gt;.s (deprecated)</a> (deprecated)</li>
<li><a class="el" href="system_c_pg.html">System Configuration Files system_&lt;device&gt;.c and system_&lt;device&gt;.h</a></li>
<li><a class="el" href="device_h_pg.html">Device Header File &lt;device.h&gt;</a></li>
<li><a class="el" href="partition_h_pg.html">System Partition Header File partition_&lt;device&gt;.h</a> </li>
</ul>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated on Wed Jul 10 2019 15:20:25 for CMSIS-Core (Cortex-M) Version 5.3.0 by Arm Ltd. All rights reserved.
	<!--
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6 
	-->
	</li>
  </ul>
</div>
</body>
</html>