The Definitive Guide to the ARM Cortex-M0

The Definitive Guide to the ARM Cortex-M0

1st Edition - February 25, 2011

Write a review

  • Author: Joseph Yiu
  • eBook ISBN: 9780123854780

Purchase options

Purchase options
DRM-free (EPub, PDF, Mobi)
Sales tax will be calculated at check-out

Institutional Subscription

Free Global Shipping
No minimum order


The Definitive Guide to the ARM Cortex-M0 is a guide for users of ARM Cortex-M0 microcontrollers. It presents many examples to make it easy for novice embedded-software developers to use the full 32-bit ARM Cortex-M0 processor. It provides an overview of ARM and ARM processors and discusses the benefits of ARM Cortex-M0 over 8-bit or 16-bit devices in terms of energy efficiency, code density, and ease of use, as well as their features and applications. The book describes the architecture of the Cortex-M0 processor and the programmers model, as well as Cortex-M0 programming and instruction set and how these instructions are used to carry out various operations. Furthermore, it considers how the memory architecture of the Cortex-M0 processor affects software development; Nested Vectored Interrupt Controller (NVIC) and the features it supports, including flexible interrupt management, nested interrupt support, vectored exception entry, and interrupt masking; and Cortex-M0 features that target the embedded operating system. It also explains how to develop simple applications on the Cortex-M0, how to program the Cortex-M0 microcontrollers in assembly and mixed-assembly languages, and how the low-power features of the Cortex-M0 processor are used in programming. Finally, it describes a number of ARM Cortex-M0 products, such as microcontrollers, development boards, starter kits, and development suites. This book will be useful to both new and advanced users of ARM Cortex devices, from students and hobbyists to researchers, professional embedded- software developers, electronic enthusiasts, and even semiconductor product designers.

Key Features

  • The first and definitive book on the new ARM Cortex-M0 architecture targeting the large 8-bit and 16-bit microcontroller market
  • Explains the Cortex-M0 architecture and how to program it using practical examples
  • Written by an engineer at ARM who was heavily involved in its development


Embedded software developers, Embedded Product Designers, Students taking an
embedded systems design course where the Arm Cortex- M0 is used, electronics

Table of Contents

  • Foreword




    terms and Abbreviations

    Chapter 1 Introduction

        Why Cortex-M0?

             Energy Efficiency

             Code Density

             Ease of Use

        Application of the Cortex-M0 Processors

        Background of ARM and ARM processors

        Cortex-M0 Processor Specification and ARM Architecture

        ARM Processors and the ARM Ecosystem

        Getting Started with the Cortex-M0 Processor

        Organization of This Book and Resources

    Chapter 2 Cortex-M0 Technical Overview

        General Information on the Cortex-M0 Processor

        The ARM Cortex-M0 Processor Features

             System Features

             Implementation Features

             Debug Features


        Advantages of the Cortex-M0 Processor

             Energy Efficiency

             Limitations in 8-Bit and 16-Bit Architectures

             Easy to Use, Software Portability

             Wide Range of Choices

        Low-Power Applications

             Small Gate Count

             High Efficiency

             Low-Power Features

             Logic Cell Enhancement

        Cortex-M0 Software Portability

    Chapter 3 Architecture


        Programmer’s Model

             Operation Modes and States

             Registers and Special Registers


             R13, Stack Pointer (SP)

             R14, Link Register (LR)

             R15, Program Counter (PC)

             xPSR, Combined Program Status Register

             Behaviors of the Application Program Status Register (APSR)

             PRIMASK: Interrupt Mask Special Register

             CONTROL: Special Register

        Memory System Overview

        Stack Memory Operations

        Exceptions and Interrupts

        Nested Vectored Interrupt Controller (NVIC)

             Flexible Interrupt Management

             Nested Interrupt Support

             Vectored Exception Entry

             Interrupt Masking

        System Control Block (SCB)

             Debug System

        Program Image and Startup Sequence

    Chapter 4 Introduction to Cortex-M0 Programming

        Introduction to Embedded System Programming

             What Happens When a Microcontroller Starts?

             Designing Embedded Programs

        Inputs and Outputs

        Development Flow

        C Programming and Assembly Programming

        What Is in a Program Image?

             Vector Table

             C Startup Code

             Program Code

             C Library Code

             Data in RAM

        C Programming: Data Types

        Accessing Peripherals in C

        Cortex Microcontroller Software Interface Standard (CMSIS)

             Introduction of CMSIS

             What Is Standardized in CMSIS

             Organization of the CMSIS

             Using CMSIS

        Benefits of CMSIS

    Chapter 5 Instruction Set

        Background of ARM and Thumb Instruction Set

        Assembly Basics

             Quick Glance at Assembly Syntax

             Use of a Suffix

             Thumb Code and Unified Assembler Language (UAL)

             Instruction List

             Moving Data within the Processor

             Memory Accesses

             Stack Memory Accesses

             Arithmetic Operations

             Logic Operations

             Shift and Rotate Operations

             Extend and Reverse Ordering Operations

             Program Flow Control

             Memory Barrier Instructions

             Exception-Related Instructions

             Sleep Mode Feature━Related Instructions

             Other Instructions

        Pseudo Instructions

    Chapter 6 Instruction Usage Examples


        Program Control



             More on the Branch Instructions

             Typical Usages of Branch Conditions

             Function Calls and Function Returns

             Branch Table

        Data Accesses

             Simple Data Accesses

             Example of Using Memory Access Instruction

        Data Type Conversion

             Conversion of Data Size

             Endian Conversion

        Data Processing

             64-Bit/128-Bit Add

             64-Bit/128-Bit Sub

             Integer Divide

             Unsigned Integer Square Root

             Bit and Bit Field Computations

    Chapter 7 Memory System


        Memory Map

             Code Region (0x00000000e0x1FFFFFFF)

             SRAM Region (0x20000000e0x3FFFFFFF)

             Peripheral Region (0x40000000e0x5FFFFFFF)

             RAM Region (0x60000000e0x9FFFFFFF)

             Device Region (0xA0000000e0xDFFFFFFF)

             Internal Private Peripheral Bus (PPB) (0xE0000000e0xE00FFFFF)

             Reserved Memory Space (0xE0100000e0xFFFFFFFF)

        Program Memory, Boot Loader, and Memory Remapping

        Data Memory

        Little Endian and Big Endian Support

             Data Type

             Effect of Hardware Behavior to Programming

             Data Alignment

             Access to Invalid Addresses

             Use of Multiple Load and Store Instructions

        Memory Attributes

    Chapter 8 Exceptions and Interrupts

        What Are Exceptions and Interrupts?

        Exception Types on the Cortex-M0 Processor

             Nonmaskable Interrupt (NMI)

             Hard Fault

             SVCall (SuperVisor Call)

             PendSV (Pendable Service Call)



        Exception Priority Definition

        Vector Table

        Exception Sequence Overview

             Acceptance of Exception Request

             Stacking and Unstacking

             Exception Return Instruction

             Tail Chaining

             Late Arrival


        Details of Exception Entry Sequence


             Vector Fetch and Update PC

             Registers Update

        Details of Exception Exit Sequence

             Unstacking of Registers

             Fetch and Execute from Return Address

    Chapter 9 Interrupt Control and System Control

        Overview of the NVIC and System Control Block Features

        Interrupt Enable and Clear Enable

        Interrupt Pending and Clear Pending

        Interrupt Priority Level

        Generic Assembly Code for Interrupt Control

             Enable and Disable Interrupts

             Set and Clear Interrupt Pending Status

             Setting up Interrupt Priority Level

        Exception Masking Register (PRIMASK)

        Interrupt Inputs and Pending Behavior

             Simple Interrupt Process

        Interrupt Latency

        Control Registers for System Exceptions

        System Control Registers

             CPU ID Base Register

             Application Interrupt and Reset Control Register

             Configuration and Control Register

    Chapter 10 Operating System Support Features

        Overview of the OS Support Features

             Why Use an Embedded OS?

        The SysTick Timer

        SysTick Registers

             Setting up SysTick

             Using SysTick Timer for Timing Measurement

        Process Stack and Process Stack Pointer



    Chapter 11 Low-Power Features

        Low-Power Embedded System Overview

        Low-Power Advantages of the Cortex-M0 Processor

        Overview of the Low-Power Features

        Sleep Modes

        Wait-for-Event (WFE) and Wait-for-Interrupt (WFI)

             Wait for Event (WFE)

             Wait for Interrupt (WFI)

             Wakeup Conditions

        Sleep-on-Exit Feature

        Wakeup Interrupt Controller

    Chapter 12 Fault Handling

        Fault Exception Overview

             What Can Cause a Fault?

        Analyze a Fault

        Accidental Switching to ARM State

        Error Handling in Real Applications


             Causes of Lockup

             What Happens during a Lockup?

        Preventing Lockup

    Chapter 13 Debug Features

        Software Development and Debug Features

        Debug Features Overview

        Debug Interface

        Halt Mode and Debug Events

        Debug System

    Chapter 14 Getting Started with Keil MDK

        Introduction to Keil MDK

        First Step of Using Keil MDK

             Create the Blinky Project

             Create the Project Code

             Project Settings

             Compile and Build the Program

             Using the Debugger

        Other Project Configurations

             Target, Source Groups

             Compiler and Code-Generation Options


             Execution in RAM

        Customizing the Startup Code in Keil

        Using the Scatter Loading Feature in Keil

    Chapter 15 Simple Application Programming

        Using CMSIS

        Using the SysTick Timer as a Single Shot Timer

        UART Examples

             Simple Input/Output


             Developing Your Own Input and Output Functions

        Simple Interrupt Programming

             General Overview of Interrupt Programming

             Dial Control Interface Example

             Interrupt Control Functions

        Different Versions of CMSIS

    Chapter 16 Assembly Projects and Mixed-Assembly and C Projects

        Project Development in Assembly

        Recommended Practice in Assembly Programming

        Structure of an Assembly Function

        Simple Assembly Project Example

        Allocating Data Space for Variables

        UART Example in Assembly

        Additional Text Output Functions

             Complex Branch Handling

        Mixed-Language Projects

             Calling a C Function from Assembly

             Calling an Assembly Function from C Code

        Embedded Assembly

        Accessing Special Instructions

        Idiom Recognitions

    Chapter 17 Using Low-Power Features in Programming


        Review of Sleep Modes in the Cortex-M0 Processor

        Using WFE and WFI in Programming

        Using the Send-Event-on-Pend Feature

        Using the Sleep-on-Exit Feature

        Wakeup Interrupt Controller (WIC) Feature

        Event Communication Interface

        Developing Low-Power Applications

        Example of Using Low-Power Features on the LPC111x

    Chapter 18 Using SVC, PendSV, and Keil RTX Kernel


        Using the SVC Exception

        Using the PendSV Exception

        Using an Embedded OS

        Keil RTX Real-Time Kernel

             Features Overview

        OS Startup Sequence

             Simple OS Example

             Intertask Communications

             Event Communications

             Mutual Exclusive


             Mailbox Messages

             Periodic Time interval

             Other RTX Features

             Application Example

    Chapter 19 Getting Started with the ARM RealView Development Suite


        Simple Application Example

        Using the Scatter Loading File

        Example with Vector Table in C

        Using MicroLIB in RVDS

        Using Assembly for Application Development in RVDS

        Flash Programming

        Debugging Using RealView Debugger

        Using Serial Wire Debug with the RealView Debugger

        Retargeting in RVDS

    Chapter 20 Getting Started with the GNU C Compiler


        Typical Development Flow

        Simple C Application Development

        CodeSourcery Common Startup Code Sequence (CS3)

        Using a User-Defined Vector Table

        Using Printf in gcc

        Inline Assembler

        SVC Example in gcc

        Hard Fault Handler Example

        Flash Programming and Debug

    Chapter 21 Software Porting


        ARM Processors

        Differences between the ARM7TDMI and the Cortex-M0

             Operation Mode


             Instruction Set


        Porting Software from the ARM7TDMI to the Cortex-M0

             Startup Code and Vector Table


             C Program Code

             Assembly Code

             Atomic Access


        Differences between the Cortex-M1 and the Cortex-M0

             Instruction Set


             System-Level Features

        Porting Software between the Cortex-M0 and the Cortex-M1

        Differences between the Cortex-M3 and the Cortex-M0

             Programmer’s Model

             NVIC and Exceptions

             Instruction Set

             System-Level Features

             Debug Features

        Porting Software between the Cortex-M0 and the Cortex-M3

        Porting Software between the Cortex-M0 and the Cortex-M4 Processor

        Porting Software from 8-Bit/16-Bit Microcontrollers to the Cortex-M0

             Common Modifications

             Memory Requirements

             Nonapplicable Optimizations for 8-Bit or 16-Bit Microcontrollers

             Example: Migrate from the 8051 to the ARM Cortex-M0

    Chapter 22 Cortex-M0 Products


        Microcontroller Products and Application-Specific Standard Products (ASSPs)

             NXP Cortex-M0 Microcontrollers

             NuMicro™ Microcontroller Family

             Mocha-1 ARM Cortex-M0 Configurable Array

             Melfas MCS™-7000 Series Touch Screen Controllers

        Compilers and Software Development Suites

             Keil Microcontroller Development Kit (MDK)

             TASKING VX-Toolset for ARM

             IAR Embedded Workbench for ARM

             CrossWorks for ARM

             Red Suite

             LabView C Code Generator

        Development Boards


             IAR KickStart Kit for LPC1114

             LPC1114 Cortex-M0 Stamp Module

             Keil Cortex-M0 Boards

    Appendix A: Instruction Set Summary

    Appendix B: Cortex-M0 Exception Type Quick Reference

    Appendix C: CMSIS Quick Reference

    Appendix D: NVIC, SCB, and SysTick Registers Quick Reference

    Appendix E: Debug Registers Quick Reference

    Appendix F: Debug Connector Arrangement

    Appendix G: Linker Script for CodeSourcery G++ Lite

    Appendix H: Example Code Files

    Appendix I: Troubleshooting


Product details

  • No. of pages: 552
  • Language: English
  • Copyright: © Newnes 2011
  • Published: February 25, 2011
  • Imprint: Newnes
  • eBook ISBN: 9780123854780

About the Author

Joseph Yiu

Joseph Yiu
Joseph Yiu joined Arm in 2001 and has been involved in a wide range of projects including development of Arm Cortex-M processors and various on-chip system level and debug components. In addition to in-depth knowledge of the processors and microcontroller system design, Joseph also has extensive knowledge in related areas including software development for the Arm Cortex-M microcontrollers, FPGA development and System-on-Chip design technologies.

Affiliations and Expertise

Distinguished Engineer

Ratings and Reviews

Write a review

There are currently no reviews for "The Definitive Guide to the ARM Cortex-M0"