@@ -1561,9 +1561,14 @@ static inline void up_setusartint(struct up_dev_s *priv, uint16_t ie)
15611561 cr = up_serialin (priv , STM32_USART_CR1_OFFSET );
15621562 cr &= ~(USART_CR1_USED_INTS );
15631563 cr |= (ie & (USART_CR1_USED_INTS ));
1564+
15641565#ifdef SERIAL_HAVE_RXDMA
1565- cr |= USART_CR1_IDLEIE ;
1566+ if (priv -> rxdma != 0 )
1567+ {
1568+ cr |= USART_CR1_IDLEIE ;
1569+ }
15661570#endif
1571+
15671572 up_serialout (priv , STM32_USART_CR1_OFFSET , cr );
15681573
15691574 cr = up_serialin (priv , STM32_USART_CR3_OFFSET );
@@ -2142,7 +2147,8 @@ static int up_setup(struct uart_dev_s *dev)
21422147 */
21432148
21442149 regval = up_serialin (priv , STM32_USART_CR1_OFFSET );
2145- regval &= ~(USART_CR1_TE | USART_CR1_RE | USART_CR1_ALLINTS );
2150+ regval &= ~(USART_CR1_TE | USART_CR1_RE | USART_CR1_IDLEIE |
2151+ USART_CR1_ALLINTS );
21462152
21472153 up_serialout (priv , STM32_USART_CR1_OFFSET , regval );
21482154
@@ -2172,7 +2178,10 @@ static int up_setup(struct uart_dev_s *dev)
21722178 regval = up_serialin (priv , STM32_USART_CR1_OFFSET );
21732179 regval |= (USART_CR1_UE | USART_CR1_TE | USART_CR1_RE );
21742180#ifdef SERIAL_HAVE_RXDMA
2175- regval |= USART_CR1_IDLEIE ;
2181+ if (priv -> rxdma != 0 )
2182+ {
2183+ regval |= USART_CR1_IDLEIE ;
2184+ }
21762185#endif
21772186
21782187 regval |= USART_CR1_FIFOEN ;
@@ -2523,10 +2532,7 @@ static int up_interrupt(int irq, void *context, FAR void *arg)
25232532 if ((priv -> sr & USART_ISR_IDLE ) != 0 )
25242533 {
25252534 up_serialout (priv , STM32_USART_ICR_OFFSET , USART_ICR_IDLECF );
2526- if (priv -> rxdma != 0 )
2527- {
2528- up_dma_rxcallback (priv -> rxdma , 0 , priv );
2529- }
2535+ up_dma_rxcallback (priv -> rxdma , 0 , priv );
25302536 }
25312537#endif
25322538
0 commit comments