Keil Logo Arm Logo

CMSIS Overview

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 software solution.

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 vendors.
  • Allow developers to write software quicker through an easy to use and standardized software interface.
  • Allow embedded software to be used on multiple compiler products.
  • 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 functions.
  • Standardized system exception names to allow RTOS and middleware components to utilize system exceptions without having compatibility issues.
  • Standardized methods to organize header files that makes it easy to learn new Cortex-M microcontroller products and improve software portability.
  • 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 Peripherals Layer).
  • CMSIS Usage, which describes the CMSIS implementation standards and access to the provided features and functions.


  • onARM provides CMSIS documentation, examples, and information.

Keil logo

Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.