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)