/************************************************************************************************** * @fn sblExec * * @brief Infinite SBL execute loop that jumps upon receiving a code enable. * * input parameters * * None. * * output parameters * * None. * * @return None. ************************************************************************************************** */ static void sblExec(void) { uint32 dlyCnt = 0; while (1) { HalUARTPollUSB(); if (sbExec() && sbImgValid()) { SB_TURN_ON_LED1(); SB_TURN_ON_LED2(); // Delay to allow the SB_ENABLE_CMD response to be flushed. for (dlyCnt = 0; dlyCnt < 0x40000; dlyCnt++) { HalUARTPollUSB(); } sblJump(); } else if (dlyCnt++ & 0x4000) { SB_TOGGLE_LED1(); } } }
/************************************************************************************************** * @fn sblWait * * @brief A timed-out wait loop that exits early upon receiving a force code/sbl byte. * * input parameters * * None. * * output parameters * * None. * * @return None. ************************************************************************************************** */ static void sblWait(void) { uint32 dlyCnt = SB_UART_DELAY; while (1) { uint8 ch; HalUARTPollUSB(); if (HalUARTRx(&ch, 1)) { if (ch == SB_FORCE_BOOT) { break; } else if (ch == SB_FORCE_RUN) { dlyCnt = 0; } } if (SB1_PRESS) { break; } if (SB2_PRESS || (dlyCnt-- == 0)) { sblJump(); } // RR-xing LED display while waiting. if (dlyCnt & 0x2000) { SB_TURN_OFF_LED2(); SB_TURN_ON_LED1(); } else { SB_TURN_OFF_LED1(); SB_TURN_ON_LED2(); } } SB_TURN_OFF_LED1(); SB_TURN_OFF_LED2(); }
/************************************************************************************************** * @fn main * * @brief C-code main functionality. * * input parameters * * None. * * output parameters * * None. * * @return None. ************************************************************************************************** */ void main(void) { vddWait(VDD_MIN_RUN); HAL_BOARD_INIT(); // make sure the DMA channel is selected before we attempt to // to write anything to flash. sblInit(); if (sbImgValid()) { if ((SB_UART_DELAY == 0) || ResetWasWatchDog) { sblJump(); } sblWait(); } vddWait(VDD_MIN_NV); sblExec(); HAL_SYSTEM_RESET(); }
/************************************************************************************************** * @fn main * * @brief C-code main functionality. * * input parameters * * None. * * output parameters * * None. * * @return None. ************************************************************************************************** */ void main(void) { vddWait(VDD_MIN_RUN); HAL_BOARD_INIT(); if (sbImgValid()) { if ((SB_UART_DELAY == 0) || ResetWasWatchDog) { sblJump(); } sblInit(); sblWait(); } else { sblInit(); } vddWait(VDD_MIN_NV); sblExec(); HAL_SYSTEM_RESET(); }