blob: ee7454cb809a2711ae087a38a8a2f6ec0f736cdc [file] [log] [blame]
<!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>Introduction</title>
<title>CMSIS: Introduction</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>
</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
&#160;<span id="projectnumber">Version 5.6.0</span>
</div>
<div id="projectbrief">Software Interface Standard for Arm Cortex-based Microcontrollers</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 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li class="current"><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></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('index.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">Introduction </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>The <b>CMSIS</b> is a vendor-independent hardware abstraction layer for microcontrollers that are based on Arm&reg; Cortex&reg; processors. The CMSIS defines generic tool interfaces and enables consistent device support. It provides simple software interfaces to the processor and the peripherals, simplifying software re-use, reducing the learning curve for microcontroller developers, and reducing the time to market for new devices.</p>
<p>The CMSIS is defined in close cooperation with various silicon and software vendors and provides a common approach to interface to peripherals, real-time operating systems, and middleware components. The CMSIS is intended to enable the combination of software components from multiple middleware vendors.</p>
<h1><a class="anchor" id="CM_Components"></a>
CMSIS Components</h1>
<table class="doxtable">
<tr>
<th align="left">CMSIS-... </th><th align="left">Target Processors </th><th align="left">Description </th></tr>
<tr>
<td align="left"><a href="../../Core/html/index.html"><b>Core(M)</b></a></td><td align="left">All Cortex-M, SecurCore </td><td align="left">Standardized API for the Cortex-M processor core and peripherals. Includes intrinsic functions for Cortex-M4/M7/M33/M35P SIMD instructions. </td></tr>
<tr>
<td align="left"><a href="../../Core_A/html/index.html"><b>Core(A)</b></a></td><td align="left">Cortex-A5/A7/A9 </td><td align="left">Standardized API and basic run-time system for the Cortex-A5/A7/A9 processor core and peripherals. </td></tr>
<tr>
<td align="left"><a href="../../Driver/html/index.html"><b>Driver</b></a></td><td align="left">All Cortex </td><td align="left">Generic peripheral driver interfaces for middleware. Connects microcontroller peripherals with middleware that implements for example communication stacks, file systems, or graphic user interfaces. </td></tr>
<tr>
<td align="left"><a href="../../DSP/html/index.html"><b>DSP</b></a></td><td align="left">All Cortex-M </td><td align="left">DSP library collection with over 60 Functions for various data types: fixed-point (fractional q7, q15, q31) and single precision floating-point (32-bit). Implementations optimized for the SIMD instruction set are available for Cortex-M4/M7/M33/M35P. </td></tr>
<tr>
<td align="left"><a href="../../NN/html/index.html"><b>NN</b></a></td><td align="left">All Cortex-M </td><td align="left">Collection of efficient neural network kernels developed to maximize the performance and minimize the memory footprint on Cortex-M processor cores. </td></tr>
<tr>
<td align="left"><a href="../../RTOS/html/index.html"><b>RTOS v1</b></a></td><td align="left">Cortex-M0/M0+/M3/M4/M7 </td><td align="left">Common API for real-time operating systems along with a reference implementation based on RTX. It enables software components that can work across multiple RTOS systems. </td></tr>
<tr>
<td align="left"><a href="../../RTOS2/html/index.html"><b>RTOS v2</b></a></td><td align="left">All Cortex-M, Cortex-A5/A7/A9 </td><td align="left">Extends CMSIS-RTOS v1 with Armv8-M support, dynamic object creation, provisions for multi-core systems, binary compatible interface. </td></tr>
<tr>
<td align="left"><a href="../../Pack/html/index.html"><b>Pack</b></a></td><td align="left">All Cortex-M, SecurCore, Cortex-A5/A7/A9 </td><td align="left">Describes a delivery mechanism for software components, device parameters, and evaluation board support. It simplifies software re-use and product life-cycle management (PLM). </td></tr>
<tr>
<td align="left"><a href="../../SVD/html/index.html"><b>SVD</b></a></td><td align="left">All Cortex-M, SecurCore </td><td align="left">Peripheral description of a device that can be used to create peripheral awareness in debuggers or CMSIS-Core header files. </td></tr>
<tr>
<td align="left"><a href="../../DAP/html/index.html"><b>DAP</b></a></td><td align="left">All Cortex </td><td align="left">Firmware for a debug unit that interfaces to the CoreSight Debug Access Port. </td></tr>
<tr>
<td align="left"><a href="../../Zone/html/index.html"><b>Zone</b></a></td><td align="left">All Cortex </td><td align="left">Defines methods to describe system resources and to partition these resources into multiple projects and execution areas. </td></tr>
</table>
<h1><a class="anchor" id="Motivation"></a>
Motivation</h1>
<p>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. CMSIS is not a huge software layer that introduces overhead and does not define standard peripherals. The silicon industry can therefore support the wide variations of Cortex-M processor-based devices with this common standard.</p>
<div class="image">
<img src="Overview.png" alt="Overview.png"/>
<div class="caption">
CMSIS Structure</div></div>
<p> The benefits of the CMSIS are:</p>
<ul>
<li>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.</li>
<li>Consistent software interfaces improve the software portability and re-usability. Generic software libraries and interfaces provide consistent software framework.</li>
<li>It provides interfaces for debug connectivity, debug peripheral views, software delivery, and device support to reduce time-to-market for new microcontroller deployment.</li>
<li>Being a compiler independent layer, it allows to use the compiler of your choice. Thus, it is supported by mainstream compilers.</li>
<li>It enhances program debugging with peripheral information for debuggers and ITM channels for printf-style output.</li>
<li>CMSIS is delivered in CMSIS-Pack format which enables fast software delivery, simplifies updates, and enables consistent integration into development tools.</li>
<li>CMSIS-Zone will simplify system resource and partitioning as it manages the configuration of multiple processors, memory areas, and peripherals.</li>
</ul>
<h1><a class="anchor" id="CodingRules"></a>
Coding Rules</h1>
<p>The CMSIS uses the following essential coding rules and conventions:</p>
<ul>
<li>Compliant with ANSI C (C99) and C++ (C++03).</li>
<li>Uses ANSI C standard data types defined in <b>&lt;stdint.h&gt;</b>.</li>
<li>Variables and parameters have a complete data type.</li>
<li>Expressions for <em>#define</em> constants are enclosed in parenthesis.</li>
<li>Conforms to MISRA 2012 (but does not claim MISRA compliance). MISRA rule violations are documented.</li>
</ul>
<p>In addition, the CMSIS recommends the following conventions for identifiers:</p>
<ul>
<li><b>CAPITAL</b> names to identify Core Registers, Peripheral Registers, and CPU Instructions.</li>
<li><b>CamelCase</b> names to identify function names and interrupt functions.</li>
<li><b>Namespace_</b> prefixes avoid clashes with user identifiers and provide functional groups (i.e. for peripherals, RTOS, or DSP Library).</li>
</ul>
<p>The CMSIS is documented within the source files with: </p>
<ul>
<li>Comments that use the C or C++ style. </li>
<li><a href="http://www.doxygen.nl/" target="_blank">Doxygen</a> compliant <b>function comments</b> that provide:<ul>
<li>brief function overview.</li>
<li>detailed description of the function.</li>
<li>detailed parameter explanation.</li>
<li>detailed information about return values.</li>
</ul>
</li>
</ul>
<p>Doxygen comment example: </p>
<pre class="fragment">/**
* @brief Enable Interrupt in NVIC Interrupt Controller
* @param IRQn interrupt number that specifies the interrupt
* @return none.
* Enable the specified interrupt in the NVIC Interrupt Controller.
* Other settings of the interrupt such as priority are not affected.
*/
</pre><h1><a class="anchor" id="Validation"></a>
Validation</h1>
<p>The various components of CMSIS Version 5 are validated using mainstream compilers. To get a diverse coverage, Arm uses the Arm Compiler v5 (based on EDG front-end), the Arm Compiler v6 (based on LLVM front-end), and the GCC Compiler in the various tests. For each component, the section <b>"Validation"</b> describes the scope of the various verifications.</p>
<p>CMSIS components are compatible with a range of C and C++ language standards. The CMSIS components comply with the <a href="http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ihi0036b/index.html">Application Binary Interface (ABI) for the Arm Architecture</a> (exception CMSIS-RTOS v1). This ensures C API interfaces that support inter-operation between various toolchains.</p>
<p>As CMSIS defines API interfaces and functions that scale to a wide range of processors and devices, the scope of the run-time test coverage is limited. However, several components are validated using dedicated test suites.</p>
<p>The CMSIS source code is checked for MISRA C:2012 conformance using PC-Lint. MISRA deviations are documented with reasonable effort, however Arm does not claim MISRA compliance as there is today for example no guideline enforcement plan. The CMSIS source code is not checked for MISRA C++:2008 conformance as there is a risk that it is incompatible with C language standards, specifically warnings that may be generated by the various C compilers.</p>
<h1><a class="anchor" id="License"></a>
License</h1>
<p>The CMSIS is provided free of charge by Arm under the <a href="LICENSE.txt">Apache 2.0 License</a>.</p>
<h1><a class="anchor" id="CM_Pack_Content"></a>
CMSIS Software Pack</h1>
<p>The CMSIS software components are delivered in CMSIS-Pack format. The <b>ARM::CMSIS</b> Pack contains the following:</p>
<table class="doxtable">
<tr>
<th align="left">File/Directory </th><th align="left">Content </th></tr>
<tr>
<td align="left"><b>ARM.CMSIS.pdsc</b> </td><td align="left">Package description file in CMSIS-Pack format. </td></tr>
<tr>
<td align="left"><b>LICENSE.txt</b> </td><td align="left">CMSIS License Agreement (Apache 2.0) </td></tr>
<tr>
<td align="left"><b>CMSIS</b> </td><td align="left"><a class="el" href="index.html#CM_Components">CMSIS components</a> (see also table below) </td></tr>
<tr>
<td align="left"><b>Device</b> </td><td align="left">CMSIS reference implementations of Arm Cortex-M processor based devices </td></tr>
</table>
<h2>CMSIS Directory </h2>
<table class="doxtable">
<tr>
<th align="left">Directory </th><th align="left">Content </th></tr>
<tr>
<td align="left"><b>Documentation</b> </td><td align="left">This documentation </td></tr>
<tr>
<td align="left"><b>Core</b> </td><td align="left">User code templates for <a href="../../Core/html/index.html"><b>CMSIS-Core (Cortex-M)</b></a> related files, referenced in ARM.CMSIS.pdsc </td></tr>
<tr>
<td align="left"><b>Core_A</b> </td><td align="left">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 </td></tr>
<tr>
<td align="left"><b>DAP</b> </td><td align="left"><a href="../../DAP/html/index.html"><b>CMSIS-DAP</b></a> Debug Access Port source code and reference implementations </td></tr>
<tr>
<td align="left"><b>Driver</b> </td><td align="left">Header files for the <a href="../../Driver/html/index.html"><b>CMSIS-Driver</b></a> peripheral interface API </td></tr>
<tr>
<td align="left"><b>DSP_Lib</b> </td><td align="left"><a href="../../DSP/html/index.html"><b>CMSIS-DSP</b></a> software library source code </td></tr>
<tr>
<td align="left"><b>NN</b> </td><td align="left"><a href="../../NN/html/index.html"><b>CMSIS-NN</b></a> software library source code </td></tr>
<tr>
<td align="left"><b>Include</b> </td><td align="left">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> </td></tr>
<tr>
<td align="left"><b>Lib</b> </td><td align="left"><a href="../../DSP/html/index.html"><b>CMSIS-DSP</b></a> generated libraries for ARMCC and GCC </td></tr>
<tr>
<td align="left"><b>Pack</b> </td><td align="left"><a href="../../Pack/html/pack_Example.html"><b>CMSIS-Pack</b></a> example </td></tr>
<tr>
<td align="left"><b>RTOS</b> </td><td align="left"><a href="../../RTOS/html/index.html"><b>CMSIS-RTOS Version 1</b></a> along with RTX4 reference implementation </td></tr>
<tr>
<td align="left"><b>RTOS2</b> </td><td align="left"><a href="../../RTOS/html/index.html"><b>CMSIS-RTOS Version 2</b></a> along with RTX5 reference implementation </td></tr>
<tr>
<td align="left"><b>SVD</b> </td><td align="left"><a href="../../SVD/html/index.html"><b>CMSIS-SVD</b></a> example </td></tr>
<tr>
<td align="left"><b>Utilities</b> </td><td align="left">PACK.xsd (<a href="../../Pack/html/pack_Example.html"><b>CMSIS-Pack</b></a> schema file), PackChk.exe (checking tool for software packs), <br/>
CMSIS-SVD.xsd (<a href="../../SVD/html/index.html"><b>CMSIS-SVD</b></a> schema file), SVDConv.exe (conversion tool for SVD files) </td></tr>
</table>
<hr/>
</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:41 for CMSIS Version 5.6.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>