/***************************************************************************** * @fn HalUARTRead * * @brief Read a buffer from the UART * * @param port - USART module designation * buf - valid data buffer at least 'len' bytes in size * len - max length number of bytes to copy to 'buf' * * @return length of buffer that was read *****************************************************************************/ uint16 HalUARTRead(uint8 port, uint8 *buf, uint16 len) { #if (HAL_UART_DMA == 1) if (port == HAL_UART_PORT_0) return HalUARTReadDMA(buf, len); #endif #if (HAL_UART_DMA == 2) if (port == HAL_UART_PORT_1) return HalUARTReadDMA(buf, len); #endif #if (HAL_UART_ISR == 1) if (port == HAL_UART_PORT_0) return HalUARTReadISR(buf, len); #endif #if (HAL_UART_ISR == 2) if (port == HAL_UART_PORT_1) return HalUARTReadISR(buf, len); #endif #if (HAL_UART_SPI == 1) if (port == HAL_UART_PORT_0) return HalUARTReadSPI(buf, len); #endif #if (HAL_UART_SPI == 2) if (port == HAL_UART_PORT_1) return HalUARTReadSPI(buf, len); #endif #if HAL_UART_USB return HalUARTRx(buf, len); #else #if (HAL_UART_DMA == 0) && (HAL_UART_ISR == 0) && (HAL_UART_SPI == 0) // UART is not enabled. Do nothing. (void) port; // unused argument (void) buf; // unused argument (void) len; // unused argument #endif return 0; #endif }
/***************************************************************************** * @fn HalUARTRead * * @brief Read a buffer from the UART * * @param port - USART module designation * buf - valid data buffer at least 'len' bytes in size * len - max length number of bytes to copy to 'buf' * * @return length of buffer that was read *****************************************************************************/ uint16 HalUARTRead(uint8 port, uint8 *buf, uint16 len) { (void)port; (void)buf; (void)len; #if (HAL_UART_DMA == 1) if (port == HAL_UART_PORT_0) return HalUARTReadDMA(buf, len); #endif #if (HAL_UART_DMA == 2) if (port == HAL_UART_PORT_1) return HalUARTReadDMA(buf, len); #endif #if (HAL_UART_ISR == 1) if (port == HAL_UART_PORT_0) return HalUARTReadISR(buf, len); #endif #if (HAL_UART_ISR == 2) if (port == HAL_UART_PORT_1) return HalUARTReadISR(buf, len); #endif #if HAL_UART_USB return HalUARTRx(buf, len); #else return 0; #endif }
/************************************************************************************************* * @fn HalUARTRead() * * @brief Read a buffer from the UART * * @param port - UART port (not used.) * ppBuffer - pointer to a pointer that points to the data that will be read * length - length of the requested buffer * * @return length of buffer that was read *************************************************************************************************/ uint16 HalUARTRead ( uint8 port, uint8 *pBuffer, uint16 length ) { #if HAL_UART_USB return HalUARTRx(pBuffer, length); #else return (HalUARTReadIsr( port, pBuffer, length )); #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 TRUE to run the code image, FALSE to run the SBL. ************************************************************************************************** */ static uint8 sblWait(void) { uint32 dlyCnt = 0x260000; uint8 rtrn = FALSE; HAL_ENABLE_INTERRUPTS(); 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)) { rtrn = TRUE; break; } // 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(); } } HAL_DISABLE_INTERRUPTS(); SB_TURN_OFF_LED1(); SB_TURN_OFF_LED2(); return rtrn; }
/************************************************************************************************** * @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(); }