bool uart_sps_flow_off(void) { bool flow_off = true; do { // First check if no transmission is ongoing if ((uart_temt_getf() == 0) || (uart_thre_getf() == 0) || !uart_sps_is_rx_fifo_empty()) { flow_off = false; break; } // Configure modem (HW flow control disable, 'RTS flow off') SetWord32(UART_MCR_REG, GetWord32(UART_MCR_REG) & (~UART_RTS)); //SetWord32(UART_MCR_REG, 0); // Wait for 1 character duration to ensure host has not started a transmission at the // same time for (int i=0;i<UART_WAIT_BYTE_COUNTER;i++); // Check if data has been received during wait time if(!uart_sps_is_rx_fifo_empty()) { // Re-enable UART flow uart_sps_flow_on(); // We failed stopping the flow flow_off = false; } } while(false); return (flow_off); }
bool uart_sps_flow_off(void) { bool flow_off = true; do { // First check if no transmission is ongoing if ((uart_temt_getf() == 0) || (uart_thre_getf() == 0)) { flow_off = false; break; } // Configure modem (HW flow control disable, 'RTS flow off') // Wait for 1 character duration to ensure host has not started a transmission at the // same time #ifndef __GNUC__ // timer_wait(UART_CHAR_DURATION); #endif //__GNUC__ // Check if data has been received during wait time if(!uart_sps_is_rx_fifo_empty()) { // Re-enable UART flow uart_sps_flow_on(); // We failed stopping the flow flow_off = false; } } while(false); return (flow_off); }