SoC
  • Home
  • Arm
  • Arm Cortex M0/M0+
  • Arm Cortex M4
  • Arm Cortex M3
  • Contact
Reading: What are the special registers in the ARM Cortex?
SUBSCRIBE
SoCSoC
Font ResizerAa
  • Home
  • Arm
  • Arm Cortex M0/M0+
  • Arm Cortex M4
Search
  • Home
  • Arm
  • Arm Cortex M0/M0+
  • Arm Cortex M4
Have an existing account? Sign In
Follow US
  • Looking for Something?
  • Privacy Policy
  • About Us
  • Sitemap
  • Contact Us
© S-O-C.ORG, All Rights Reserved.
Arm

What are the special registers in the ARM Cortex?

Scott Allen
Last updated: September 11, 2023 1:58 am
Scott Allen 8 Min Read
Share
SHARE

The ARM Cortex series of processors utilize a number of special purpose registers that allow for customized control and monitoring of the processor’s operation. These registers give developers and engineers visibility into the internal workings of the processor and enable optimization of performance, power usage, and functionality.

Contents
Program CounterLink RegisterStack PointerCondition FlagsControl RegisterStatus RegisterException Link RegisterSaved Program Status RegisterInstruction RegistersDecoder RegisterMemory Protection Unit RegistersFloating Point RegistersAdvanced SIMD/NEON RegistersDebug RegistersThumb Execution Environment RegisterNested Vectored Interrupt Controller RegistersSystem Control Block RegistersSummary

Program Counter

The program counter (PC) register contains the memory address of the next instruction to be executed. It is automatically incremented during sequential instruction execution. The PC can be manipulated to implement branches and jumps by loading a new value into it. Upon exception entry, the PC is saved to the link register so that execution can resume afterwards.

Link Register

The link register (LR) stores the return address when a branch is taken or an exception occurs. This allows execution to continue from the original location after the branch or exception handler completes. The LR register can also be used as a general purpose register if not needed for return addresses.

Stack Pointer

The stack pointer (SP) register indicates the top of the stack in memory. It is used to push and pop data to/from the stack. Stack operations like pushes and pops automatically update the SP. Manipulating this register allows control over the stack position. Upon exception entry, the SP and LR are saved to the stack.

Condition Flags

The condition flags (NZCV) record the results of arithmetic operations, such as carries, overflows, zeros, and negatives. These flags can be tested with conditional execution instructions to implement branches and loops based on certain arithmetic outcomes. Common conditional flags include:

  • N – Negative flag
  • Z – Zero flag
  • C – Carry flag
  • V – Overflow flag

Control Register

The control register governs key elements of control and data processing operations. Typical bits include:

  • M – Mode field for selecting processor mode
  • I – Interrupt disable bit
  • F – FIQ disable bit
  • T – Thumb execution state bit

Modification of the control register can be used to switch between ARM and Thumb instruction sets, change processor modes, and enable/disable interrupts.

Status Register

The status register provides information about the processor state. It exposes the following:

  • Processor mode
  • Interrupt disable status
  • Overflow status
  • Carry/borrow status

The status register gives visibility into key details about the current processor context. This can be useful for debugging, profiling and dynamic control of applications.

Exception Link Register

The exception link register (ELR) holds the address to return to after handling an exception. When a synchronous exception occurs, the ELR receives the address of the instruction that triggered it. For asynchronous exceptions, it gets the address of the instruction boundary.

Saved Program Status Register

The saved program status register (SPSR) stores a copy of the CPSR register on exception entry. This saves the CPSR context so it can be restored when the exception handler completes. The SPSR is used alongside the ELR to return properly to the original execution context.

Instruction Registers

A set of instruction registers hold instructions fetched from memory prior to execution. Typical instruction registers include:

  • Current Program Status Register – Holds the instruction being executed currently
  • Next Executing Instruction – Fetched instruction to execute after the current one
  • Fetched Instruction Queue – FIFO queue holding pending instructions

These registers enable efficient pipelined execution by prefetching instructions before they are required. This hides some of the instruction fetch latency.

Decoder Register

The decoder register holds instruction decoding information, such as:

  • Instruction length
  • Location of operands
  • Execution mode (ARM vs Thumb)

By buffering this information in a register, the decoding logic can be simplified to improve performance and reduce power usage.

Memory Protection Unit Registers

The memory protection unit (MPU) utilizes registers for configuring memory access permissions. These include:

  • Number of programmable MPU regions
  • Start and end address for each region
  • Access permission control fields
  • MPU control bits

The MPU registers allow dynamic control over memory access permissions for security and safety purposes in critical systems.

Floating Point Registers

Dedicated floating point registers augment the general purpose registers to provide efficient storage for floating point operands and results. These can include:

  • Floating point status and control register
  • Floating point exception register
  • A set of floating point data registers

Segregating floating point and integer registers maximizes opportunities for parallel execution of floating point intensive code.

Advanced SIMD/NEON Registers

To enable high performance vector operations, ARM Cortex processors often include a set of SIMD (Single Instruction Multiple Data) registers, marketed under the NEON brand. NEON provides features such as:

  • 32 x 128-bit data registers
  • Dedicated saturating arithmetic instructions
  • Advanced rounding modes
  • Extensive data reordering operations

NEON enables significant acceleration of media processing, imaging, computer vision and digital signal processing algorithms.

Debug Registers

For debugging complex embedded systems, ARM processors contain specialized debug registers and logic. These provide capabilities including:

  • Halting debug events
  • Breakpoints
  • Watchpoints
  • Invasive and non-invasive debug
  • Trace buffers

Debug registers give visibility into the processor state during critical points of program execution.

Thumb Execution Environment Register

The Thumb execution environment register indicates whether the processor is currently in ARM or Thumb execution state. This allows the execution mode to be switched automatically when calling or returning from Thumb/ARM routines.

Nested Vectored Interrupt Controller Registers

The nested vectored interrupt controller (NVIC) registers provide low-latency exception Prioritization and control. Key attributes include:

  • Set/clear pending interrupts
  • Set interrupt priority levels
  • Determine active interrupt number
  • Trigger software interrupts

These registers deliver real-time responsiveness for interrupt-driven embedded systems.

System Control Block Registers

The system control block provides overall configuration capability for the rest of the processor. Useful SCB registers include:

  • Vector table offset register
  • Application interrupt and reset control register
  • System timer registers
  • Processor feature control bits

SCB registers allow customization of reset behavior, timer services, exceptions, and general configuration options.

Summary

In summary, ARM Cortex processors contain a rich assortment of special registers to control and monitor all aspects of processor operation. Developers can leverage these registers to build optimized and robust embedded systems. The program counter, link register, stack pointer, and condition flags provide basic yet crucial execution monitoring. Control, status, and exception handling registers assist with complex application code. Memory protection, floating point, SIMD and debug registers enable further acceleration and safety capabilities. Overall the extensive special registers make the ARM Cortex family exceptionally flexible and powerful.

Newsletter Form (#3)

More ARM insights right in your inbox

 


Share This Article
Facebook Twitter Email Copy Link Print
Previous Article What is the purpose of the control register inside the Cortex-M processor core?
Next Article Switching Context Inside an ISR on Cortex-M
Leave a comment Leave a comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

2k Followers Like
3k Followers Follow
10.1k Followers Pin
- Sponsored-
Ad image

You Might Also Like

Arm Sleep Mode Entry and Exit Differences: WFE vs WFI

The ARM Cortex architecture provides two instructions for entering sleep…

6 Min Read

Does the GCC compiler detects unaligned code accesses during compilation as well?

The short answer is yes, the GCC compiler is capable…

7 Min Read

Is ARM cortex a microcontroller?

The ARM Cortex series refers to ARM processor cores designed…

7 Min Read

Troubleshooting “Invalid ROM Table” error when debugging Cortex-M1

The "Invalid ROM Table" error is a common problem faced…

7 Min Read
SoCSoC
  • Looking for Something?
  • Privacy Policy
  • About Us
  • Sitemap
  • Contact Us
Welcome Back!

Sign in to your account