I do a lot of bare-metal programming on ARM. Here are a few notes of things that are useful to me but are often deeply buried in datasheets:

ARM Cortex M3/M4 (at least, Freescale / Atmel) useful registers for when you bork your code:

  • 0xe000e300 is the start of the active interrupts NVIC register
  • 0xe000e400 is the start of the interrupt priority registers
  • 0xe000ed08 vector table offset register
  • 0xe000ed28 configurable fault status register. see p.227 of ARM cortex-m4 manual
  • 0xe000ed2c hard fault status register
  • 0xe000ed34 mem manage fault address register (if valid bit is set)
  • 0xe000ed38 bus fault address register (if valid bit is set)
  • 0xe000ed3c aux fault status register (if valid bit is set)