# ARM Cortex-M

ARM Cortex-M é uma família de núcleos de processador RISC de 32-bit licenciados pela ARM Holdings, principalmente usados em microcontroladores. Os núcleos que compõem a família são Cortex-M0, Cortex-M1, Cortex-M3, Cortex-M4.

## Cortex-M0
### Características

As principais características do núcleo Cortex-M0 são:
* Arquitetura ARMv6-M
* Conjunto de Instruções
** Thumb (maioria), sem CBZ, CBNZ, IT.
** Thumb-2 (subconjunto), apenas BL, DMB, DSB, ISB, MRS, MSR.
** Multiplicação de hardware (32-bit), 3 ciclos ou 32 ciclos (silicon option)
* Pipeline de 3 estágios

### Implementação

Os seguintes fornecedores desenvolvem microcontroladores baseados no núcleo Cortex-M0:
* Energy Micro EFM32 família Zero Gecko
* NXP família LPC11xx, LPC12xx
* nuvoTon família NuMicro
* STMicroelectronics STM32 família F0
* Cypress Semiconductor PSoC 4
* Freescale família Kinetis L (Cortex M0+)

## Cortex-M1
### Características

As principais características do núcleo Cortex-M1 são:
* Arquitetura ARMv6-M
* Conjunto de Instruções
** Thumb (maioria), sem CBZ, CBNZ, IT.
** Thumb-2 (subconjunto), apenas BL, DMB, DSB, ISB, MRS, MSR.
** Multiplicação de hardware (32-bit), 3 ciclos ou 33 ciclos (silicon option)

### Implementações

Os seguintes fornecedores de FPGAs dão suporte ao Cortex-M1:
* Actel FPGAs
* Altera FPGAs
* Xilinx FPGAs

## Cortex-M3
### Características

As principais características do núcleo Cortex-M3 são:
* Arquitetura ARMv7-M
* Suporte a instruções Thumb e Thumb-2
* Pipeline de 3 estágios com branch predictor
* 1 a 240 interrupções de hardware, mais NMI
* Latência de interrupções de 12 ciclos
* Modos sleep integrados
* MPU com 8 regiões
* 1.25 DMIPS/MHz
* 0,19 mW/MHz
* 0,86 mm$^2$ (núcleo + periféricos)

## Implementações

Vários modelos de PCB com sistema SoCs são implementados com o núcleo Cortex-M3, incluindo:
* Actel família SmartFusion
* Atmel família SAM3S, SAM3U, e SAM3N.
* NXP famílias 17xx e 13xx;
* STMicroelectronics família STM32;
* Texas Instruments família Stellaris e também incluído em alguns SoCs OMAPs 4;
* Toshiba Série TX03

## Cortex-M4
### Características

Conceitualmente, o Cortex-M4 é um Cortex-M3 com Instruções DSP, e uma Unidade de Ponto Flutuante opcional. Se o núcleo contém a unidade de ponto flutuante, é conhecido como Cortex-M4F. As principais características do núcleo Cortex-M4 são:
* Arquitetura ARMv7-ME
* Suporte a instruções:
** Thumb (total)
** Thumb-2 (total)
** Multiplicador de hardware de 1 ciclo (32-bit), divisão de hardware de 2-12 ciclos (32-bit)
** Extensão DSP: 16/32-bit MAC de único ciclo, 16-bit MAC duplo de único ciclo, aritmética 8/16-bit SIMD.
** Extensão de ponto flutuante (silicon option): Unidade de ponto flutuante de precisão simples, chamada FPv4-SP.
* Pipeline de 3 estágios com branch predictor
* 1 a 240 interrupções de hardware, mais NMI
* Latência de interrupções de 12 ciclos
* Modos sleep integrados
* MPU com 8 regiões (silicon option)
* 1,25 DMIPS/MHz

### Implementações

Os seguintes fornecedores desenvolvem microcontroladores baseados no núcleo Cortex-M4:
* Atmel família SAM4 (Cortex-M4)
* Freescale famílias Kinetis (Cortex-M4 and Cortex-M4F)
* STMicroelectronics STM32 família F4 (Cortex-M4F)
* Texas Instruments família Stellaris LM4F (Cortex-M4F)