Arm Cortex-M
Programming
Armv6-M Programming Model
The programming model used in Cortex-M processors with low power consumption. For example, Cortex-M0.
Armv7-M Programming Model
This is the programming model used in Cortex-M processors with higher performance. For example, Cortex-M4.
CMSIS
Arm specifies a standard C interface for programming Cortex-M processors, the Cortex-M Standard Interface (CMSIS). The Arm licensees are strongly encouraged to provide the CMSIS functions as part of their microcontroller programming SDK. Third-party software libraries usually rely on CMSIS availability.
Intrinsic Functions
Instruction | CMSIS intrinsic function |
---|---|
CPSIE I | void __enable_irq(void) |
CPSID I | void __disable_irq(void) |
ISB | void __ISB(void) |
DSB | void __DSB(void) |
DMB | void __DMB(void) |
NOP | void __NOP(void) |
REV | uint32_t __REV(uint32_t int value) |
REV16 | uint32_t __REV16(uint32_t int value) |
REVSH | uint32_t __REVSH(uint32_t int value) |
SEV | void __SEV(void) |
WFE | void __WFE(void) |
WFI | void __WFI(void) |
Register | CMSIS read function | CMSIS write function |
---|---|---|
PRIMASK | uint32_t __get_PRIMASK (void) | void __set_PRIMASK (uint32_t value) |
CONTROL | uint32_t __get_CONTROL (void) | void __set_CONTROL (uint32_t value) |
MSP | uint32_t __get_MSP (void) | void __set_MSP (uint32_t TopOfMainStack) |
PSP | uint32_t __get_PSP (void) | void __set_PSP (uint32_t TopOfProcStack) |
Cross-Compiling
If your operating system is Ubuntu Linux, running on an x64/AMD64 processor, you need the following package to cross-compile code to run on ARM Cortex series processors:
sudo apt-get install gcc-arm-none-eabi
Processor Cores
ARM's family of Cortex-M processors (notably M0, M0+, M3, M4) are designed for use as energy-efficient microcontrollers, where M0+ is the cheapest and most efficient, and M4 is the fastest and most capable (offering DSP functions and a floating point unit).
Reference Manuals
Cortex-M0+
Cortex-M4
Development Boards
- Nucleo boards by STMicroelectronics, with STM32 processors
- Freedom boards by NXP (after buying Freescale), with Kinetis processors
- LPCXpresso boards by NXP
- ARM related products by Olimex
Software Development Tools
- ARM Mbed framework that provides higher-level C++ API, with downloadable or web-based IDE.
- GNU ARM Embedded Toolchain for Ubuntu
or the latest toolchain for all Linux distros, macOS, and Windows directly from ARM Ltd. - GNU MCU Eclipse plugin with good support for STM32
- OpenOCD on-chip debugger
- STM32Cube tools and drivers package for STM32 programming (CMSIS and HAL libraries)
- LPCXpresso IDE and utility programs for programming LPCXpresso boards.
Tutorials
- Arm Cortex-M Assembly programming
- Programming the STM Nucleo-64 boards
- Programming the STM Nucleo-32 boards
- Programming the Cortex-M4 development board SAM E54 Xplained Pro
- ARM Bootloader
- ARM GCC Inline Assembler Cookbook by Harald Kipp
- Collection of Cortex-M tutorials by Keil
- Programming STM32F103RET Cortex-M3 with GNU ARM Eclipse Plugin