Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -r626d9aabbab7db936cc0b2df47417db3692305d1 --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 626d9aabbab7db936cc0b2df47417db3692305d1) @@ -53,6 +53,9 @@ /// Maximum wait time for UI to send its final POST result. #define POST_UI_MAX_WAIT_TIME ( 2 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) +/// Reserved (manually) memory for saved processor reset reason code. +#define RESET_REASON_CODE_SAVE (*(volatile uint32 *)0x0802FFFCU) + // ********** private data ********** static HD_POST_STATE_T postState; ///< Current state of initialize and POST mode. @@ -71,6 +74,8 @@ static DG_VERSIONS_T dgVersion = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; ///< Version and compatibility information reported by DG. static U32 startPOSTDelayCounter = 0; ///< Start POST delay counter. +extern U32 savedResetReasonCode; ///< Saved reset reason code from sys_startup.c. + // ********** private function prototypes ********** static HD_POST_STATE_T handlePOSTStatus( SELF_TEST_STATUS_T testStatus ); @@ -431,12 +436,15 @@ // when the event data can be sent if ( ++startPOSTDelayCounter > START_POST_DELAY_COUNT ) { + U32 resetReason = RESET_REASON_CODE_SAVE | systemREG1->SYSESR; + + systemREG1->SYSESR = systemREG1->SYSESR; // clear reset bit(s) after logging event so subsequent resets can be properly identified as not being power-on resets. + sendUIVersionRequest(); // Send the startup event - SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_STARTUP, systemREG1->SYSESR, systemREG1->GBLSTAT ) // log startup event w/ reset reason(s) bits - systemREG1->SYSESR &= ~((U32)0x00008000); // clear power-on reset bit after logging event so subsequent resets can be properly identified as not being power-on resets. - SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_STARTUP, systemREG1->DEV, 0x12345678 ) // log startup event w/ device ID bits + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_STARTUP, resetReason, systemREG1->GBLSTAT ) // log startup event w/ reset reason(s) bits + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_STARTUP, systemREG1->DEV, 0x12345678 ) // log startup event w/ device ID bits // Send the first submode change event. It is the mode Init and it does not start from a previous // mode previous and current are both published as Init SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_OP_MODE_CHANGE, MODE_INIT, MODE_INIT )