ARM Cortex-M

[thumb|360px|right|[NXP 반도체 및 실리콘 랩스 (Energy Micro)의 ARM Cortex-M0 및 Cortex-M3 마이크로컨트롤러 IC]]
[thumb|right|STM32F100C4T6B IC의 [다이 (집적 회로)|다이.16 KB 플래시 메모리, 4 KB RAM이 장착된 24 MHz ARM Cortex-M3 마이크로컨트롤러. ST마이크로일렉트로닉스에서 제조.]]

**ARM Cortex-M**은 ARM 리미티드가 라이선스를 부여한 32비트 RISC ARM 아키텍처 프로세서 코어 그룹이다. 이 코어들은 저가형 및 에너지 효율적인 집적 회로에 최적화되어 있으며, 수백억 개의 소비자 기기에 내장되어 있다. 주로 마이크로컨트롤러 칩의 주요 구성 요소로 사용되지만, 다른 유형의 칩 내부에도 내장되기도 한다. Cortex-M 제품군은 Cortex-M0, Cortex-M0+, Cortex-M1, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23, Cortex-M33, Cortex-M35P, Cortex-M52, Cortex-M55, Cortex-M85로 구성된다. Cortex-M4 / M7 / M33 / M35P / M52 / M55 / M85 코어에는 부동소수점 장치 (FPU) 옵션이 제공되며, 실리콘에 포함될 경우 이 코어들은 때때로 "Cortex-MxF"로 알려져 있으며, 여기서 'x'는 코어 변형을 나타낸다.

## 개요

ARM Cortex-M 제품군은 마이크로컨트롤러, ASIC, ASSP, FPGA, SoC에 사용하도록 설계된 ARM 마이크로프로세서 코어이다. Cortex-M 코어는 일반적으로 전용 마이크로컨트롤러 칩으로 사용되지만, 전원 관리 컨트롤러, I/O 컨트롤러, 시스템 컨트롤러, 터치스크린 컨트롤러, 스마트 배터리 컨트롤러 및 센서 컨트롤러와 같은 SoC 칩 내부에도 "숨겨져" 있다.

Cortex-A 코어와의 주요 차이점은 Cortex-M 코어는 "완전한" 운영체제에 필수적인 것으로 간주되는 가상 메모리용 메모리 관리 장치 (MMU)가 없다는 것이다. Cortex-M 프로그램은 대신 베어 메탈 또는 Cortex-M을 지원하는 다양한 실시간 운영체제 중 하나에서 실행된다.

과거에는 8비트 마이크로컨트롤러가 매우 인기가 있었지만, 저가형 Cortex-M 칩의 가격이 하락하면서 Cortex-M은 점차 8비트 시장을 잠식하고 있다. Cortex-M은 32비트 수학 연산에 이점이 있는 응용 분야에서 8비트 칩을 대체하고 있으며, ARM7 및 ARM9과 같은 오래된 ARM 코어를 대체하고 있다.

특히, 대부분의 SD 카드 또는 플래시 드라이브 내부에 내장된 마모 평준화 컨트롤러는 (8비트) 8051 마이크로컨트롤러 또는 ARM CPU이다.

### 라이선스
ARM 리미티드는 자체 설계에 기반한 CPU 장치를 제조하거나 판매하지 않고, 대신 프로세서 아키텍처를 관심 있는 당사자에게 라이선스한다. Arm은 비용과 결과물에 따라 다양한 라이선스 조건을 제공한다. 모든 라이선스 사용자에게 Arm은 ARM 코어의 통합 가능한 하드웨어 설명뿐만 아니라 완전한 소프트웨어 개발 도구 세트와 ARM CPU를 포함하는 제조된 규소를 판매할 권리를 제공한다.

### 실리콘 맞춤화
통합 장치 제조업체(IDM)는 합성 가능한 RTL (베릴로그로 작성됨) 형태로 ARM 프로세서 IP를 받는다. 이 형태로 그들은 아키텍처 수준의 최적화 및 확장을 수행할 수 있다. 이를 통해 제조업체는 더 높은 클록 속도, 매우 낮은 전력 소비, 명령어 세트 확장(부동 소수점 포함), 크기 최적화, 디버그 지원 등과 같은 맞춤형 설계 목표를 달성할 수 있다. 특정 ARM CPU 칩에 어떤 구성 요소가 포함되어 있는지 확인하려면 제조업체의 데이터시트 및 관련 문서를 참조해야 한다.

Cortex-M 코어의 실리콘 옵션 중 일부는 다음과 같다.
* SysTick 타이머: 프로세서와 중첩 벡터 인터럽트 컨트롤러(NVIC)의 기능을 확장하는 24비트 시스템 타이머이다. 존재할 경우 추가로 구성 가능한 우선순위 SysTick 인터럽트도 제공한다. SysTick 타이머는 M0/M0+/M1/M23에는 선택 사항이지만, 이를 포함하지 않는 Cortex-M 마이크로컨트롤러는 매우 드물다. Cortex-M33/M35P/M52/M55/M85 마이크로컨트롤러에 보안 확장 옵션이 있는 경우, 선택적으로 두 개의 SysTick(하나의 보안, 하나의 비보안)을 가질 수 있다.
* 비트 밴드: 메모리의 전체 워드를 비트 밴드 영역의 단일 비트에 매핑한다. 예를 들어, 별칭 워드에 쓰면 비트 밴드 영역의 해당 비트를 설정하거나 지운다. 이를 통해 비트 밴드 영역의 모든 개별 비트는 워드 정렬된 주소에서 직접 액세스할 수 있다. 특히, 개별 비트는 읽기-수정-쓰기 명령어 시퀀스를 수행하지 않고 C/C++에서 설정, 지우기 또는 토글할 수 있다. 비트 밴드는 선택 사항이지만, 이를 포함하지 않는 Cortex-M3 및 Cortex-M4 마이크로컨트롤러는 덜 일반적이다. 일부 Cortex-M0 및 Cortex-M0+ 마이크로컨트롤러에는 비트 밴드가 있다.
* 메모리 보호 장치 (MPU): 권한 및 액세스 규칙을 적용하여 메모리 영역 보호를 지원한다. 최대 16개의 다른 영역을 지원하며, 각 영역은 더 작은 동일 크기의 하위 영역으로 분할될 수 있다.
* 밀접하게 결합된 메모리 (TCM): 제로 대기 상태의 낮은 지연 시간 SRAM으로, 콜 스택, RTOS 제어 구조, 인터럽트 데이터 구조, 인터럽트 핸들러 코드 및 속도에 중요한 코드를 저장하는 데 사용될 수 있다. CPU 캐시 외에 TCM은 ARM Cortex-M 마이크로컨트롤러에서 가장 빠른 메모리이다. TCM은 캐시되지 않고 프로세서 및 캐시와 동일한 속도로 액세스할 수 있으므로 개념적으로 "주소 지정 가능한 캐시"로 설명될 수 있다. 하버드 아키텍처 프로세서가 동시에 읽을 수 있도록 ITCM(명령어 TCM)과 DTCM(데이터 TCM)이 있다. DTCM은 명령어를 포함할 수 없지만 ITCM은 데이터를 포함할 수 있다. TCM은 프로세서 코어와 밀접하게 연결되어 있으므로 일부 구현에서는 DMA 엔진이 TCM에 액세스할 수 없을 수도 있다.

* 참고: 대부분의 Cortex-M3 및 M4 칩에는 비트 밴드와 MPU가 있다. 비트 밴드 옵션은 Cortex-M 시스템 설계 키트를 사용하여 M0/M0+에 추가할 수 있다.
* 참고: 소프트웨어는 사용하기 전에 각 기능의 존재 여부를 확인해야 한다.
* 참고: Cortex-M35P의 기술 참조 매뉴얼이 출시될 때까지 공개 정보가 제한적이다.

추가 실리콘 옵션:
* 데이터 [엔디언]: 리틀 엔디언 또는 빅 엔디언. 기존 ARM 코어와 달리 Cortex-M은 이러한 선택 중 하나로 실리콘에 영구적으로 고정된다.
* [인터럽트: 1~32개 (M0/M0+/M1), 1~240개 (M3/M4/M7/M23), 1~480개 (M33/M35P/M52/M55/M85).
* 웨이크업 인터럽트 컨트롤러: 선택 사항.
* 벡터 테이블 오프셋 레지스터: 선택 사항. (M0에는 제공되지 않음).
* 명령어 페치 폭: 16비트 전용 또는 주로 32비트.
* 사용자/특권 지원: 선택 사항.
* 모든 레지스터 재설정: 선택 사항.
* 단일 사이클 I/O 포트: 선택 사항. (M0+/M23).
* 디버그 액세스 포트 (DAP): 없음, SWD, JTAG 및 SWD. (모든 Cortex-M 코어에 선택 사항)
* 정지 디버그 지원: 선택 사항.
* 와치포인트 비교기 개수: 0~2개 (M0/M0+/M1), 0~4개 (M3/M4/M7/M23/M33/M35P/M52/M55/M85).
* 브레이크포인트 비교기 개수: 0~4개 (M0/M0+/M1/M23), 0~8개 (M3/M4/M7/M33/M35P/M52/M55/M85).

### 명령어 집합

Cortex-M0 / M0+ / M1은 **ARMv6-M** 아키텍처를 구현하고, Cortex-M3은 **ARMv7-M** 아키텍처를 구현하며, Cortex-M4 / Cortex-M7은 **ARMv7E-M** 아키텍처를 구현하고, Cortex-M23 / M33 / M35P는 **ARMv8-M** 아키텍처를 구현하며, Cortex-M52 / M55 / M85는 **ARMv8.1-M** 아키텍처를 구현한다. 이 아키텍처들은 ARMv6-M에서 ARMv7-M, ARMv7E-M으로 바이너리 명령어 상위 호환이 된다. Cortex-M0 / Cortex-M0+ / Cortex-M1에서 사용할 수 있는 바이너리 명령어는 Cortex-M3 / Cortex-M4 / Cortex-M7에서 수정 없이 실행할 수 있다. Cortex-M3에서 사용할 수 있는 바이너리 명령어는 Cortex-M4 / Cortex-M7 / Cortex-M33 / Cortex-M35P에서 수정 없이 실행할 수 있다. Cortex-M 아키텍처에서는 Thumb-1 및 Thumb-2 명령어 세트만 지원되며, 기존의 32비트 ARM 명령어 세트는 지원되지 않는다.

모든 Cortex-M 코어는 대부분의 Thumb-1, 일부 Thumb-2를 포함하는 공통 명령어 하위 집합을 구현하며, 32비트 결과 곱셈도 포함한다. Cortex-M0 / Cortex-M0+ / Cortex-M1 / Cortex-M23은 가장 작은 실리콘 다이를 만들기 위해 설계되었으므로 Cortex-M 제품군 중 가장 적은 수의 명령어를 가지고 있다.

Cortex-M0 / M0+ / M1은 ARMv7-M 아키텍처에 추가된 새로운 명령어(CBZ, CBNZ, IT)를 제외한 Thumb-1 명령어를 포함한다. Cortex-M0 / M0+ / M1은 Thumb-2 명령어의 작은 하위 집합(BL, DMB, DSB, ISB, MRS, MSR)을 포함한다. Cortex-M3 / M4 / M7 / M33 / M35P는 모든 기본 Thumb-1 및 Thumb-2 명령어를 가지고 있다. Cortex-M3은 3개의 Thumb-1 명령어, 모든 Thumb-2 명령어, 하드웨어 정수 나눗셈 및 포화 연산 명령어를 추가한다. Cortex-M4는 DSP 명령어와 선택적 단정밀도 부동소수점 장치 (VFPv4-SP)를 추가한다. Cortex-M7은 선택적 배정밀도 FPU (VFPv5)를 추가한다. Cortex-M23 / M33 / M35P / M52 / M55 / M85는 TrustZone 명령어를 추가한다.

* 참고: MOVW는 32비트 "와이드" MOV 명령어를 의미하는 별칭이다.
* 참고: B.W는 장거리 무조건 분기(BL과 인코딩, 동작, 범위가 비슷하지만 LR 레지스터 설정은 제외).
* 참고: Cortex-M1의 경우 WFE / WFI / SEV 명령어는 존재하지만 NOP 명령어로 실행된다.
* 참고: 반정밀도 (HP) FPU 명령어는 실리콘에 HP FPU 옵션이 존재할 경우에만 Cortex-M52 / M55 / M85에서 유효하다.
* 참고: 단정밀도 (SP) FPU 명령어는 실리콘에 SP FPU 옵션이 존재할 경우에만 Cortex-M4 / M7 / M33 / M35P / M52 / M55 / M85에서 유효하다.
* 참고: 배정밀도 (DP) FPU 명령어는 실리콘에 DP FPU 옵션이 존재할 경우에만 Cortex-M7 / M52 / M55 / M85에서 유효하다.

* 참고: MOVW는 32비트 "와이드" MOV 명령어를 의미하는 별칭이다.
* 참고: B.W는 장거리 무조건 분기 (BL과 인코딩, 동작, 범위가 비슷하지만 LR 레지스터 설정은 제외).
* 참고: Cortex-M1의 경우 WFE / WFI / SEV 명령어는 존재하지만 NOP 명령어로 실행된다.
* 참고: 반정밀도 (HP) FPU 명령어는 실리콘에 HP FPU 옵션이 존재할 경우에만 Cortex-M52 / M55 / M85에서 유효하다.
* 참고: 단정밀도 (SP) FPU 명령어는 실리콘에 SP FPU 옵션이 존재할 경우에만 Cortex-M4 / M7 / M33 / M35P / M52 / M55 / M85에서 유효하다.
* 참고: 배정밀도 (DP) FPU 명령어는 실리콘에 DP FPU 옵션이 존재할 경우에만 Cortex-M7 / M52 / M55 / M85에서 유효하다.

### 사용 중단
ARM Cortex-M 시리즈를 위한 ARM 아키텍처는 이전 레거시 코어에서 일부 기능을 제거했다.
* 32비트 ARM 명령어 세트는 Cortex-M 코어에 포함되지 않는다.
* 엔디언은 Cortex-M 코어에서 실리콘 구현 시 선택된다. 레거시 코어는 데이터 엔디언 모드의 "온더플라이" 변경을 허용했다.
* 보조 프로세서는 Cortex-M33/M35P 코어를 위한 "ARMv8-M 메인라인"에서 실리콘 옵션이 다시 도입될 때까지 Cortex-M 코어에서 지원되지 않았다.

32비트 ARM 명령어 세트의 기능은 Thumb-1 및 Thumb-2 명령어 세트에 의해 여러 가지 방식으로 복제되지만, 일부 ARM 기능은 유사한 기능을 가지고 있지 않다.
* SWP 및 SWPB (교환) ARM 명령어는 Cortex-M에서 유사한 기능을 가지고 있지 않다.

16비트 Thumb-1 명령어 세트는 ARMv4T 아키텍처를 가진 기존 ARM7T 코어에 처음 출시된 이후 시간이 지남에 따라 진화했다. 각 기존 ARMv5 / ARMv6 / ARMv6T2 아키텍처가 출시됨에 따라 새로운 Thumb-1 명령어가 추가되었다. 일부 16비트 Thumb-1 명령어는 Cortex-M 코어에서 제거되었다.
* "BLX " 명령어는 Thumb-1에서 ARM 명령어 세트로 전환하는 데 사용되었기 때문에 존재하지 않는다. "BLX " 명령어는 Cortex-M에서 여전히 사용할 수 있다.
* SETEND는 데이터 엔디언 모드의 온더플라이 전환이 더 이상 지원되지 않기 때문에 존재하지 않는다.
* 보조 프로세서 명령어는 Cortex-M33/M35P 코어를 위한 "ARMv8-M 메인라인"에서 실리콘 옵션이 다시 도입될 때까지 Cortex-M 코어에서 지원되지 않았다.
* SWI 명령어는 SVC로 이름이 변경되었지만 명령어 바이너리 코딩은 동일하다. 그러나 예외 모델의 변경으로 인해 SVC 핸들러 코드는 SWI 핸들러 코드와 다르다.

## Cortex-M0

Cortex-M0 코어는 작은 실리콘 다이 크기와 가장 낮은 가격의 칩에 사용하기에 최적화되어 있다.

Cortex-M0 코어의 주요 기능은 다음과 같다.
* ARMv6-M 아키텍처
* 3단계 파이프라인
* 명령어 집합:
** Thumb-1 (대부분), CBZ, CBNZ, IT 누락
** Thumb-2 (일부), BL, DMB, DSB, ISB, MRS, MSR만
** 32비트 결과의 32비트 하드웨어 정수 곱셈
* 1~32개의 인터럽트 및 NMI

**실리콘 옵션:**
* 하드웨어 정수 곱셈 속도: 1 또는 32 사이클.

### 칩
thumb|nRF51822
다음 마이크로컨트롤러는 Cortex-M0 코어를 기반으로 한다.
* ABOV AC30M1x64
* 사이프러스 PSoC 4000, 4100, 4100M, 4200, 4200DS, 4200L, 4200M
* 인피니온 XMC1100, XMC1200, XMC1300, XMC1400, TLE984x
* 다이얼로그 DA1458x, DA1468x
* 노르딕 nRF51
* NXP LPC1100, LPC1200
* 누보톤 NuMicro
* 소닉스 SN32F700
* ST STM32 F0
* 도시바 TX00
* 보라고 VA10800 (극한 온도), VA10820 (방사선 경화)

다음 칩은 Cortex-M0을 보조 코어로 사용한다.
* NXP LPC4300 (하나의 Cortex-M4F + 하나의 Cortex-M0)
* 텍사스 인스트루먼트 SimpleLink Wireless MCUs CC1310 및 CC2650 (하나의 프로그래밍 가능한 Cortex-M3 + 하나의 Cortex-M0 네트워크 프로세서 + 하나의 독점 센서 컨트롤러 엔진)

## Cortex-M0+

[thumb|right| [NXP 반도체|NXP (프리스케일 세미컨덕터) KL25Z128VLK (Kinetis L)가 장착된 FRDM-KL25Z 보드]]
Cortex-M0+는 Cortex-M0의 최적화된 상위 집합이다. Cortex-M0+는 Cortex-M0와 완벽한 명령어 세트 호환성을 가지므로 동일한 컴파일러 및 디버그 도구를 사용할 수 있다. Cortex-M0+ 파이프라인은 3단계에서 2단계로 줄어들어 전력 사용량을 낮추고 성능을 향상시킨다 (분기가 한 사이클 더 적게 걸리므로 평균 IPC가 더 높다). 기존 Cortex-M0의 디버그 기능 외에도 마이크로 트레이스 버퍼(MTB)라는 실리콘 옵션을 Cortex-M0+에 추가할 수 있으며, 이는 간단한 명령어 트레이스 버퍼를 제공한다. Cortex-M0+는 또한 메모리 보호 장치(MPU) 및 벡터 테이블 재배치와 같은 Cortex-M3 및 Cortex-M4 기능을 실리콘 옵션으로 추가할 수 있다.

Cortex-M0+ 코어의 주요 기능은 다음과 같다.
* ARMv6-M 아키텍처
* 2단계 파이프라인 (Cortex-M0보다 한 단계 적음)
* 명령어 집합: (Cortex-M0와 동일)
** Thumb-1 (대부분), CBZ, CBNZ, IT 누락
** Thumb-2 (일부), BL, DMB, DSB, ISB, MRS, MSR만
** 32비트 결과의 32비트 하드웨어 정수 곱셈
* 1~32개의 인터럽트 및 NMI

**실리콘 옵션:**
* 하드웨어 정수 곱셈 속도: 1 또는 32 사이클
* 8개 영역 메모리 보호 장치 (MPU) (M3 및 M4와 동일)
* 벡터 테이블 재배치 (M3, M4와 동일)
* 단일 사이클 I/O 포트 (M0+/M23에서 사용 가능)
* 마이크로 트레이스 버퍼 (MTB) (M0+/M23/M33/M35P에서 사용 가능)

### 칩
다음 마이크로컨트롤러는 Cortex-M0+ 코어를 기반으로 한다.
* ABOV 세미컨덕터 A31G11x, A31G12x, A31G314
* 사이프러스 PSoC 4000S, 4100S, 4100S+, 4100PS, 4700S, FM0+
* 세이코 엡손 S1C31W74, S1C31D01, S1C31D50
* Holtek HT32F52000
* 마이크로칩 SAM C2, D0, D1, D2, DA, L2, R2, R3; 및 PIC32CM JH 및 MC
* NXP LPC800, LPC11E60, LPC11U60
* NXP (프리스케일 세미컨덕터) Kinetis E, EA, L, M, V1, W0, S32K11x
* 라즈베리 파이 RP2040 (두 개의 M0+ 코어)
* 르네사스 S124, S128, RE, RE01
* Silicon Labs (Energy Micro) EFM32 Zero, Happy
* ST STM32 L0, G0, C0, WL (하나의 Cortex-M4 + 하나의 Cortex-M0+)

다음 칩은 Cortex-M0+를 보조 코어로 사용한다.
* 사이프러스 PSoC 6200 (하나의 Cortex-M4F + 하나의 Cortex-M0+)
* ST WB (하나의 Cortex-M4F + 하나의 Cortex-M0+)

가장 작은 ARM 마이크로컨트롤러는 Cortex-M0+ 유형이다 (2014년 현재, 칩 스케일 패키지에서 1.6 mm x 2 mm로 가장 작은 것은 Kinetis KL03이다).

2018년 6월 21일, "세계에서 가장 작은 컴퓨터" 또는 컴퓨터 장치가 발표되었다 미시간 대학교 연구원들이 2018년 VLSI 기술 및 회로 심포지엄에서 "A 0.04mm3 16nW 무선 및 배터리 없는 센서 시스템, 통합 Cortex-M0+ 프로세서 및 셀룰러 온도 측정을 위한 광통신" 논문과 함께 ARM Cortex-M0+를 기반으로 한 (RAM 및 태양광 발전 기반의 무선 송수신기를 포함한) 장치이다. 이 장치는 2018년 3월에 IBM이 이전에 주장했던 세계 기록 크기 컴퓨터보다 10분의 1 크기로, 소금 알갱이보다 작다.

## Cortex-M1

Cortex-M1은 FPGA 칩에 로드되도록 특별히 설계된 최적화된 코어이다.

Cortex-M1 코어의 주요 기능은 다음과 같다.
* ARMv6-M 아키텍처
* 3단계 파이프라인.
* 명령어 집합:
** Thumb-1 (대부분), CBZ, CBNZ, IT 누락.
** Thumb-2 (일부), BL, DMB, DSB, ISB, MRS, MSR만.
** 32비트 결과의 32비트 하드웨어 정수 곱셈.
* 1~32개의 인터럽트 및 NMI.

**실리콘 옵션:**
* 하드웨어 정수 곱셈 속도: 3 또는 33 사이클.
* 선택적 밀접 결합 메모리 (TCM): 0~1MB 명령어-TCM, 0~1MB 데이터-TCM, 각각 선택적 ECC 포함.
* 외부 인터럽트: 0, 1, 8, 16, 32.
* 디버그: 없음, 축소됨, 전체.
* 데이터 엔디언: 리틀 엔디언 또는 BE-8 빅 엔디언.
* OS 확장: 존재 또는 부재.

### 칩
다음 공급업체는 Cortex-M1을 FPGA 칩의 소프트 코어로 지원한다.
* 알테라 Cyclone-II, Cyclone-III, Stratix-II, Stratix-III
* GOWIN M1
* 액텔/마이크로세미/마이크로칩 Fusion, IGLOO/e, ProASIC3L, ProASIC3/E
* 자일링스 Spartan-3, Virtex-2, Virtex-3, Virtex-4, Artix-7

## Cortex-M3

[thumb|300px|right|아트멜 ATSAM3X8E ([ARM Cortex-M3 코어) 마이크로컨트롤러가 장착된 아두이노 Due 보드]]
[thumb|300px|[NXP 반도체|NXP LPC1343이 장착된 LPCXpresso 개발 보드]]

Cortex-M3 코어의 주요 기능은 다음과 같다.
* ARMv7-M 아키텍처
* 분기 예측을 포함한 3단계 파이프라인.
* 명령어 집합:
** Thumb-1 (전체).
** Thumb-2 (전체).
** 32비트 또는 64비트 결과의 32비트 하드웨어 정수 곱셈, 부호 유무, 곱셈 후 덧셈 또는 뺄셈. 32비트 곱셈은 1 사이클이지만, 64비트 곱셈 및 MAC 명령어는 추가 사이클이 필요하다.
** 32비트 하드웨어 정수 나눗셈 (2–12 사이클).
** 포화 연산 지원.
* 1~240개의 인터럽트 및 NMI.
* 12 사이클 인터럽트 지연 시간.
* 통합 슬립 모드.

**실리콘 옵션:**
* 선택적 메모리 보호 장치 (MPU): 0 또는 8개 영역.

### 칩
다음 마이크로컨트롤러는 Cortex-M3 코어를 기반으로 한다.
* ABOV AC33Mx128, AC33Mx064
* 액텔/마이크로세미/마이크로칩 SmartFusion, SmartFusion 2 (FPGA)
* 아날로그 디바이스 ADUCM360, ADUCM361, ADUCM3029
* 브로드컴 Wi-Fi 칩 BCM4319XKUBG
* 사이프러스 PSoC 5000, 5000LP, FM3
* Holtek HT32F
* 인피니온 TLE9860, TLE987x
* 마이크로칩 (아트멜) SAM 3A, 3N, 3S, 3U, 3X
* NXP LPC1300, LPC1700, LPC1800
* 온 Q32M210
* 리얼텍 RTL8710
* Silicon Labs Precision32
* Silicon Labs (Energy Micro) EFM32 Tiny, Gecko, Leopard, Giant
* ST STM32 F1, F2, L1, W
* TDK-미크로나스 HVC4223F
* 텍사스 인스트루먼트 F28, LM3, TMS470, OMAP 4, SimpleLink Wireless MCUs (CC1310 Sub-GHz 및 CC2650 BLE+직비+6LoWPAN)
* 도시바 TX03
* mindmotion mindmotion MM32

다음 칩은 Cortex-M3를 보조 코어로 사용한다.
* 애플 A9 (통합 M9 모션 보조 프로세서로 Cortex-M3)
* CSR Quatro 5300 (보조 프로세서로 Cortex-M3)
* 삼성 엑시노스 7420 (DVS 마이크로컨트롤러로 Cortex-M3)
* 텍사스 인스트루먼트 F28, LM3, TMS470, OMAP 4470 (하나의 Cortex-A9 + 두 개의 Cortex-M3)
* XMOS XS1-XA (7개의 xCORE + 하나의 Cortex-M3)

다음 FPGA에는 Cortex-M3 코어가 포함되어 있다.
* 마이크로세미 SmartFusion2 SoC

다음 공급업체는 Cortex-M3를 FPGA 칩의 소프트 코어로 지원한다.
* 알테라 Cyclone-II, Cyclone-III, Stratix-II, Stratix-III
* 자일링스 Spartan-3, Virtex-2, Virtex-3, Virtex-4, Artix-7

## Cortex-M4

[thumb|right|Silicon Labs ([Energy Micro) Wonder Gecko STK Board with EFM32WG990]]
[thumb|[텍사스 인스트루먼트|TI LM4F120이 장착된 Stellaris Launchpad 보드]]
개념적으로 Cortex-M4는 Cortex-M3에 DSP 명령어와 선택적 부동소수점 장치 (FPU)를 더한 것이다. FPU가 있는 코어는 Cortex-M4F로 알려져 있다.

Cortex-M4 코어의 주요 기능은 다음과 같다.
* ARMv7E-M 아키텍처
* 분기 예측을 포함한 3단계 파이프라인.
* 명령어 집합:
** Thumb-1 (전체).
** Thumb-2 (전체).
** 32비트 또는 64비트 결과의 32비트 하드웨어 정수 곱셈, 부호 유무, 곱셈 후 덧셈 또는 뺄셈. 32비트 곱셈 및 MAC는 1 사이클.
** 32비트 하드웨어 정수 나눗셈 (2–12 사이클).
** 포화 연산 지원.
** DSP 확장: 단일 사이클 16/32비트 MAC, 단일 사이클 듀얼 16비트 MAC, 8/16비트 SIMD 산술.
* 1~240개의 인터럽트 및 NMI.
* 12 사이클 인터럽트 지연 시간.
* 통합 슬립 모드.

**실리콘 옵션:**
* 선택적 부동소수점 장치 (FPU): 단정밀도 전용 IEEE-754 호환. FPv4-SP 확장이라고 한다.
* 선택적 메모리 보호 장치 (MPU): 0 또는 8개 영역.

### 칩
thumb|upright| v2의 nRF52833
thumb|upright|STM32F407IGH6
다음 마이크로컨트롤러는 Cortex-M4 코어를 기반으로 한다.
* 아날로그 디바이스 ADSP-CM40x
* 마이크로칩 (아트멜) SAM 4L, 4N, 4S
* NXP (프리스케일 세미컨덕터) Kinetis K, W2
* ST (STM32) WL (하나의 Cortex-M4 + 하나의 Cortex-M0+)
* 텍사스 인스트루먼트 SimpleLink 와이파이 CC32xx, CC32xxMOD

다음 마이크로컨트롤러는 Cortex-M4F (M4 + FPU) 코어를 기반으로 한다.
* 아날로그 디바이스 ADUCM4050
* 사이프러스 6200 (하나의 Cortex-M4F + 하나의 Cortex-M0+), FM4
* 인피니온 XMC4000
* 맥심 Darwin
* 마이크로칩 (아트멜) SAM4C (듀얼 코어: 하나의 Cortex-M4F + 하나의 Cortex-M4), SAM4E, SAM4L, SAM4N, SAM4S, SAMG5, SAMD5/E5x
* 노르딕 nRF52
* 누보톤 NuMicro M480
* NXP LPC4000, LPC4300 (하나의 Cortex-M4F + 하나의 Cortex-M0), LPC54000
* NXP (프리스케일 세미컨덕터) Kinetis K, V3, V4, S32K14x
* 르네사스 S3, S5, S7, RA4, RA6
* Silicon Labs (Energy Micro) EFM32 Wonder
* ST STM32 F3, F4, L4, L4+, G4, WB (하나의 Cortex-M4F + 하나의 Cortex-M0+)
* 텍사스 인스트루먼트 LM4F, TM4C, MSP432, CC13x2R, CC1352P, CC26x2R
* 도시바 TX04

다음 칩은 Cortex-M4 또는 M4F를 보조 코어로 사용한다.
* NXP (프리스케일 세미컨덕터) Vybrid VF6 (하나의 Cortex-A5 + 하나의 Cortex-M4F)
* NXP (프리스케일 세미컨덕터) i.MX 6 SoloX (하나의 Cortex-A9 + 하나의 Cortex-M4F)
* NXP (프리스케일 세미컨덕터) i.MX 7 Solo/Dual (하나 또는 두 개의 Cortex-A7 + 하나의 Cortex-M4F)
* NXP (프리스케일 세미컨덕터) i.MX 8 (두 개의 Cortex-A72 + 네 개의 Cortex-A53 + 두 개의 Cortex-M4F)
* NXP (프리스케일 세미컨덕터) i.MX 8M 및 8M Mini (네 개의 Cortex-A53 + 하나의 Cortex-M4F)
* NXP (프리스케일 세미컨덕터) i.MX 8X (네 개의 Cortex-A35 + 하나의 Cortex-M4F)
* ST STM32MP1 (하나 또는 두 개의 Cortex-A7 + 하나의 Cortex-M4)
* 텍사스 인스트루먼트 OMAP 5 (두 개의 Cortex-A15 + 두 개의 Cortex-M4)
* 텍사스 인스트루먼트 Sitara AM5700 (하나 또는 두 개의 Cortex-A15 + 이미지 처리 장치로 두 개의 Cortex-M4 + 범용 장치로 두 개의 Cortex-M4)

## Cortex-M7

[thumb|302x302px|Arduino GIGA R1 WiFi 보드와 (듀얼 코어 ARM Cortex-M7 + ARM Cortex-M4) [https://www.st.com/en/microcontrollers-microprocessors/stm32h747xi.html STM32H747XIH6] 마이크로컨트롤러](https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%BC:Arduino_Giga_R1_WiFi.png)

Cortex-M7은 이전 Cortex-M4보다 거의 두 배의 전력 효율을 가진 고성능 코어이다. 분기 예측을 포함한 6단계 슈퍼스칼라 파이프라인과 단정밀도 및 선택적으로 배정밀도 연산이 가능한 선택적 부동소수점 장치를 특징으로 한다. 명령어 및 데이터 버스는 이전 32비트 버스에서 64비트 폭으로 확장되었다. 코어에 FPU가 포함되어 있으면 Cortex-M7F로 알려져 있고, 그렇지 않으면 Cortex-M7이다.

Cortex-M7 코어의 주요 기능은 다음과 같다.
* ARMv7E-M 아키텍처.
* 분기 예측을 포함한 6단계 파이프라인. 모든 ARM Cortex-M 코어 중 Cortex-M85 다음으로 두 번째로 길다.
* 명령어 집합:
** Thumb-1 (전체).
** Thumb-2 (전체).
** 32비트 또는 64비트 결과의 32비트 하드웨어 정수 곱셈, 부호 유무, 곱셈 후 덧셈 또는 뺄셈. 32비트 곱셈 및 MAC는 1 사이클.
** 32비트 하드웨어 정수 나눗셈 (2–12 사이클).
** 포화 연산 지원.
** DSP 확장: 단일 사이클 16/32비트 MAC, 단일 사이클 듀얼 16비트 MAC, 8/16비트 SIMD 산술.
* 1~240개의 인터럽트 및 NMI.
* 12 사이클 인터럽트 지연 시간.
* 통합 슬립 모드.

**실리콘 옵션:**
* 선택적 부동소수점 장치 (FPU): (단정밀도) 또는 (단정밀도 및 배정밀도), 둘 다 IEEE-754-2008 호환. FPv5 확장이라고 한다.
* 선택적 CPU 캐시: 0~64KB 명령어 캐시, 0~64KB 데이터 캐시, 각각 선택적 ECC 포함.
* 선택적 밀접 결합 메모리 (TCM): 0~16MB 명령어-TCM, 0~16MB 데이터-TCM, 각각 선택적 ECC 포함.
* 선택적 메모리 보호 장치 (MPU): 8 또는 16개 영역.
* 선택적 임베디드 트레이스 매크로셀 (ETM): 명령어 전용 또는 명령어 및 데이터.
* 슬립 모드를 위한 선택적 유지 모드 (Arm 전원 관리 키트 포함).
* 선택적 이중 이중화 록스텝 동작.

### 칩
다음 마이크로컨트롤러는 Cortex-M7 코어를 기반으로 한다.
* 마이크로칩 (아트멜) SAM E7, S7, V7
* NXP (프리스케일 세미컨덕터) Kinetis KV5x, i.MX RT, S32K3xx
* ST STM32 F7, H7

## Cortex-M23

Cortex-M23 코어는 2016년 10월에 발표되었으며, 2015년 11월에 이전에 발표된 ARMv8-M 아키텍처를 기반으로 한다. 개념적으로 Cortex-M23은 Cortex-M0+와 유사하며, 정수 나눗셈 명령어와 TrustZone 보안 기능이 추가되었고, 2단계 명령어 파이프라인도 가지고 있다.

Cortex-M23 코어의 주요 기능은 다음과 같다.
* ARMv8-M Baseline 아키텍처.
* 2단계 파이프라인. (Cortex-M0+와 유사)
* TrustZone 보안 명령어.
* 32비트 하드웨어 정수 나눗셈 (17 또는 34 사이클).(다른 모든 코어의 나눗셈보다 느림)
* 스택 제한 경계. (SAU 옵션에서만 사용 가능)

**실리콘 옵션:**
* 하드웨어 정수 곱셈 속도: 1 또는 32 사이클.
* 하드웨어 정수 나눗셈 속도: 최대 17 또는 34 사이클. 제수에 따라 명령어가 더 적은 사이클에 완료될 수 있다.
* 선택적 메모리 보호 장치 (MPU): 0, 4, 8, 12, 16개 영역.
* 선택적 보안 속성 단위 (SAU): 0, 4, 8개 영역.
* 단일 사이클 I/O 포트 (M0+/M23에서 사용 가능).
* 마이크로 트레이스 버퍼 (MTB)

### 칩
다음 마이크로컨트롤러는 Cortex-M23 코어를 기반으로 한다.
* GigaDevice GD32E2xx
* 마이크로칩 SAM L10, L11 및 PIC 32CM-LE 32CM-LS
* 누보톤 M23xx 제품군, M2xx 제품군, NUC1262, M2L31
* 르네사스 S1JA, RA2A1, RA2L1, RA2E1, RA2E2

## Cortex-M33

Cortex-M33 코어는 2016년 10월에 발표되었으며, 2015년 11월에 이전에 발표된 ARMv8-M 아키텍처를 기반으로 한다. 개념적으로 Cortex-M33은 Cortex-M4와 Cortex-M23의 교차점과 유사하며, 3단계 명령어 파이프라인도 가지고 있다.

Cortex-M33 코어의 주요 기능은 다음과 같다.
* ARMv8-M Mainline 아키텍처.
* 3단계 파이프라인.
* TrustZone 보안 명령어.
* 32비트 하드웨어 정수 나눗셈 (최대 11 사이클).
* 스택 제한 경계. (SAU 옵션에서만 사용 가능)

**실리콘 옵션:**
* 선택적 부동소수점 장치 (FPU): 단정밀도 전용 IEEE-754 호환. FPv5 확장이라고 한다.
* 선택적 메모리 보호 장치 (MPU): 0, 4, 8, 12, 16개 영역.
* 선택적 보안 속성 단위 (SAU): 0, 4, 8개 영역.
* 마이크로 트레이스 버퍼 (MTB)

### 칩
다음 마이크로컨트롤러는 Cortex-M33 코어를 기반으로 한다.
* 아날로그 디바이스 ADUCM4
* 다이얼로그 DA1469x
* GigaDevice GD32E5, GD32W5
* 노르딕 nRF91, nRF5340, nRF54, nRF54H20
* NXP LPC5500, i.MX RT600, MCX N94x/54x (듀얼 코어)
* 온 RSL15
* 르네사스 RA4, RA6
* ST STM32 H5, L5, U5, WBA
* Silicon Labs Wireless Gecko Series 2
* 텍사스 인스트루먼트 CC3501E, CC3551E
* 라즈베리 파이 RP2350

다음 칩은 Cortex-M33 또는 M33F를 보조 코어로 사용한다.
* 인피니온 PSoC Edge
* ST STM32MP2 (하나 또는 두 개의 Cortex-A35 + 하나의 Cortex-M33)

## Cortex-M35P

Cortex-M35P 코어는 2018년 5월에 발표되었으며 Armv8-M 아키텍처를 기반으로 한다. 이는 새로운 명령어 캐시와 ARM SecurCore 제품군에서 가져온 새로운 변조 방지 하드웨어 개념, 구성 가능한 패리티 및 ECC 기능을 추가한 Cortex-M33 코어로 볼 수 있다.

현재 Cortex-M35P에 대한 정보는 기술 참조 매뉴얼 및 일반 사용자 가이드가 아직 출시되지 않았기 때문에 제한적이다.

### 칩
다음 마이크로컨트롤러는 Cortex-M35P 코어를 기반으로 한다.
* ST마이크로일렉트로닉스 ST33K

## Cortex-M52

Cortex-M52 코어는 2023년 11월에 발표되었으며 Armv8.1-M 아키텍처를 기반으로 한다. 개념적으로는 Cortex-M33과 Cortex-M55의 교차점으로 볼 수 있다. 주요 차이점은 Helium 코프로세서가 단일 비트(M55는 듀얼 비트)이며, 애플리케이션 전환을 용이하게 하기 위해 M33과 유사한 32비트 메인 버스를 가지고 있다는 것이다. 4단계 명령어 파이프라인을 가지고 있다.

Cortex-M52 코어의 주요 기능은 다음과 같다.
* ARMv8.1-M Mainline/Helium 아키텍처.
* 4단계 파이프라인.
* 스택 제한 경계 (SAU 옵션에서만 사용 가능).
* 32비트 메인 버스 (AHB 또는 AXI)

**실리콘 옵션:**
* 헬륨 (M-프로필 벡터 확장, MVE)
* 포인터 인증 및 분기 대상 식별 확장
* 단정밀도 및 배정밀도 부동소수점
* 디지털 신호 처리 (DSP) 확장 지원
* TrustZone 보안 확장 지원
* 안전 및 신뢰성 (RAS) 지원
* 코프로세서 지원
* 0, 4, 8, 12 또는 16개 영역의 보안 및 비보안 MPU
* 0, 4 또는 8개 영역의 SAU
* 최대 64KB 크기의 명령어 캐시
* 최대 64KB 크기의 데이터 캐시
* 캐시 및 TCM의 ECC
* 1~480개의 인터럽트
* 3~8개의 예외 우선순위 비트
* 내부 및 외부 WIC 옵션, 선택적 CTI, ITM 및 DWT
* ARM 사용자 정의 명령어

### 칩
다음 마이크로컨트롤러는 Cortex M52 코어를 기반으로 한다.
* Geehy 세미컨덕터 G32R5

## Cortex-M55

Cortex-M55 코어는 2020년 2월에 발표되었으며 Armv8.1-M 아키텍처를 기반으로 한다. 4단계 또는 5단계 명령어 파이프라인을 가지고 있다.

Cortex-M55 코어의 주요 기능은 다음과 같다.
* ARMv8.1-M Mainline/Helium 아키텍처.
* 4단계 파이프라인.
* 스택 제한 경계 (SAU 옵션에서만 사용 가능).
* 64비트 AXI 메인 버스

**실리콘 옵션:**
* 헬륨 (M-프로필 벡터 확장, MVE)
* 단정밀도 및 배정밀도 부동소수점
* 디지털 신호 처리 (DSP) 확장 지원
* TrustZone 보안 확장 지원
* 안전 및 신뢰성 (RAS) 지원
* 코프로세서 지원
* 0, 4, 8, 12 또는 16개 영역의 보안 및 비보안 MPU
* 0, 4 또는 8개 영역의 SAU
* 4KB, 8KB, 16KB, 32KB, 64KB 크기의 명령어 캐시
* 4KB, 8KB, 16KB, 32KB, 64KB 크기의 데이터 캐시
* 캐시 및 TCM의 ECC
* 1~480개의 인터럽트
* 3~8개의 예외 우선순위 비트
* 내부 및 외부 WIC 옵션, 선택적 CTI, ITM 및 DWT
* ARM 사용자 정의 명령어

### 칩
* Alif Semiconductor Ensemble & Balletto MCU 제품군은 단일 또는 듀얼 Cortex-M55 코어를 제공하며, 각각 Ethos-U55 NPU와 쌍을 이룬다.
* 인피니온 PSoC Edge
* ST STM32 N6

## Cortex-M85

Cortex-M85 코어는 2022년 4월에 발표되었으며 Armv8.1-M 아키텍처를 기반으로 한다. 7단계 명령어 파이프라인을 가지고 있다.

**실리콘 옵션:**
* 선택적 CPU 캐시: 0~64KB 명령어 캐시, 0~64KB 데이터 캐시, 각각 선택적 ECC 포함.
* 선택적 밀접 결합 메모리 (TCM): 0~16MB 명령어-TCM, 0~16MB 데이터-TCM, 각각 선택적 ECC 포함.
* 선택적 메모리 보호 장치 (MPU): 16개 영역. TrustZone이 구현된 경우 보안 모드와 비보안 모드에 대해 별도의 MPU를 가질 수 있다.
* 최대 480개의 인터럽트 및 NMI
* 3~8개의 예외 우선순위 비트
* 선택적 이중 이중화 록스텝 동작.

### 칩
* 르네사스 RA8

## 개발 도구

## 문서
ARM 칩에 대한 문서는 광범위하다. 과거에는 8비트 마이크로컨트롤러 문서가 일반적으로 단일 문서에 담겼지만, 마이크로컨트롤러가 진화함에 따라 이를 지원하는 데 필요한 모든 것도 진화했다. ARM 칩의 문서 패키지는 일반적으로 IC 제조업체와 CPU 코어 공급업체(ARM 리미티드)의 문서 모음으로 구성된다.

일반적인 하향식 문서 트리는 다음과 같다.

;문서 트리 (위에서 아래로)
# IC 제조업체 웹사이트.
# IC 제조업체 마케팅 슬라이드.
# 정확한 물리적 칩에 대한 IC 제조업체 데이터시트.
# 물리적 칩 제품군의 일반적인 주변 장치 및 측면을 설명하는 IC 제조업체 참조 매뉴얼.
# ARM 코어 웹사이트.
# ARM 코어 일반 사용자 가이드.
# ARM 코어 기술 참조 매뉴얼.
# ARM 아키텍처 참조 매뉴얼.

IC 제조업체는 평가 보드 사용자 매뉴얼, 애플리케이션 노트, 시작 가이드, 소프트웨어 라이브러리 문서, 오류 정정(errata) 등 추가 문서를 가지고 있다. 공식 Arm 문서 링크는 외부 링크 섹션을 참조한다.

## 같이 보기

* ARM 아키텍처
* ARM 아키텍처 및 코어 목록
* 인터럽트, 인터럽트 핸들러
* 실시간 운영체제, 실시간 운영체제 비교

## 각주

## 더 읽어보기
* Designer's Guide to the Cortex-M Processor Family; 3rd Ed; Trevor Martin; 648 pages; 2022; .
* Definitive Guide to the ARM Cortex-M0 and Cortex-M0+ Processors; 2nd Ed; Joseph Yiu; 784 pages; 2015; .
* Definitive Guide to the ARM Cortex-M3 and Cortex-M4 Processors; 3rd Ed; Joseph Yiu; 864 pages; 2013; .
* Definitive Guide to the ARM Cortex-M23 and Cortex-M33 Processors; 1st Ed; Joseph Yiu; 928 pages; 2020; .
* Microcontrollers with C: Cortex-M and Beyond; 1st Ed; Klaus Elk; 227 pages; 2023; .
* Embedded Systems with ARM Cortex-M Microcontrollers in Assembly Language and C; 4th Ed; Yifeng Zhu; 730 pages; 2023; .
* ARM Assembly for Embedded Applications; 5th Ed; Daniel Lewis; 379 pages; 2019; .
* Assembly Language Programming: ARM Cortex-M3; 1st Ed; Vincent Mahout; 256 pages; 2012; .
* Digital Signal Processing and Applications Using the ARM Cortex-M4; 1st Ed; Donald Reay; 320 pages; 2015; .
* Hands-On RTOS with Microcontrollers; 1st Ed; Brian Amos; 496 pages; 2020; .

## 외부 링크

;ARM Cortex-M 공식 문서
* ARM Cortex-M 공식 웹사이트
* 초보자를 위한 Cortex-M arm.com
* ARMv8-M 보안 확장 arm.com
* Cortex 마이크로컨트롤러 소프트웨어 인터페이스 표준 (CMSIS) arm.com

:

;빠른 참조 카드
* 명령어: Thumb-1 (1), ARM 및 Thumb-2 (2), 벡터 부동소수점 (3) arm.com
* Opcode: Thumb-1 (1, 2), ARM (3, 4), GNU 어셈블러 지시문 (5).

;마이그레이션
* 8051에서 Cortex-M3로 마이그레이션 – arm.com
* PIC에서 Cortex-M3로 마이그레이션 – arm.com
* ARM7TDMI에서 Cortex-M3로 마이그레이션 – arm.com
* Cortex-M4에서 Cortex-M7로 마이그레이션 – keil.com

;기타
* STM32 Cortex-M 마이크로컨트롤러의 비트 밴딩

분류:32비트 마이크로프로세서
분류:ARM 마이크로프로세서