/***************************************************************************** * @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 sbRx * * @brief Serial Boot loader read API that makes the low-level read according to RPC mode. * * input parameters * * @param buf - Pointer to a buffer to fill with up to 'len' bytes. * @param len - Maximum count of bytes to fill into the 'buf'. * * * output parameters * * None. * * @return The count of the number of bytes filled into the 'buf'. ************************************************************************************************** */ uint16 sbRx(uint8 *buf, uint16 len) { if (znpCfg1 == ZNP_CFG1_UART) { return HalUARTReadISR(buf, len); } else { if (spiPoll) { if (URXxIF) { *buf = UxDBUF; return 1; } else { return 0; } } else { return HalUARTReadSPI(buf, len); } } }
/************************************************************************************************** * @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(); }