aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2016-06-16 11:56:43 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2016-06-16 11:56:43 +0000
commit7e6efe12f09270d9441f0d7129c41ec9536c4c2a (patch)
tree56ea29ac9f1383f360b550d1788f086eb679d5d5 /os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c
parent6ec0150086ee3aab792ced643e0b7b5dc237f6f1 (diff)
downloadChibiOS-7e6efe12f09270d9441f0d7129c41ec9536c4c2a.tar.gz
ChibiOS-7e6efe12f09270d9441f0d7129c41ec9536c4c2a.tar.bz2
ChibiOS-7e6efe12f09270d9441f0d7129c41ec9536c4c2a.zip
Priority bit masking in STM32 serial drivers.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9632 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c')
-rw-r--r--os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c b/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c
index a4f64c7eb..bc4be0edd 100644
--- a/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c
+++ b/os/hal/ports/STM32/LLD/USARTv1/hal_serial_lld.c
@@ -120,6 +120,15 @@ static void usart_init(SerialDriver *sdp, const SerialConfig *config) {
u->SR = 0;
(void)u->SR; /* SR reset step 1.*/
(void)u->DR; /* SR reset step 2.*/
+
+ /* Deciding mask to be applied on the data register on receive, this is
+ required in order to mask out the parity bit.*/
+ if ((config->cr1 & (USART_CR1_M | USART_CR1_PCE)) == USART_CR1_PCE) {
+ sdp->rxmask = 0x7F;
+ }
+ else {
+ sdp->rxmask = 0xFF;
+ }
}
/**
@@ -182,7 +191,7 @@ static void serve_interrupt(SerialDriver *sdp) {
/* Error condition detection.*/
if (sr & (USART_SR_ORE | USART_SR_NE | USART_SR_FE | USART_SR_PE))
set_error(sdp, sr);
- b = u->DR;
+ b = (uint8_t)u->DR & sdp->rxmask;
if (sr & USART_SR_RXNE)
sdIncomingDataI(sdp, b);
sr = u->SR;