3 CMSIS-Core (Cortex-M) implements the basic run-time system for a Cortex-M device and gives the user access to the processor core and the device peripherals.
5 - <b>Hardware Abstraction Layer (HAL)</b> for Cortex-M processor registers with standardized definitions for the SysTick, NVIC, System Control Block registers, MPU registers, FPU registers, and core access functions.
6 - <b>System exception names</b> to interface to system exceptions without having compatibility issues.
7 - <b>Methods to organize header files</b> that makes it easy to learn new Cortex-M microcontroller products and improve software portability. This includes naming conventions for device-specific interrupts.
8 - <b>Methods for system initialization</b> to be used by each MCU vendor. For example, the standardized SystemInit() function is essential for configuring the clock system of the device.
9 - <b>Intrinsic functions</b> used to generate CPU instructions that are not supported by standard C functions.
10 - A variable to determine the <b>system clock frequency</b> which simplifies the setup the SysTick timer.
13 The following sections provide details about the CMSIS-Core (Cortex-M):
14 - \ref using_pg describes the project setup and shows a simple program example.
16 - \ref using_TrustZone_pg "Using TrustZone® for Armv8-M" describes how to use the security extensions available in the Armv8-M architecture.
18 - \ref templates_pg describes the files of the CMSIS-Core (Cortex-M) in detail and explains how to adapt template files provided by Arm to silicon vendor devices.
19 - \ref coreMISRA_Exceptions_pg describes the violations to the MISRA standard.
20 - <a href="Modules.html">\b Reference </a> describe the features and functions of the \ref device_h_pg in detail.
21 - <a href="Annotated.html">\b Data \b Structures </a> describe the data structures of the \ref device_h_pg in detail.
25 CMSIS-Core (Cortex-M) in ARM::CMSIS Pack
26 -----------------------------
28 Files relevant to CMSIS-Core (Cortex-M) are present in the following <b>ARM::CMSIS</b> directories:
29 |File/Folder |Content |
30 |------------------------------|------------------------------------------------------------------------|
31 |\b CMSIS\\Documentation\\Core | This documentation |
32 |\b CMSIS\\Core\\Include | CMSIS-Core (Cortex-M) header files (for example core_cm3.h, core_cmInstr.h, etc.) |
33 |\b Device | \ref using_ARM_pg "Arm reference implementations" of Cortex-M devices |
34 |\b Device\\\_Template_Vendor | \ref templates_pg for extension by silicon vendors |
38 \section ref_v6-v8M Processor Support
40 CMSIS supports the complete range of <a href="https://developer.arm.com/products/processors/cortex-m" target="_blank"><b>Cortex-M processors</b></a> and
41 the <a href="http://www.arm.com/products/processors/instruction-set-architectures/armv8-m-architecture.php" target="_blank"><b>Armv8-M/v8.1-M architecture</b></a> including security extensions.
43 \subsection ref_man_sec Cortex-M Reference Manuals
45 The Cortex-M Device Generic User Guides contain the programmers model and detailed information about the core peripherals and are available for:
47 - <a href="http://infocenter.arm.com/help/topic/com.arm.doc.dui0497a/DUI0497A_cortex_m0_r0p0_generic_ug.pdf" target="_blank"><b>Cortex-M0 Devices Generic User Guide</b></a> (Armv6-M architecture)
48 - <a href="http://infocenter.arm.com/help/topic/com.arm.doc.dui0662b/DUI0662B_cortex_m0p_r0p1_dgug.pdf" target="_blank"><b>Cortex-M0+ Devices Generic User Guide</b></a> (Armv6-M architecture)
49 - <a href="http://infocenter.arm.com/help/topic/com.arm.doc.dui0552a/DUI0552A_cortex_m3_dgug.pdf" target="_blank"><b>Cortex-M3 Devices Generic User Guide</b></a> (Armv7-M architecture)
50 - <a href="http://infocenter.arm.com/help/topic/com.arm.doc.dui0553a/DUI0553A_cortex_m4_dgug.pdf" target="_blank"><b>Cortex-M4 Devices Generic User Guide</b></a> (ARMv7-M architecture)
51 - <a href="http://infocenter.arm.com/help/topic/com.arm.doc.dui0646a/DUI0646A_cortex_m7_dgug.pdf" target="_blank"><b>Cortex-M7 Devices Generic User Guide</b></a> (Armv7-M architecture)
54 The \b Cortex-M23 and \b Cortex-M33 are described with Technical Reference Manuals that are available here:
55 - <a href="http://infocenter.arm.com/help/topic/com.arm.doc.ddi0550c/cortex_m23_r1p0_technical_reference_manual_DDI0550C_en.pdf" target="_blank"><b>Cortex-M23 Technical Reference Manual</b></a> (Armv8-M baseline architecture)
56 - <a href="http://infocenter.arm.com/help/topic/com.arm.doc.100230_0002_00_en/cortex_m33_trm_100230_0002_00_en.pdf" target="_blank"><b>Cortex-M33 Technical Reference Manual</b></a> (Armv8-M mainline architecture)
58 CMSIS also supports the following Cortex-M processor variants:
59 - <a href="https://developer.arm.com/products/processors/cortex-m/cortex-m1" target="_blank"><b>Cortex-M1</b></a> is a processor designed specifically for implementation in FPGAs (Armv6-M architecture).
60 - <a href="https://developer.arm.com/products/processors/cortex-m/sc000-processor" target="_blank"><b>SecurCore SC000</b></a> is designed specifically for smartcard and security applications (Armv6-M architecture).
61 - <a href="https://developer.arm.com/products/processors/cortex-m/sc300-processor" target="_blank"><b>SecurCore SC300</b></a> is designed specifically for smartcard and security applications (Armv7-M architecture).
62 - <a href="https://developer.arm.com/products/processors/cortex-m/sc300-processor" target="_blank"><b>Cortex-M35P</b></a> is a temper resistant Cortex-M processor with optional software isolation using TrustZone for Armv8-M.
64 \subsection ARMv8M Armv8-M and Armv8.1-M Architecture
66 Armv8-M introduces two profiles \b baseline (for power and area constrained applications) and \b mainline (full-featured with optional SIMD, floating-point, and co-processor extensions).
67 Both Armv8-M profiles and Armv8.1M are supported by CMSIS.
69 The Armv8-M Architecture is described in the <a href="http://developer.arm.com/products/architecture/m-profile/docs/ddi0553/latest/armv8-m-architecture-reference-manual" target="_blank"><b>Armv8-M Architecture Reference Manual</b></a>.
71 The Armv8.1-M Architecture further extends Armv8-M with Helium, an Microcontroller Vector Extension (MVE) and further instruction set and debug extensions.
72 More information about Armv8.1-M Architecture is available under <a href="https://developer.arm.com/technologies/helium" target="_blank"><b>Arm Helium technology</b></a>.
78 \section tested_tools_sec Tested and Verified Toolchains
80 The \ref templates_pg supplied by Arm have been tested and verified with the following toolchains:
81 - Arm: Arm Compiler 5.06 update 6 (not for Cortex-M23/33/35P/55, Armv8-M, Armv8.1-M)
82 - Arm: Arm Compiler 6.14
83 - Arm: Arm Compiler 6.6.2 (not for Cortex-M0/23/33/35P/55, Armv8-M, Armv8.1-M)
84 - GNU: GNU Tools for Arm Embedded 9.2.1 2019q4
85 - IAR: IAR ANSI C/C++ Compiler for Arm 8.20.1.14183
89 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
92 \page core_revisionHistory Revision History of CMSIS-Core (Cortex-M)
94 <table class="cmtable" summary="Revision History">
103 Added: Cortex-M55 cpu support
104 Enhanced: MVE support for Armv8.1-MML
106 Fixed: Device config define checks
107 Added: L1 Cache functions for Armv7-M and later
113 Added: Provisions for compiler-independent C startup code.
119 Fixed: Compilation issue in cmsis_armclang_ltm.h introduced in 5.2.0
125 Added: Cortex-M35P support.\n
126 Added: Cortex-M1 support.\n
127 Added: Armv8.1 architecture support.\n
128 Added: \ref __RESTRICT and \ref __STATIC_FORCEINLINE compiler control macros.
134 Removed using get/set built-ins FPSCR in GCC >= 7.2 due to shortcomings.\n
135 Added __NO_RETURN to __NVIC_SystemReset() to silence compiler warnings.\n
136 Added support for Cortex-M1 (beta). \n
137 Removed usage of register keyword. \n
138 Added defines for EXC_RETURN, FNC_RETURN and integrity signature values. \n
139 Enhanced MPUv7 API with defines for memory access attributes.
145 Aligned MSPLIM and PSPLIM access functions along supported compilers.
151 Added MPU Functions for ARMv8-M for Cortex-M23/M33.\n
152 Moved __SSAT and __USAT intrinsics to CMSIS-Core.\n
153 Aligned __REV, __REV16 and __REVSH intrinsics along supported compilers.
159 Added macros \ref \__UNALIGNED_UINT16_READ, \ref \__UNALIGNED_UINT16_WRITE.\n
160 Added macros \ref \__UNALIGNED_UINT32_READ, \ref \__UNALIGNED_UINT32_WRITE.\n
161 Deprecated macro \ref \__UNALIGNED_UINT32.\n
162 Changed \ref version_control_gr macros to be core agnostic. \n
163 Added \ref mpu_functions for Cortex-M0+/M3/M4/M7.
169 Added: macro \ref \__PACKED_STRUCT. \n
170 Added: uVisor support. \n
176 Added: Cortex-M23, Cortex-M33 support.\n
177 Added: macro __SAU_PRESENT with __SAU_REGION_PRESENT. \n
178 Replaced: macro __SAU_PRESENT with __SAU_REGION_PRESENT. \n
179 Reworked: SAU register and functions. \n
180 Added: macro \ref \__ALIGNED. \n
181 Updated: function \ref SCB_EnableICache. \n
182 Added: cmsis_compiler.h with compiler specific CMSIS macros, functions, instructions. \n
183 Added: macro \ref \__PACKED. \n
184 Updated: compiler specific include files. \n
185 Updated: core dependant include files. \n
186 Removed: deprecated files core_cmfunc.h, core_cminstr.h, core_cmsimd.h.
190 <td>V5.00<br>Beta 6</td>
192 Added: SCB_CFSR register bit definitions. \n
193 Added: function \ref NVIC_GetEnableIRQ. \n
194 Updated: core instruction macros \ref \__NOP, \ref \__WFI, \ref \__WFE, \ref \__SEV for toolchain GCC.
198 <td>V5.00<br>Beta 5</td>
200 Moved: DSP libraries from CMSIS/DSP/Lib to CMSIS/Lib. \n
201 Added: DSP libraries build projects to CMSIS pack.
205 <td>V5.00<br>Beta 4</td>
207 Updated: ARMv8M device files. \n
208 Corrected: ARMv8MBL interrupts. \n
209 Reworked: NVIC functions.
213 <td>V5.00<br>Beta 2</td>
215 Changed: ARMv8M SAU regions to 8. \n
217 Changed: moved function \ref TZ_SAU_Setup to file partition_<device>.h. \n
219 Changed: license under Apache-2.0. \n
220 Added: check if macro is defined before use. \n
221 Corrected: function \ref SCB_DisableDCache. \n
222 Corrected: macros \ref \_VAL2FLD, \ref \_FLD2VAL. \n
223 Added: NVIC function virtualization with macros \ref CMSIS_NVIC_VIRTUAL and \ref CMSIS_VECTAB_VIRTUAL.
227 <td>V5.00<br>Beta 1</td>
229 Renamed: cmsis_armcc_V6.h to cmsis_armclang.h.\n
230 Renamed: core\_*.h to lower case.\n
231 Added: function \ref SCB_GetFPUType to all CMSIS cores.\n
232 Added: ARMv8-M support.
238 Corrected: DoxyGen function parameter comments.\n
239 Corrected: IAR toolchain: removed for \ref NVIC_SystemReset the attribute(noreturn).\n
240 Corrected: GCC toolchain: suppressed irrelevant compiler warnings.\n
241 Added: Support files for Arm Compiler v6 (cmsis_armcc_v6.h).
247 Corrected: MISRA-C:2004 violations. \n
248 Corrected: predefined macro for TI CCS Compiler. \n
249 Corrected: function \ref __SHADD16 in arm_math.h. \n
250 Updated: cache functions for Cortex-M7. \n
251 Added: macros \ref _VAL2FLD, \ref _FLD2VAL to core\_*.h. \n
252 Updated: functions \ref __QASX, \ref __QSAX, \ref __SHASX, \ref __SHSAX. \n
253 Corrected: potential bug in function \ref __SHADD16.
259 Corrected: MISRA-C:2004 violations. \n
260 Corrected: intrinsic functions \ref __DSB, \ref __DMB, \ref __ISB. \n
261 Corrected: register definitions for ITCMCR register. \n
262 Corrected: register definitions for \ref CONTROL_Type register. \n
263 Added: functions \ref SCB_GetFPUType, \ref SCB_InvalidateDCache_by_Addr to core_cm7.h. \n
264 Added: register definitions for \ref APSR_Type, \ref IPSR_Type, \ref xPSR_Type register. \n
265 Added: \ref __set_BASEPRI_MAX function to core_cmFunc.h. \n
266 Added: intrinsic functions \ref __RBIT, \ref __CLZ for Cortex-M0/CortexM0+. \n
272 Added: Cortex-M7 support.\n
273 Added: intrinsic functions for \ref __RRX, \ref __LDRBT, \ref __LDRHT, \ref __LDRT, \ref __STRBT, \ref __STRHT, and \ref __STRT \n
278 <td>Corrected: C++ include guard settings.\n</td>
283 Added: COSMIC tool chain support.\n
284 Corrected: GCC __SMLALDX instruction intrinsic for Cortex-M4.\n
285 Corrected: GCC __SMLALD instruction intrinsic for Cortex-M4.\n
286 Corrected: GCC/CLang warnings.\n
292 Added: \ref __BKPT instruction intrinsic.\n
293 Added: \ref __SMMLA instruction intrinsic for Cortex-M4.\n
294 Corrected: \ref ITM_SendChar.\n
295 Corrected: \ref __enable_irq, \ref __disable_irq and inline assembly for GCC Compiler.\n
296 Corrected: \ref NVIC_GetPriority and VTOR_TBLOFF for Cortex-M0/M0+, SC000. \n
297 Corrected: rework of in-line assembly functions to remove potential compiler warnings.\n
302 <td>Added support for Cortex-M0+ processor.\n</td>
307 Added support for GNU GCC ARM Embedded Compiler. \n
308 Added function \ref __ROR.\n
309 Added \ref regMap_pg for TPIU, DWT. \n
310 Added support for \ref core_config_sect "SC000 and SC300 processors".\n
311 Corrected \ref ITM_SendChar function. \n
312 Corrected the functions \ref __STREXB, \ref __STREXH, \ref __STREXW for the GNU GCC compiler section. \n
313 Documentation restructured.
319 Updated documentation.\n
320 Updated CMSIS core include files.\n
321 Changed CMSIS/Device folder structure.\n
322 Added support for Cortex-M0, Cortex-M4 w/o FPU to CMSIS DSP library.\n
323 Reworked CMSIS DSP library examples.
328 <td>Added support for Cortex-M4 processor.</td>
333 Reworked Startup Concept.\n
334 Added additional Debug Functionality.\n
335 Changed folder structure.\n
336 Added doxygen comments.\n
337 Added definitions for bit.
342 <td>Added support for Cortex-M0 processor.</td>
346 <td>Added intrinsic functions for \ref __LDREXB, \ref __LDREXH, \ref __LDREXW, \ref __STREXB, \ref __STREXH, \ref __STREXW, and \ref __CLREX</td>
350 <td>Initial Release for Cortex-M3 processor.</td>