drivers: serial: Fix "mcux_lpuart_irq_tx_complete" returns wrong result
Use "kLPUART_TransmissionCompleteFlag" instead of "kLPUART_TxDataRegEmptyFlag" to check if the tx transmition is finished. The "kLPUART_TxDataRegEmptyFlag" would give a wrong result even if the transmition isn't over. Signed-off-by: Andy Liu <andy@madmachine.io>
This commit is contained in:
parent
c2e9c1fa49
commit
2175675199
1 changed files with 3 additions and 2 deletions
|
@ -134,16 +134,17 @@ static int mcux_lpuart_irq_tx_complete(struct device *dev)
|
||||||
const struct mcux_lpuart_config *config = dev->config_info;
|
const struct mcux_lpuart_config *config = dev->config_info;
|
||||||
uint32_t flags = LPUART_GetStatusFlags(config->base);
|
uint32_t flags = LPUART_GetStatusFlags(config->base);
|
||||||
|
|
||||||
return (flags & kLPUART_TxDataRegEmptyFlag) != 0U;
|
return (flags & kLPUART_TransmissionCompleteFlag) != 0U;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mcux_lpuart_irq_tx_ready(struct device *dev)
|
static int mcux_lpuart_irq_tx_ready(struct device *dev)
|
||||||
{
|
{
|
||||||
const struct mcux_lpuart_config *config = dev->config_info;
|
const struct mcux_lpuart_config *config = dev->config_info;
|
||||||
uint32_t mask = kLPUART_TxDataRegEmptyInterruptEnable;
|
uint32_t mask = kLPUART_TxDataRegEmptyInterruptEnable;
|
||||||
|
uint32_t flags = LPUART_GetStatusFlags(config->base);
|
||||||
|
|
||||||
return (LPUART_GetEnabledInterrupts(config->base) & mask)
|
return (LPUART_GetEnabledInterrupts(config->base) & mask)
|
||||||
&& mcux_lpuart_irq_tx_complete(dev);
|
&& (flags & kLPUART_TxDataRegEmptyFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mcux_lpuart_irq_rx_enable(struct device *dev)
|
static void mcux_lpuart_irq_rx_enable(struct device *dev)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue