]> begriffs open source - cmsis/blob - CMSIS/DoxyGen/General/src/introduction.txt
Core(A): Fixed macro issues on coprocessor register access macros.
[cmsis] / CMSIS / DoxyGen / General / src / introduction.txt
1 /**************************************************************************************************/
2 /** 
3 \mainpage Introduction
4
5 The <b>Cortex Microcontroller Software Interface Standard</b> (CMSIS) is a vendor-independent 
6 hardware abstraction layer for the Cortex&reg;-M processor series and defines generic tool
7 interfaces.  The CMSIS enables consistent device support and 
8 simple software interfaces to the processor and the peripherals, simplifying software re-use, 
9 reducing the learning curve for microcontroller developers, and reducing the time to market for new devices. 
10     
11 The CMSIS is defined in close cooperation with various silicon and software vendors and 
12 provides a common approach to interface to peripherals, real-time operating systems, 
13 and middleware components. The CMSIS is intended to enable the combination of software components 
14 from multiple middleware vendors. 
15
16 CMSIS Version 5 supports also the <a class="el" href="http://www.arm.com/products/processors/instruction-set-architectures/armv8-m-architecture.php" target="_blank">ARMv8-M architecture</a> 
17 including <a class="el" href="http://www.arm.com/products/processors/technologies/trustzone/index.php" target="_blank">TrustZone&reg; for ARMv8-M</a> hardware security extensions and the
18 <a class="el" href="http://www.arm.com/products/processors/cortex-m/cortex-m23-processor.php" target="_blank">Cortex-M23</a> and <a class="el" href="http://www.arm.com/products/processors/cortex-m/cortex-m33-processor.php" target="_blank">Cortex-M33</a> processors.
19
20 \anchor CM_Components
21 The CMSIS components are:
22  - <a href="../../Core/html/index.html"><b>CMSIS-Core (Cortex-M)</b></a>: API for the Cortex-M processor core and peripherals. 
23    It provides a standardized interface for Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23, Cortex-M33, SC000, and SC300. 
24    Also included are SIMD intrinsic functions for Cortex-M4, Cortex-M7, and Cortex-M33 SIMD instructions.
25
26  - <a href="../../Core_A/html/index.html"><b>CMSIS-Core (Cortex-A)</b></a>: API and basic run-time system for the Cortex-A5/A7/A9 processor core and peripherals. 
27    
28  - <a href="../../Driver/html/index.html"><b>CMSIS-Driver</b></a>: defines generic peripheral driver interfaces for middleware making it reusable across supported devices. The API is RTOS independent
29     and connects microcontroller peripherals with middleware that implements for example communication stacks, file systems, or graphic user interfaces.
30
31  - <a href="../../DSP/html/index.html"><b>CMSIS-DSP</b></a>: DSP Library Collection with over 60 Functions for various data types: fixed-point (fractional q7, q15, q31) and single precision floating-point (32-bit).
32    The library is available for all Cortex-M cores. Implementations that are optimized for the SIMD instruction set are available for Cortex-M4, Cortex-M7, and Cortex-M33.
33  
34   
35  - <a href="../../RTOS/html/index.html"><b>CMSIS-RTOS v1</b></a>: Common API for Real-Time Operating Systems along with reference implementation based on RTX.
36     It provides a standardized programming interface that is portable to many RTOS and enables software components that can work across multiple RTOS systems.
37  
38  - <a href="../../RTOS2/html/index.html"><b>CMSIS-RTOS v2</b></a>: extends CMSIS-RTOS v1 with support for ARMv8-M architecture, dynamic object creation,
39     provisions for multi-core systems, and binary compatible interface across ABI compliant compilers.
40
41  - <a href="../../Pack/html/index.html"><b>CMSIS-Pack</b></a>: describes with an XML-based package description (PDSC) file the user and device relevant parts of a file collection (called a software pack) that includes source, header and library files, documentation, 
42     Flash programming algorithms, source code templates, and example projects. Development tools and web infrastructures use the PDSC file to extract device parameters, 
43     software components, and evaluation board configurations.
44
45  - <a href="../../SVD/html/index.html"><b>CMSIS-SVD</b></a>: System View Description for Peripherals. Describes the peripherals of a device in an XML file and can be used to create peripheral awareness in 
46     debuggers or header files with peripheral register and interrupt definitions.
47
48  - <a href="../../DAP/html/index.html"><b>CMSIS-DAP</b></a>: Debug Access Port. Standardized firmware for a Debug Unit that connects to the CoreSight Debug Access Port. CMSIS-DAP is distributed as a separate package and is
49     well suited for integration on evaluation boards. This component is provided as separate download.
50         
51  - <a href="../../Zone/html/index.html"><b>CMSIS-Zone</b></a>: System resource definition and partitioning. Defines methods to describe system resources and to partition 
52    these resources into multiple projects and execution areas.
53
54 \note Refer to \ref CM_Pack_Content for more information on the content of the Software Pack.
55
56 \image html CMSISv4_small.png "CMSIS Structure"
57         
58 \section Motivation Motivation
59
60 CMSIS has been created to help the industry in standardization. It enables consistent software layers and device support across a wide range of development tools and microcontrollers.
61 CMSIS is not a huge software layer that introduces overhead and does not define standard peripherals. The silicon industry can
62 therefore support the wide variations of Cortex-M processor-based devices with this common standard.
63
64 In detail the benefits of the CMSIS are:
65
66  - Overall CMSIS reduces the learning curve, development costs, and time-to-market. Developers can write software quicker through a variety of easy-to-use, standardized software interfaces.
67  - Consistent software interfaces improve the software portability and re-usability. Generic software libraries and interfaces provide consistent software framework.
68  - Provides interfaces for debug connectivity, debug peripheral views, software delivery, and device support to reduce time-to-market for new microcontroller deployment.
69  - Provides a compiler independent layer that allows using different compilers. CMSIS is supported by mainstream compilers.
70  - Enhances program debugging with peripheral information for debuggers and ITM channels for printf-style output and RTOS kernel awareness. 
71  - CMSIS is delivered in CMSIS-Pack format which enables fast software delivery, simplifies updates, and enables consistent integration into development tools.
72  - CMSIS-Zone will simplify system resource and partitioning as it manages the configuration of multiple processors, memory areas, and peripherals.
73
74
75 \section CodingRules Coding Rules
76
77 The CMSIS uses the following essential coding rules and conventions:
78  - Compliant with ANSI C and C++.
79  - Uses ANSI C standard data types defined in \b <stdint.h>.
80  - Variables and parameters have a complete data type.
81  - Expressions for \em \#define constants are enclosed in parenthesis.
82  - Conforms to MISRA 2012 (but does not claim MISRA compliance). MISRA rule violations are documented.
83           
84 In addition, the CMSIS recommends the following conventions for identifiers:
85  - \b CAPITAL names to identify Core Registers, Peripheral Registers, and CPU Instructions.
86  - \b CamelCase names to identify function names and interrupt functions.
87  - \b Namespace_ prefixes avoid clashes with user identifiers and provide functional groups (i.e. for peripherals, RTOS, or DSP Library).
88
89 The CMSIS is documented within the source files with:
90  \li Comments that use the C or C++ style. 
91  \li Doxygen compliant <b>function comments</b> that provide:
92     - brief function overview.
93     - detailed description of the function.
94     - detailed parameter explanation.
95     - detailed information about return values.
96
97 Doxygen comment example:
98 \verbatim
99 /** 
100  * @brief  Enable Interrupt in NVIC Interrupt Controller
101  * @param  IRQn  interrupt number that specifies the interrupt
102  * @return none.
103  * Enable the specified interrupt in the NVIC Interrupt Controller.
104  * Other settings of the interrupt such as priority are not affected.
105  */
106 \endverbatim
107
108
109 \section Validation Validation
110
111 The various components of CMSIS Version 5 are validated using mainstream compilers.  To get a diverse coverage,
112 ARM uses the ARM Compiler v5 (based on EDG front-end), the ARM Compiler v6 (based on LLVM front-end), and the
113 GCC Compiler in the various tests. For each component, the section \b "Validation" describes the scope of the 
114 various verifications. 
115
116 CMSIS components are compatible with a range of C and C++ language standards. The CMSIS components comply with 
117 the <a href="http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ihi0036b/index.html">Application Binary 
118 Interface (ABI) for the ARM Architecture</a> (exception CMSIS-RTOS v1). This ensures C API interfaces that support 
119 inter-operation between various toolchains.
120
121 As CMSIS defines API interfaces and functions that scale to a wide range of processors and devices, the scope of 
122 the run-time test coverage is limited. However, several components are validated using dedicated test suites.
123
124 The CMSIS source code is checked for MISRA C:2012 conformance using PC-Lint. MISRA deviations are documented with
125 reasonable effort, however ARM does not claim MISRA compliance as there is today for example no guideline enforcement 
126 plan. The CMSIS source code is not checked for MISRA C++:2008 conformance as there is a risk that it is incompatible 
127 with C language standards, specifically warnings that may be generated by the various C compilers.
128
129
130 \section License License
131
132 The CMSIS is provided free of charge by ARM under Apache 2.0 license. 
133 View the <a href="LICENSE.txt">Apache 2.0 License</a>.
134
135
136 \section CM_Pack_Content ARM::CMSIS Pack
137
138 The <b>ARM::CMSIS</b> Pack contains the following:
139
140 File/Directory    |Content                                                                           
141 :-----------------|:---------------------------------------------------------------------------------
142 \b ARM.CMSIS.pdsc |Package description file in CMSIS-Pack format.                                                         
143 \b LICENSE.txt    |CMSIS License Agreement (Apache 2.0)
144 \b CMSIS          |\ref CM_Components "CMSIS components" (see below)                                 
145 \b Device         |CMSIS reference implementations of ARM Cortex-M processor based devices                                 
146
147 CMSIS Directory
148 ---------------
149
150 Directory                 |Content                                                                                                                                  
151 :-------------------------|:----------------------------------------------------------------------------------------------------------------------------------------
152 \b Documentation          |This documentation                                                                                                                       
153 \b Core                   |User code templates for <a href="../../Core/html/index.html"><b>CMSIS-Core (Cortex-M)</b></a> related files, referenced in ARM.CMSIS.PDSC
154 \b Core_A                 |User code templates for <a href="../../Core_A/html/index.html"><b>CMSIS-Core (Cortex-A)</b></a> related files, referenced in ARM.CMSIS.PDSC
155 \b DAP                    |<a href="../../DAP/html/index.html"><b>CMSIS-DAP</b></a> Debug Access Port source code and reference implementations                     
156 \b Driver                 |Header files for the <a href="../../Driver/html/index.html"><b>CMSIS-Driver</b></a> peripheral interface API                             
157 \b DSP_Lib                |<a href="../../DSP/html/index.html"><b>CMSIS-DSP</b></a> software library source code                                                    
158 \b Include                |Include files for <a href="../../Core/html/index.html"><b>CMSIS-Core (Cortex-M)</b></a> and <a href="../../DSP/html/index.html"><b>CMSIS-DSP</b></a>
159 \b Lib                    |<a href="../../DSP/html/index.html"><b>CMSIS-DSP</b></a> generated libraries for ARMCC and GCC                                           
160 \b Pack                   |<a href="../../Pack/html/pack_Example.html"><b>CMSIS-Pack</b></a> example                                                              
161 \b RTOS                   |<a href="../../RTOS/html/index.html"><b>CMSIS-RTOS Version 1</b></a> along with RTX reference implementation                       
162 \b RTOS2                  |<a href="../../RTOS/html/index.html"><b>CMSIS-RTOS Version 2</b></a> along with RTX reference implementation                           
163 \b SVD                    |<a href="../../SVD/html/index.html"><b>CMSIS-SVD</b></a> example                                                                         
164 \b Utilities              |PACK.xsd (<a href="../../Pack/html/pack_Example.html"><b>CMSIS-Pack</b></a> schema file), PackChk.exe (checking tool for software packs), \n CMSIS-SVD.xsd (<a href="../../SVD/html/index.html"><b>CMSIS-SVD</b></a> schema file), SVDConv.exe (conversion tool for SVD files)
165
166 <hr>
167 */
168
169 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
170 /**
171 \page cm_revisionHistory Revision History 
172
173
174 The following table shows the overall high-level history of the various CMSIS releases.
175 In addition, each CMSIS component has its own release history:
176
177 - <a href="../../Core/html/core_revisionHistory.html"><b>CMSIS-Core (Cortex-M) Revision History</b></a>
178 - <a href="../../Core/html/rev_histCoreA.html"><b>CMSIS-Core (Cortex-A) Revision History</b></a>
179 - <a href="../../Driver/html/driver_revisionHistory.html"><b>Driver Revision History</b></a>
180 - <a href="../../DSP/html/ChangeLog_pg.html"><b>DSP Revision History (Change Log)</b></a>
181 - <a href="../../RTOS/html/rtos_revisionHistory.html"><b>RTOS v1 Revision History</b></a>
182 - <a href="../../RTOS2/html/rtos_revisionHistory.html"><b>RTOS v2 Revision History</b></a>
183 - <a href="../../Pack/html/pack_revisionHistory.html"><b>Pack Revision History</b></a>
184 - <a href="../../SVD/html/svd_revisionHistory.html"><b>SVD Revision History</b></a>
185 - <a href="../../DAP/html/dap_revisionHistory.html"><b>DAP Revision History</b></a>
186 - <a href="../../Zone/html/zone_revisionHistory.html"><b>Zone Revision History</b></a>
187
188 <table class="cmtable" summary="Revision History">
189     <tr>
190       <th>Version</th>
191       <th>Description</th>
192     </tr>
193     <tr>
194       <td>5.1.2</td>
195       <td>
196         - CMSIS-Core (Cortex-M) (unchanged)
197         - CMSIS-Core (Cortex-A) (unchanged)
198         - CMSIS-Driver 2.05 (unchanged)
199         - CMSIS-DSP 1.5.2 (unchanged)
200         - CMSIS-RTOS 2.1.1 (unchanged)
201         - CMSIS-PACK 1.5.0 (unchanged)
202         - CMSIS-SVD 1.3.3 (unchanged)
203         - CMSIS-DAP 1.1.0 (unchanged)
204         - CMSIS-Zone 0.0.1 (unchanged)
205       </td>
206     </tr>
207     <tr>
208       <td>5.1.1</td>
209       <td>
210         - CMSIS-Core (Cortex-M) (unchanged)
211         - CMSIS-Core (Cortex-A) (unchanged)
212         - CMSIS-Driver 2.05 (unchanged)
213         - CMSIS-DSP 1.5.2 (unchanged)
214         - CMSIS-RTOS 2.1.1 Fixed RTX5 pre-built libraries for Cortex-M.
215         - CMSIS-PACK 1.5.0 (unchanged)
216         - CMSIS-SVD 1.3.3 (unchanged)
217         - CMSIS-DAP 1.1.0 (unchanged)
218         - CMSIS-Zone 0.0.1 (unchanged)
219       </td>
220     </tr>
221     <tr>
222       <td>5.1.0</td>
223       <td>
224         - CMSIS-Core (Cortex-M) 5.0.2 several minor corrections and enhancements
225         - CMSIS-Core (Cortex-A) 1.0.0 implements a basic run-time system for Cortex-A5/A7/A9
226         - CMSIS-Driver 2.05 status typedef made volatile
227         - CMSIS-DSP 1.5.2 fixed GNU Compiler specific diagnostics
228         - CMSIS-RTOS 2.1.1 added support for Cortex-A5/A7/A9 to RTX5
229         - CMSIS-PACK 1.5.0 added SDF format specification
230         - CMSIS-SVD 1.3.3 (unchanged)
231         - CMSIS-DAP 1.1.0 (unchanged)
232         - CMSIS-Zone 0.0.1 (Preview) format to describe system resources and tool for partitioning of resources
233       </td>
234     </tr>
235     <tr>
236       <td>5.0.1</td>
237       <td>
238         - CMSIS-Core 5.0.1 added __PACKED_STRUCT macro and uVisor support
239         - CMSIS-Driver 2.05 updated all typedefs related to status now being volatile.
240         - CMSIS-DSP 1.5.1 added ARMv8M DSP libraries
241         - CMSIS-RTOS 2.1.0 added support for critical and uncritical sections
242         - CMSIS-PACK 1.4.8 add Pack Index File specification
243         - CMSIS-SVD 1.3.3 (unchanged)
244         - CMSIS-DAP 1.1.0 (unchanged)     
245       </td>
246     </tr>
247         <tr>
248       <td>5.0.0</td>
249       <td>
250         Added support for: <a href="http://www.arm.com/products/processors/instruction-set-architectures/armv8-m-architecture.php" target="_blank"><b>ARMv8-M architecture</b></a> including TrustZone for ARMv8-M and Cortex-M23, Cortex-M33 processors
251         - CMSIS-Core (Cortex-M) 5.0.0 added support for ARMv8-M and Cortex-M23, Cortex-M33 processors
252         - CMSIS-Driver 2.04.0 (unchanged)
253         - CMSIS-DSP 1.4.9 minor corrections and performance improvements
254         - CMSIS-RTOS 2.0.0 new API with RTX 5.0.0 reference implementation and corrections in RTX 4.8.2
255         - CMSIS-PACK 1.4.4 introducing CPDSC project description
256         - CMSIS-SVD 1.3.3 several enhancements and rework of documentation
257         - CMSIS-DAP 1.1.0 (unchanged)
258       </td>
259     </tr>
260     <tr>
261       <td>4.5.0</td>
262       <td>
263         Maintenance release that is fixing defects. See component's revision history for more details.
264         See component's revision history for more details.
265         - CMSIS-Core (Cortex-M) 4.30.0
266         - CMSIS-DAP 1.1.0 (unchanged)
267         - CMSIS-Driver 2.04.0
268         - CMSIS-DSP 1.4.7
269         - CMSIS-PACK 1.4.1
270         - CMSIS-RTOS RTX 4.80.0
271         - CMSIS-SVD 1.3.1 
272       </td>
273     </tr>
274     <tr>
275       <td>4.4.0</td>
276       <td>
277         Feature release adding CMSIS-DAP (see extended End User Licence Agreement) and CMSIS-Driver for CAN.
278         See component's revision history for more details.
279         - CMSIS-Core (Cortex-M) 4.20.0
280         - CMSIS-DAP 1.1.0
281         - CMSIS-Driver 2.03.0
282         - CMSIS-DSP 1.4.5  (unchanged)
283         - CMSIS-RTOS RTX 4.79.0
284         - CMSIS-PACK 1.4.0
285         - CMSIS-SVD 1.3.0
286       </td>
287     </tr>
288     <tr>
289       <td>4.3.0</td>
290       <td>
291         Maintenance release adding SAI CMSIS-Driver and fixing defects. See component's revision history for more details.
292         - CMSIS-Core (Cortex-M) 4.10.0
293         - CMSIS-Driver 2.02.0
294         - CMSIS-DSP 1.4.5
295         - CMSIS-RTOS RTX 4.78.0
296         - CMSIS-PACK 1.3.3
297         - CMSIS-SVD (unchanged)
298       </td>
299     </tr>
300     <tr>
301       <td>4.2</td>
302       <td>Introducing processor support for Cortex-M7.
303       </td>
304     </tr>
305     <tr>
306       <td>4.1</td>
307       <td>Enhancements in CMSIS-Pack and CMSIS-Driver.\n
308       Added: PackChk validation utility\n
309       Removed support for GNU: Sourcery G++ Lite Edition for ARM</td>
310     </tr>
311     <tr>
312       <td>4.0</td>
313       <td>First release in CMSIS-Pack format.\n Added specifications for CMSIS-Pack, CMSIS-Driver</td>
314     </tr>
315     <tr>
316       <td>3.30</td>
317       <td>Maintenance release with enhancements in each component</td>
318     </tr>
319     <tr>
320       <td>3.20</td>
321       <td>Maintenance release with enhancements in each component</td>
322     </tr>
323     <tr>
324       <td>3.01</td>
325       <td>Added support for Cortex-M0+ processors</td>
326     </tr>
327     <tr>
328       <td>3.00</td>
329       <td>Added support for SC000 and SC300 processors\n
330       Added support for GNU GCC Compiler\n
331       Added CMSIS-RTOS API</td>
332     </tr>
333     <tr>
334       <td>2.10</td>
335       <td>Added CMSIS-DSP Library</td>
336     </tr>
337     <tr>
338       <td>2.0</td>
339       <td>Added support for Cortex-M4 processor</td>
340     </tr>
341     <tr>
342       <td>1.30</td>
343       <td>Reworked CMSIS startup concept</td>
344     </tr>
345     <tr>
346       <td>1.01</td>
347       <td>Added support for Cortex-M0 processor</td>
348     </tr>
349     <tr>
350       <td>1.00</td>
351       <td>Initial release of CMSIS-Core (Cortex-M) for Cortex-M3 processor</td>
352     </tr>
353 </table>
354
355 */