mirror of
https://github.com/apache/nuttx.git
synced 2026-05-29 20:56:47 +08:00
STM32: Handle setting of USART CR1_M when 8 bits of data plus parity
This commit is contained in:
@@ -1253,7 +1253,7 @@ static void up_set_format(struct uart_dev_s *dev)
|
|||||||
/* Configure parity mode */
|
/* Configure parity mode */
|
||||||
|
|
||||||
regval = up_serialin(priv, STM32_USART_CR1_OFFSET);
|
regval = up_serialin(priv, STM32_USART_CR1_OFFSET);
|
||||||
regval &= ~(USART_CR1_PCE|USART_CR1_PS);
|
regval &= ~(USART_CR1_PCE | USART_CR1_PS | USART_CR1_M);
|
||||||
|
|
||||||
if (priv->parity == 1) /* Odd parity */
|
if (priv->parity == 1) /* Odd parity */
|
||||||
{
|
{
|
||||||
@@ -1264,6 +1264,21 @@ static void up_set_format(struct uart_dev_s *dev)
|
|||||||
regval |= USART_CR1_PCE;
|
regval |= USART_CR1_PCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Configure word length (parity uses one of configured bits)
|
||||||
|
*
|
||||||
|
* Default: 1 start, 8 data (no parity), n stop, OR
|
||||||
|
* 1 start, 7 data + parity, n stop
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (priv->bits == 9 || (priv->bits == 8 && priv->parity != 0))
|
||||||
|
{
|
||||||
|
/* Select: 1 start, 8 data + parity, n stop, OR
|
||||||
|
* 1 start, 9 data (no parity), n stop.
|
||||||
|
*/
|
||||||
|
|
||||||
|
regval |= USART_CR1_M;
|
||||||
|
}
|
||||||
|
|
||||||
up_serialout(priv, STM32_USART_CR1_OFFSET, regval);
|
up_serialout(priv, STM32_USART_CR1_OFFSET, regval);
|
||||||
|
|
||||||
/* Configure STOP bits */
|
/* Configure STOP bits */
|
||||||
@@ -1457,17 +1472,10 @@ static int up_setup(struct uart_dev_s *dev)
|
|||||||
up_serialout(priv, STM32_USART_CR2_OFFSET, regval);
|
up_serialout(priv, STM32_USART_CR2_OFFSET, regval);
|
||||||
|
|
||||||
/* Configure CR1 */
|
/* Configure CR1 */
|
||||||
/* Clear M, TE, REm and all interrupt enable bits */
|
/* Clear TE, REm and all interrupt enable bits */
|
||||||
|
|
||||||
regval = up_serialin(priv, STM32_USART_CR1_OFFSET);
|
regval = up_serialin(priv, STM32_USART_CR1_OFFSET);
|
||||||
regval &= ~(USART_CR1_M|USART_CR1_TE|USART_CR1_RE|USART_CR1_ALLINTS);
|
regval &= ~(USART_CR1_TE | USART_CR1_RE | USART_CR1_ALLINTS);
|
||||||
|
|
||||||
/* Configure word length */
|
|
||||||
|
|
||||||
if (priv->bits == 9) /* Default: 1 start, 8 data, n stop */
|
|
||||||
{
|
|
||||||
regval |= USART_CR1_M; /* 1 start, 9 data, n stop */
|
|
||||||
}
|
|
||||||
|
|
||||||
up_serialout(priv, STM32_USART_CR1_OFFSET, regval);
|
up_serialout(priv, STM32_USART_CR1_OFFSET, regval);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user