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.
15 - \ref using_TrustZone_pg "Using TrustZone® for Armv8-M" describes how to use the security extensions available in the Armv8-M architecture.
16 - \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.
17 - \ref coreMISRA_Exceptions_pg describes the violations to the MISRA standard.
18 - <a href="Modules.html">\b Reference </a> describe the features and functions of the \ref device_h_pg in detail.
19 - <a href="Annotated.html">\b Data \b Structures </a> describe the data structures of the \ref device_h_pg in detail.
23 CMSIS-Core (Cortex-M) in ARM::CMSIS Pack
24 -----------------------------
26 Files relevant to CMSIS-Core (Cortex-M) are present in the following <b>ARM::CMSIS</b> directories:
27 |File/Folder |Content |
28 |------------------------------|------------------------------------------------------------------------|
29 |\b CMSIS\\Documentation\\Core | This documentation |
30 |\b CMSIS\\Core\\Include | CMSIS-Core (Cortex-M) header files (for example core_cm3.h, core_cmInstr.h, etc.) |
31 |\b Device | \ref using_ARM_pg "Arm reference implementations" of Cortex-M devices |
32 |\b Device\\\_Template_Vendor | \ref templates_pg for extension by silicon vendors |
36 \section ref_v6-v8M Processor Support
38 CMSIS supports the complete range of <a href="http://www.arm.com/products/processors/cortex-m/index.php" target="_blank"><b>Cortex-M processors</b></a> (with exception of Cortex-M1) and
39 the <a href="http://www.arm.com/products/processors/instruction-set-architectures/armv8-m-architecture.php" target="_blank"><b>Armv8-M architecture</b></a> including security extensions.
41 \subsection ref_man_sec Cortex-M Reference Manuals
43 The Cortex-M Device Generic User Guides contain the programmers model and detailed information about the core peripherals and are available for:
45 - <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)
46 - <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)
47 - <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)
48 - <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)
49 - <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)
51 The \b Cortex-M23 and \b Cortex-M33 are described with Technical Reference Manuals that are available here:
52 - <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)
53 - <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)
55 \subsection ARMv8M Armv8-M Architecture
57 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).
58 Both Armv8-M profiles are supported by CMSIS.
60 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>.
64 \section tested_tools_sec Tested and Verified Toolchains
66 The \ref templates_pg supplied by Arm have been tested and verified with the following toolchains:
67 - Arm: Arm Compiler 5.06 update 6 (not for Cortex-M23, Cortex-M33, Armv8-M)
68 - Arm: Arm Compiler 6.9
69 - Arm: Arm Compiler 6.6.2 (not for Cortex-M0, Cortex-M23, Cortex-M33, Armv8-M)
70 - GNU: GNU Tools for Arm Embedded 6.3.1 20170620
71 - IAR: IAR ANSI C/C++ Compiler for Arm 8.20.1.14183
75 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
78 \page core_revisionHistory Revision History of CMSIS-Core (Cortex-M)
80 <table class="cmtable" summary="Core Exception Name">
88 Aligned MSPLIM and PSPLIM access functions along supported compilers.\n
94 Added MPU Functions for ARMv8-M for Cortex-M23/M33.\n
95 Moved __SSAT and __USAT intrinsics to CMSIS-Core.\n
96 Aligned __REV, __REV16 and __REVSH intrinsics along supported compilers.\n
102 Added macros \ref \__UNALIGNED_UINT16_READ, \ref \__UNALIGNED_UINT16_WRITE.\n
103 Added macros \ref \__UNALIGNED_UINT32_READ, \ref \__UNALIGNED_UINT32_WRITE.\n
104 Deprecated macro \ref \__UNALIGNED_UINT32.\n
105 Changed \ref version_control_gr macros to be core agnostic. \n
106 Added \ref mpu_functions for Cortex-M0+/M3/M4/M7.
112 Added: macro \ref \__PACKED_STRUCT. \n
113 Added: uVisor support. \n
119 Added: Cortex-M23, Cortex-M33 support.\n
120 Added: macro __SAU_PRESENT with __SAU_REGION_PRESENT. \n
121 Replaced: macro __SAU_PRESENT with __SAU_REGION_PRESENT. \n
122 Reworked: SAU register and functions. \n
123 Added: macro \ref \__ALIGNED. \n
124 Updated: function \ref SCB_EnableICache. \n
125 Added: cmsis_compiler.h with compiler specific CMSIS macros, functions, instructions. \n
126 Added: macro \ref \__PACKED. \n
127 Updated: compiler specific include files. \n
128 Updated: core dependant include files. \n
129 Removed: deprecated files core_cmfunc.h, core_cminstr.h, core_cmsimd.h.
133 <td>V5.00<br>Beta 6</td>
135 Added: SCB_CFSR register bit definitions. \n
136 Added: function \ref NVIC_GetEnableIRQ. \n
137 Updated: core instruction macros \ref \__NOP, \ref \__WFI, \ref \__WFE, \ref \__SEV for toolchain GCC.
141 <td>V5.00<br>Beta 5</td>
143 Moved: DSP libraries from CMSIS/DSP/Lib to CMSIS/Lib. \n
144 Added: DSP libraries build projects to CMSIS pack.
148 <td>V5.00<br>Beta 4</td>
150 Updated: ARMv8M device files. \n
151 Corrected: ARMv8MBL interrupts. \n
152 Reworked: NVIC functions.
156 <td>V5.00<br>Beta 2</td>
158 Changed: ARMv8M SAU regions to 8. \n
159 Changed: moved function \ref TZ_SAU_Setup to file partition_<device>.h. \n
160 Changed: license under Apache-2.0. \n
161 Added: check if macro is defined before use. \n
162 Corrected: function \ref SCB_DisableDCache. \n
163 Corrected: macros \ref \_VAL2FLD, \ref \_FLD2VAL. \n
164 Added: NVIC function virtualization with macros \ref CMSIS_NVIC_VIRTUAL and \ref CMSIS_VECTAB_VIRTUAL.
168 <td>V5.00<br>Beta 1</td>
170 Renamed: cmsis_armcc_V6.h to cmsis_armclang.h.\n
171 Renamed: core\_*.h to lower case.\n
172 Added: function \ref SCB_GetFPUType to all CMSIS cores.\n
173 Added: ARMv8-M support.
179 Corrected: DoxyGen function parameter comments.\n
180 Corrected: IAR toolchain: removed for \ref NVIC_SystemReset the attribute(noreturn).\n
181 Corrected: GCC toolchain: suppressed irrelevant compiler warnings.\n
182 Added: Support files for Arm Compiler v6 (cmsis_armcc_v6.h).
188 Corrected: MISRA-C:2004 violations. \n
189 Corrected: predefined macro for TI CCS Compiler. \n
190 Corrected: function \ref __SHADD16 in arm_math.h. \n
191 Updated: cache functions for Cortex-M7. \n
192 Added: macros \ref _VAL2FLD, \ref _FLD2VAL to core\_*.h. \n
193 Updated: functions \ref __QASX, \ref __QSAX, \ref __SHASX, \ref __SHSAX. \n
194 Corrected: potential bug in function \ref __SHADD16.
200 Corrected: MISRA-C:2004 violations. \n
201 Corrected: intrinsic functions \ref __DSB, \ref __DMB, \ref __ISB. \n
202 Corrected: register definitions for ITCMCR register. \n
203 Corrected: register definitions for \ref CONTROL_Type register. \n
204 Added: functions \ref SCB_GetFPUType, \ref SCB_InvalidateDCache_by_Addr to core_cm7.h. \n
205 Added: register definitions for \ref APSR_Type, \ref IPSR_Type, \ref xPSR_Type register. \n
206 Added: \ref __set_BASEPRI_MAX function to core_cmFunc.h. \n
207 Added: intrinsic functions \ref __RBIT, \ref __CLZ for Cortex-M0/CortexM0+. \n
213 Added: Cortex-M7 support.\n
214 Added: intrinsic functions for \ref __RRX, \ref __LDRBT, \ref __LDRHT, \ref __LDRT, \ref __STRBT, \ref __STRHT, and \ref __STRT \n
219 <td>Corrected: C++ include guard settings.\n</td>
223 <td>Added: COSMIC tool chain support.\n
224 Corrected: GCC __SMLALDX instruction intrinsic for Cortex-M4.\n
225 Corrected: GCC __SMLALD instruction intrinsic for Cortex-M4.\n
226 Corrected: GCC/CLang warnings.\n
231 <td>Added: \ref __BKPT instruction intrinsic.\n
232 Added: \ref __SMMLA instruction intrinsic for Cortex-M4.\n
233 Corrected: \ref ITM_SendChar.\n
234 Corrected: \ref __enable_irq, \ref __disable_irq and inline assembly for GCC Compiler.\n
235 Corrected: \ref NVIC_GetPriority and VTOR_TBLOFF for Cortex-M0/M0+, SC000. \n
236 Corrected: rework of in-line assembly functions to remove potential compiler warnings.\n
241 <td>Added support for Cortex-M0+ processor.\n</td>
245 <td>Added support for GNU GCC ARM Embedded Compiler. \n
246 Added function \ref __ROR.\n
247 Added \ref regMap_pg for TPIU, DWT. \n
248 Added support for \ref core_config_sect "SC000 and SC300 processors".\n
249 Corrected \ref ITM_SendChar function. \n
250 Corrected the functions \ref __STREXB, \ref __STREXH, \ref __STREXW for the GNU GCC compiler section. \n
251 Documentation restructured.
256 <td>Updated documentation.\n
257 Updated CMSIS core include files.\n
258 Changed CMSIS/Device folder structure.\n
259 Added support for Cortex-M0, Cortex-M4 w/o FPU to CMSIS DSP library.\n
260 Reworked CMSIS DSP library examples.
265 <td>Added support for Cortex-M4 processor.</td>
269 <td>Reworked Startup Concept.\n
270 Added additional Debug Functionality.\n
271 Changed folder structure.\n
272 Added doxygen comments.\n
273 Added definitions for bit.
278 <td>Added support for Cortex-M0 processor.</td>
282 <td>Added intrinsic functions for \ref __LDREXB, \ref __LDREXH, \ref __LDREXW, \ref __STREXB, \ref __STREXH, \ref __STREXW, and \ref __CLREX</td>
286 <td>Initial Release for Cortex-M3 processor.</td>