MDK-ARM Primer

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.

Note

  • onARM provides CMSIS documentation, examples, and information.