This commit is contained in:
刘可亮
2024-10-30 16:50:31 +08:00
parent 0ef85b55da
commit 661e71562d
458 changed files with 46555 additions and 12133 deletions

View File

@@ -305,6 +305,7 @@ rt_inline int _serial_int_rx(struct rt_serial_device *serial, rt_uint8_t *data,
ch = rx_fifo->buffer[rx_fifo->get_index];
rx_fifo->get_index += 1;
#ifdef RT_SERIAL_USING_FLOWCTRL
if (serial->config.function == RT_SERIAL_RS232_UNAUTO_FLOW_CTRL ||
serial->config.function == RT_SERIAL_RS232_SW_FLOW_CTRL ||
serial->config.function == RT_SERIAL_RS232_SW_HW_FLOW_CTRL )
@@ -314,9 +315,7 @@ rt_inline int _serial_int_rx(struct rt_serial_device *serial, rt_uint8_t *data,
rt_flowctrl_low_detect(serial, 1, RT_SERIAL_INT_FCL_BUFFER);
}
}
#endif
if (rx_fifo->get_index >= serial->config.bufsz) rx_fifo->get_index = 0;
if (rx_fifo->is_full == RT_TRUE)
@@ -411,6 +410,7 @@ static rt_size_t _serial_fifo_calc_recved_len(struct rt_serial_device *serial)
}
#endif /* RT_USING_POSIX_STDIO || RT_SERIAL_USING_DMA */
#ifdef RT_SERIAL_USING_FLOWCTRL
/**
* Flow control high level detect.
*
@@ -486,6 +486,7 @@ void rt_flowctrl_low_detect(struct rt_serial_device *serial, rt_size_t len, rt_s
}
}
}
#endif
#ifdef RT_SERIAL_USING_DMA
/**
@@ -624,7 +625,7 @@ rt_inline int _serial_dma_rx(struct rt_serial_device *serial, rt_uint8_t *data,
rt_memcpy(data + serial->config.bufsz - rx_fifo->get_index, rx_fifo->buffer,
recv_len + rx_fifo->get_index - serial->config.bufsz);
}
#ifdef RT_SERIAL_USING_FLOWCTRL
if (serial->config.function == RT_SERIAL_RS232_UNAUTO_FLOW_CTRL ||
serial->config.function == RT_SERIAL_RS232_SW_FLOW_CTRL ||
serial->config.function == RT_SERIAL_RS232_SW_HW_FLOW_CTRL)
@@ -634,7 +635,7 @@ rt_inline int _serial_dma_rx(struct rt_serial_device *serial, rt_uint8_t *data,
rt_flowctrl_low_detect(serial, recv_len, RT_SERIAL_DMA_FCL_BUFFER);
}
}
#endif
rt_dma_recv_update_get_index(serial, recv_len);
rt_hw_interrupt_enable(level);
return recv_len;
@@ -1444,6 +1445,7 @@ void rt_serial_rx_ind(struct rt_serial_device *serial)
rx_fifo->put_index += 1;
if (rx_fifo->put_index >= serial->config.bufsz) rx_fifo->put_index = 0;
#ifdef RT_SERIAL_USING_FLOWCTRL
if ((serial->config.function == RT_SERIAL_RS232_UNAUTO_FLOW_CTRL ||
serial->config.function == RT_SERIAL_RS232_SW_FLOW_CTRL ||
serial->config.function == RT_SERIAL_RS232_SW_HW_FLOW_CTRL) &&
@@ -1458,7 +1460,7 @@ void rt_serial_rx_ind(struct rt_serial_device *serial)
{
serial->ops->control(serial, RT_SERIAL_SW_RECEIVE_ON_OFF, &ch);
}
#endif
/* if the next position is read index, discard this 'read char' */
if (rx_fifo->put_index == rx_fifo->get_index)
{
@@ -1562,7 +1564,7 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
{
/* disable interrupt */
level = rt_hw_interrupt_disable();
#ifdef RT_SERIAL_USING_FLOWCTRL
/* flow control high level detect */
if ((serial->config.function == RT_SERIAL_RS232_UNAUTO_FLOW_CTRL ||
serial->config.function == RT_SERIAL_RS232_SW_FLOW_CTRL ||
@@ -1571,6 +1573,7 @@ void rt_hw_serial_isr(struct rt_serial_device *serial, int event)
{
rt_flowctrl_high_detect(serial, length, RT_SERIAL_DMA_FCH_BUFFER);
}
#endif
/* update fifo put index */
rt_dma_recv_update_put_index(serial, length);
/* calculate received total length */