Jump to: navigation, search

by Andreas Schwarz

ARM is a company that develops processor cores. ARM does not produce any silicon itself, but licenses the IP (intellectual property) to semiconductor manufacturers who integrate the core with peripherals and RAM.



The ARM7(TDMI) was the first ARM architecture that gained widespread use in small to medium-size microcontrollers. The extension TDMI indicates support for an additional, 16 bit instruction set, called Thumb. The Thumb instruction set allows smaller application binary sizes at only marginally reduced performance. In some processors (e.g. AT91SAM7) the Thumb instruction set is actually faster, because Flash is often connected to the core with only a 16 bit wide bus, and the standard, 32-bit instruction set, requires additional wait states when loading instructions.

The first company to offer small ARM7-based microcontrollers was Philips (today NXP) with the LPC2000 series, which is still popular especially among hobbyists because of the wide availability and the easy to use serial-port bootloader.

The ARM7TDMI has a few disadvantages, though. Although the instruction set is identical in all ARM7TDMI-based microcontrollers, extensions like the interrupt controller, on-chip memory, IO ports and other peripherals are not standardized and make it hard to port software between controllers of different manufacturers. Another common criticism is that the interrupt system of the ARM7 is too complex and interrupts have too long delays.

ARM7-based controllers are available from many manufacturers, for example NXP (LPC2000), Atmel (AT91SAM7*), ADI (ADUC7000), ST (STR7).

ARM Cortex-M4

The Cortex-M4 is a Cortex-M3 with DSP Instructions, and optional floating-point unit (FPU).

ARM Cortex-M4-based controllers are available from:

Olimex and ST Evaluation Boards based on STM32 Cortex M4 at

ARM Cortex-M3

The Cortex-M3 architecture was first announced in 2004. It can be seen as the successor of the ARM7, since it addresses the same market and fixes the shortcomings of the ARM7 architecture. It uses a new Thumb-2 instruction set exclusively and comes with standardized peripheral modules and a better (lower delay) interrupt system.

ARM Cortex-M3-based controllers are available from Luminary (LM3S*), NXP (LPC1700) and ST (STM32).

There are Cortex-M3 based evaluation boards available for Luminary (LM3S*), NXP (LPC1700) and ST(STM32) at Embest Inc.

ARM Cortex-M0+

The Cortex-M0+ is an other new low power version of the M3.

There are Cortex-M0+ based controllers available from:

ARM Cortex-M0, Cortex-M1

The Cortex-M0 was announced in 2009 as an even smaller, lower power version of the M3.

The Cortex-M1 is a variant that is intended specifically for implementation inside FPGAs.

ARM9(E), ARM10, ARM11

The main differences to the ARM7 is that the ARM9 is using a Harvard architecture (separate buses for instruction and data) and a longer pipeline, which allows higher clock rates. ARM9-based processors usually have little internal memory (except for instruction and data caches) and are intended to be used with external memory, mostly SDRAM and parallel flash. The ARM9 core is offered in a lot of variants, with extensions like floating point co-processors or Java support. ARM9 applications typically use some kind of Operating System like Linux.

ARM10 and ARM11 are targeted to mobile applications and are generally not found in typical microcontroller applications.

An example for an ARM9-based microcontroller family is the Atmel AT91SAM9.

An evaluation board is available for the Atmel AT91SAM9 at SAMICC.

ARM Cortex-A8, Cortex-A9

The Cortex-A8 and Cortex-A9 cores are targeted to high-end mobile devices and are, for example, implemented in TI's OMAP chip. They can be seen as the successor of the ARM9(E)/ARM10/ARM11.

The Cortex-A9 allows for multiple cores, hence these devices can be used in really high-end mobile devices or even netbooks (competing with low-power x86-architecture). Boardcon development board EM4412 features a Samsung Exynos4412 system-on-chip with four Cortex-A9 cores.

ARM Cortex-R4

The Cortex-R4 is based on the ARMv7 architecture and is software-compatible with ARM9E family. With reduced gate count (to reduce the footprint), this core is targetting mid-range performance for so-called deeply embedded devices.

Development tools


One of the reasons why ARM controllers are so popular is the support by the open source compiler GCC. Both free and non-free packages of the GCC toolchain are available, differing mainly in the included libraries and supporting software like debuggers and IDEs.

GNU Tools for ARM Embedded Processors is a ARM GCC mantained by ARM. The tools have no size restrictions.

IAR produces one of the most well-known commercial compilers for ARM. IAR offers free Kickstart versions of the tools which can be used to build and debug smaller projects (32kBytes). Commercial use of the Kickstart version is allowed.

Keil produces an IDE (µVision) that also offers an integrated debugger and simulator. Early versions included Keil's own compiler (CARM) which is no longer available or supported. Recent versions of the Keil MDK-ARM include Compiler, Assembler and Linker from the RealView Suite developed by ARM. The Keil IDE also support building with GNU tools (gcc). In addition to simulating different ARM-cores the simulator is also capable of simulating integrated devices (i.e. UARTs, timers) of verious ARM-based controllers. ARM acquired Keil ARM in 2005. An evaluation version is available. This evaluation version not only restricts code-size for building with RV (no build-limit with GNU), debugging and simulation (currently 32kBytes) but also prohibits commercial use.

Rowley Crossworks for ARM includes a GCC compiler integrated with an optimized library, a simple RTOS, and an IDE with a debugger. It is available for Linux and Windows.

For up to date information about free GCC compiler toolchains, please take a look at this post in the forum.

JTAG/SWD Debugging

Most ARM-based processors come with a JTAG interface. The debugging instruction set is standardized across all ARM cores, so you can use the same JTAG hardware and software on all ARM-based processors. Not standardized however is the programming of on-chip flash memory, which needs dedicated support for each controller type.

A popular open source JTAG solution is OpenOCD. It supports parallel port and USB JTAG interfaces and is used together with GDB (GNU Debugger) as the front-end.

Another option is the Black Magic Probe(BMP). STLINKV21 and V3 with recent firmware can be used with the PC-hosted variant of the blackmagic probe. Stlink on older discovery can be used after flashing the stlink BMP variant to the on-board stlink. Find more info here.

(Real Time) Operating systems

A great number of operating systems for ARM-based processors and controllers is available, many of them free and open source.

For network-enabled, non-realtime systems, Linux is a very popular choice. Also used but less common are the Unix derivatives (Net, Free, Open)BSD, which unlike Linux allow redistribution as closed source.

For smaller microcontrollers or systems with real-time requirements, FreeRTOS and TNKernel are two examples for open source systems. Feature-wise somewhere between Linux and FreeRTOS are RTEMS and eCOS, which offer real-time capability, but also a POSIX API (i.e., limited Unix compatibility).

Development Boards

Questions on this topic? Ask them in the ARM GCC Forum