CMSIS-Core files can be differentiated in two main groups:
The detailed file structure of the CMSIS-Core files is shown in the following picture.
Delivery in CMSIS-Packs explains how CMSIS-Core Files can be distributed in CMSIS-Pack format.
The CMSIS-Core Standard file implement all attributes specific to Arm processor cores and generally do not need any modifications.
The files are provided by Arm as CMSIS-Core software component that is part of the CMSIS Software pack. The CMSIS-Core standard files can be split into following categories explained below:
The CMSIS-Core processor files define the core peripherals and provide helper functions for their access.
The files have naming convention core_<cpu>.h
, with one file available for each supported processor <cpu>
as listed in the table below.
Header File | Target Processor Core |
---|---|
📂 CMSIS/Core/Include | CMSIS-Core include folder (See on GitHub) |
┣ 📄 core_cm0.h | Cortex-M0 processor |
┣ 📄 core_cm0plus.h | Cortex-M0+ processor |
┣ 📄 core_cm1.h | Cortex-M1 processor |
┣ 📄 core_cm3.h | Cortex-M3 processor |
┣ 📄 core_cm4.h | Cortex-M4 processor |
┣ 📄 core_cm7.h | Cortex-M7 processor |
┣ 📄 core_cm23.h | Cortex-M23 processor |
┣ 📄 core_cm33.h | Cortex-M33 processor |
┣ 📄 core_cm35p.h | Cortex-M35P processor |
┣ 📄 core_cm52.h | Cortex-M52 processor |
┣ 📄 core_cm55.h | Cortex-M55 processor |
┣ 📄 core_cm85.h | Cortex-M85 processor |
┣ 📄 core_starmc1.h | STAR-MC1 processor |
┣ 📄 core_sc000.h | SC000 processor |
┗ 📄 core_sc300.h | SC300 processor |
The files also include the CMSIS-Core Compiler Files and depending on the features supported by the core also correponding CMSIS-Core Architecture Feature Files.
The CMSIS-Core compiler files provide consistent implementations of #define
symbols that allow toolchain-agnostic usage of CMSIS-Core. CMSIS-Core Processor Files rely on such toolchain-agnostic abstractions by including cmsis_compiler.h
file that then selects the target compiler-specific implementatation depending on the toolchain used in the project.
CMSIS-Core compiler files are provided in CMSIS/Core/Include/
directory, and define the supported compilers as listed in Tested and Verified Toolchains. Compiler Control documents the functionalities provided by the CMSIS compliant toolchains.
Header File | Description |
---|---|
📂 CMSIS/Core/Include | CMSIS-Core include folder (See on GitHub) |
┣ 📄 cmsis_compiler.h | Main CMSIS-Core compiler header file |
┗ 📂 m-profile | Directory for M-Profile specific files |
┣ 📄 cmsis_armclang_m.h | CMSIS-Core Arm Clang compiler file for Cortex-M |
┣ 📄 cmsis_clang_m.h | CMSIS-Core Clang compiler file for Cortex-M |
┣ 📄 cmsis_gcc_m.h | CMSIS-Core GCC compiler file for Cortex-M |
┣ 📄 cmsis_iccarm_m.h | CMSIS-Core IAR compiler file for Cortex-M |
┗ 📄 cmsis_tiarmclang_m.h | CMSIS-Core TI Clang compiler file |
Several architecture-specific features are implemented in separate header files that then gets included by CMSIS-Core Processor Files if corresponding feature is supported.
For Cortex-M cores following architecture feature files are provided in the CMSIS/Core/Include/m-profile/
folder:
Header File | Feature |
---|---|
📂 CMSIS/Core/Include | CMSIS-Core include folder (See on GitHub) |
┣ 📂 m-profile | Directory for M-Profile specific files |
┣ 📄 armv7m_cache1.h | Cache Functions (Level-1) |
┣ 📄 armv7m_mpu.h | MPU Functions for Armv6-M/v7-M |
┣ 📄 armv8m_mpu.h | MPU Functions for Armv8-M |
┣ 📄 armv8m_pmu.h | PMU Functions for Armv8.1-M |
┗ 📄 armv81m_pac.h | PAC functions |
┗ 📄 tz_context.h | API header file for RTOS Context Management |
__CM_CMSIS_VERSION is defined in the cmsis_version.h
file and provides the version of the CMSIS-Core (Cortex-M). It is constructed as follows:
The cmsis_version.h
is included by each cpu_<core>.h
so the CMSIS version defines are available via them already.
The cpu_<core>.h
files use specific defines (such as __CORTEX_M) that provide identification of the target processor core.
These defines can be used in the Device Header File <Device.h> to verify a minimum CMSIS-Core version as well as the target processor. Read more at Version Control.