/************************************************************************************************** * @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) { HalUARTPollISR(); 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++) { HalUARTPollISR(); } sblJump(); } else if (dlyCnt++ & 0x4000) { SB_TOGGLE_LED1(); } } }
/*************************************************************************************************** * @fn HalUARTPoll * * @brief Poll the UART. * * @param none * * @return none *****************************************************************************/ void HalUARTPoll(void) { #if (HAL_UART_DMA && HAL_UART_SPI) // When both are defined, port is run-time choice. if (HAL_UART_PORT) { HalUARTPollSPI(); } else { HalUARTPollDMA(); } #else #if HAL_UART_DMA HalUARTPollDMA(); #endif #if HAL_UART_ISR HalUARTPollISR(); #endif #if HAL_UART_SPI HalUARTPollSPI(); #endif #if HAL_UART_USB HalUARTPollUSB(); #endif #endif }
/*************************************************************************************************** * @fn HalUARTPoll * * @brief Poll the UART. * * @param none * * @return none *****************************************************************************/ void HalUARTPoll(void) { #if HAL_UART_DMA HalUARTPollDMA(); #endif #if HAL_UART_ISR HalUARTPollISR(); #endif #if HAL_UART_USB HalUARTPollUSB(); #endif }
/************************************************************************************************** * @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; HalUARTPollISR(); if (HalUARTReadISR(&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 HalUARTPoll * * @brief Poll the UART. * * @param none * * @return none *****************************************************************************/ void HalUARTPoll(void) { if (ZNP_CFG1_SPI == znpCfg1) { return; } #if HAL_UART_DMA HalUARTPollDMA(); #endif #if HAL_UART_ISR HalUARTPollISR(); #endif #if HAL_UART_USB HalUARTPollUSB(); #endif }