Problem: During a commanded reboot of the processor, the DSP executes an unexpected, un-enabled, illegal interrupt.
Scenario: After the DSP boots up and has been running for some time, we command a ‘reboot’ to return to restart the system. During this operation, we have a low probability (1 in ~500) that the DSP will execute an unexpected, un-enabled, interrupt that takes it to “this should never happen” code.
Detailed description:
1) The DSP is booted up and configured to run in normal mode:
a) External pin (xnmi_xint13) is used to generate interrupts for normal operation.
(1) External pin (xnmi_xint13) is connected to a 20 Kilohertz signal.
(2) External pin (xnmi_xint13) is configured as an input to generate the maskable interrupt INT13.
(3) External pin (xnmi_xint13) is NOT configured as an external non-maskable interrupt.
b) The watchdog time is configured to be active.
2) The DSP executing operational code is commanded to re-boot; the operational code:
a) Disables interrupts (INTM).
b) Forces a watchdog reset by writing an illegal value to watchdog control register.
c) The watchdog hold the DSP in reset for a short period of time.
d) The reset re-initialzes registers to their initial state.
3) The DSP wakes up from the (re)boot and starts to execute the environment code.
a) Watchdog is disable
b) RAM resident sections of the bootloader image are copied from FLASH into RAM
c) The rest of RAM is set to zero
d) Stack area is setup
4) The DSP wakes up from the (re)boot and starts to execute the code I’ve attached.
a) EALLOW is enabled
b) Minimum DSP initialization is completed
(1) Flash registers
(2) DSP clocks
(3) CPU interrupt registers
(4) Watchdog timer (disabled)
(5) A subset of I/O pins are configured
c) Bootloader program (3F4000h – 3F7F80h in flash) is CRC verified
d) Sections of internal RAM are pattern tested
e) External bus parameters are configured for normal operation
f) The rest of the DSP is initialized / configured
(1) Configure SPI registers
(2) Configure real-time-clock registers
g) An external FPGA is loaded with an image from an external FLASH:
(1) Clocks are re-configured to a slower rate to load the FPGA
(a) The clock change waits for 327,675 clocks to settle out
(b) While waiting for the clock change to settle out, an illegal interrupt occurs
· the this-should-never-happen interrupt very occurs earily in the wait period
· the this-should-never-happen interrupt loops forever