I can answer initialization for #1 - you start with yourself (the microcontroller) and branch outward
1) Disable all interrupts - some have something akin to a reset command that turns I/O pins off/tristate
2) Set the microcontroller itself into whichever mode/configuration is desired
3) Setup whatever glue-fpgas or peripheral ICs
4) Setup anything remaining on the host board
5) For each hardware element you'll be using,
5a) Associate an interrupt vector if appropriate, and then enable its interrupt (there may be a correct ordering of these, due to interdependence)
6) there may be a global interrupt enable, which you turn on at the end to bring everything you've initialized all up at once
These presume there's no OS - just you and hardware.
If there's an OS, these initial steps are likely to be a problem, but bringing things up from the inside out is still the answer