Cortex Microcontroller Software Interface Standard (CMSIS) is
developed by ARM in close co-operation with various silicon and
software vendors and provides a common approach to interface to
peripherals, real-time operating systems, and middleware components.
CMSIS applies to Cortex-M processor-based devices.
CMSIS defines the basic requirements to achieve software
re-usability and portability. MCU vendors may include additional
functions for each peripheral to enrich the features of their
The aims of CMSIS are to:
- Improve software portability and re-usability.
Enable software solution suppliers to develop products that can
work seamlessly with device libraries from various silicon
Allow developers to write software quicker through an easy to
use and standardized software interface.
Allow embedded software to be used on multiple compiler
Avoid device driver compatibility issues when using software
solutions from multiple sources.
The area of standardization includes:
Hardware Abstraction Layer (HAL) for Cortex-M processor
registers with standardized definitions for the SysTick, NVIC,
System Control Block registers, MPU registers, and core access
Standardized system exception names to allow RTOS and
middleware components to utilize system exceptions without having
Standardized methods to organize header files that makes
it easy to learn new Cortex-M microcontroller products and improve
Common methods for system initialization to be used by
each MCU vendor. For example, the standardized SystemInit()
function, provided in each device driver library, is essential for
configuring the clock.
Standardized intrinsic functions that are normally used
to produce instructions that cannot be generated by IEC/ISO C. By
having standardized intrinsic functions, software re-usability and
portability is greatly improved.
Standardized ways to determine the system clock
frequency through a software variable, SystemFrequency,
defined in the device driver. Allows RTOS to setup the SysTick unit
based on the system clock frequency.
The following sections provide an introduction to the
CMSIS Organisation, which gives
an overview of the CMSIS implementation layers (Core Peripheral
Access Layer, Device Peripheral Access Layer, Access Functions for
CMSIS Usage, which describes
the CMSIS implementation standards and access to the provided
features and functions.
provides CMSIS documentation, examples, and information.