Accessing registers in an unclocked or powered-down peripheral

Technical Note 160909

Targets:
ARM

Component:
Debugger

Updated:
10/16/2017 12:39 PM

Introduction

Accessing registers in an unclocked or powered-down peripheral unit, in C-SPY, might give unexpected results.

Discussion

Accessing registers in an unclocked or powered-down peripheral unit during debugging might cause unexpected behavior. Incorrect data can be read, writes might have unexpected results or no effect. In some cases, writes or reads might cause the CPU to reset or the debug connection might be lost.

The exact behavior in such cases depends on the device implementation.

Just displaying the peripheral memory address range in the Memory window or displaying the peripheral registers in the Registers window can be enough to cause these effects.

Using custom Register groups

One way to view some registers, while avoiding accessing unclocked or powered-down peripheral registers, is to create an application-specific register group. To do that, choose View > Registers > Register User Groups Setup during a debug session. Create a User Register Group with only the registers that can be accessed without issues.

Note that you can create a combined group that contains registers from any predefined register group (for example a combination of UART and GPIO registers).

Conclusion

If accessing registers in an unclocked, powered-down or otherwise disabled peripheral unit leads to crashes or to a change in program behavior, you must take steps to avoid this. Consider these alternatives:

  • Avoid accessing the registers.
  • Ensure that the peripheral unit is enabled when C-SPY accesses register contents, for example by enabling the peripheral unit via a C-SPY macro.

For information on C-SPY macros and Register User Groups, choose Help > C-SPY Debugging guide.

All product names are trademarks or registered trademarks of their respective owners.

Related tech notes

© IAR Systems 1995-2017 - All rights reserved.