mbed library sources modified for open wear
Dependents: openwear-lifelogger-example
Fork of mbed-src by
Revision 294:2a9cf2ed1474, committed 2014-08-21
- Comitter:
- mbed_official
- Date:
- Thu Aug 21 10:45:06 2014 +0100
- Parent:
- 293:e8c83abeb68f
- Child:
- 295:78f9587bb26d
- Commit message:
- Synchronized with git revision 0f8a06d8186efc5ba0f63d93600e113de217fb45
Full URL: https://github.com/mbedmicro/mbed/commit/0f8a06d8186efc5ba0f63d93600e113de217fb45/
[NUCLEOs] Improvement of Serial hal
Changed in this revision
--- a/targets/hal/TARGET_STM/TARGET_NUCLEO_F072RB/serial_api.c Thu Aug 21 08:00:07 2014 +0100 +++ b/targets/hal/TARGET_STM/TARGET_NUCLEO_F072RB/serial_api.c Thu Aug 21 10:45:06 2014 +0100 @@ -90,6 +90,10 @@ UartHandle.Init.Mode = UART_MODE_TX_RX; } + // Disable the reception overrun detection + UartHandle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT; + UartHandle.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE; + HAL_UART_Init(&UartHandle); } @@ -223,7 +227,7 @@ } if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE) != RESET) { irq_handler(serial_irq_ids[id], RxIrq); - __HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_RXNE); + volatile uint32_t tmpval = UartHandle.Instance->RDR; // Clear RXNE bit } } } @@ -293,9 +297,9 @@ if (irq == RxIrq) { __HAL_UART_DISABLE_IT(&UartHandle, UART_IT_RXNE); // Check if TxIrq is disabled too - if ((UartHandle.Instance->CR1 & USART_CR1_TXEIE) == 0) all_disabled = 1; + if ((UartHandle.Instance->CR1 & USART_CR1_TCIE) == 0) all_disabled = 1; } else { // TxIrq - __HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TXE); + __HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TC); // Check if RxIrq is disabled too if ((UartHandle.Instance->CR1 & USART_CR1_RXNEIE) == 0) all_disabled = 1; } @@ -339,8 +343,8 @@ void serial_clear(serial_t *obj) { UartHandle.Instance = (USART_TypeDef *)(obj->uart); - __HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_TXE); - __HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_RXNE); + __HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_TC); + __HAL_UART_SEND_REQ(&UartHandle, UART_RXDATA_FLUSH_REQUEST); } void serial_pinout_tx(PinName tx) {
--- a/targets/hal/TARGET_STM/TARGET_NUCLEO_F334R8/serial_api.c Thu Aug 21 08:00:07 2014 +0100 +++ b/targets/hal/TARGET_STM/TARGET_NUCLEO_F334R8/serial_api.c Thu Aug 21 10:45:06 2014 +0100 @@ -91,6 +91,10 @@ UartHandle.Init.Mode = UART_MODE_TX_RX; } + // Disable the reception overrun detection + UartHandle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT; + UartHandle.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE; + HAL_UART_Init(&UartHandle); } @@ -219,9 +223,7 @@ } if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE) != RESET) { irq_handler(serial_irq_ids[id], RxIrq); - // [TODO] Check which line works the best - __HAL_UART_SEND_REQ(&UartHandle, UART_RXDATA_FLUSH_REQUEST); - //__HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_RXNE); + volatile uint32_t tmpval = UartHandle.Instance->RDR; // Clear RXNE bit } } } @@ -287,9 +289,9 @@ if (irq == RxIrq) { __HAL_UART_DISABLE_IT(&UartHandle, UART_IT_RXNE); // Check if TxIrq is disabled too - if ((UartHandle.Instance->CR1 & USART_CR1_TXEIE) == 0) all_disabled = 1; + if ((UartHandle.Instance->CR1 & USART_CR1_TCIE) == 0) all_disabled = 1; } else { // TxIrq - __HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TXE); + __HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TC); // Check if RxIrq is disabled too if ((UartHandle.Instance->CR1 & USART_CR1_RXNEIE) == 0) all_disabled = 1; } @@ -346,8 +348,8 @@ void serial_clear(serial_t *obj) { UartHandle.Instance = (USART_TypeDef *)(obj->uart); - __HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_TXE); - __HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_RXNE); + __HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_TC); + __HAL_UART_SEND_REQ(&UartHandle, UART_RXDATA_FLUSH_REQUEST); } void serial_pinout_tx(PinName tx)
--- a/targets/hal/TARGET_STM/TARGET_NUCLEO_L053R8/serial_api.c Thu Aug 21 08:00:07 2014 +0100 +++ b/targets/hal/TARGET_STM/TARGET_NUCLEO_L053R8/serial_api.c Thu Aug 21 10:45:06 2014 +0100 @@ -91,6 +91,10 @@ UartHandle.Init.Mode = UART_MODE_TX_RX; } + // Disable the reception overrun detection + UartHandle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT; + UartHandle.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE; + HAL_UART_Init(&UartHandle); } @@ -217,7 +221,7 @@ } if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE) != RESET) { irq_handler(serial_irq_ids[id], RxIrq); - __HAL_UART_SEND_REQ(&UartHandle, UART_RXDATA_FLUSH_REQUEST); + volatile uint32_t tmpval = UartHandle.Instance->RDR; // Clear RXNE bit } } } @@ -278,9 +282,9 @@ if (irq == RxIrq) { __HAL_UART_DISABLE_IT(&UartHandle, UART_IT_RXNE); // Check if TxIrq is disabled too - if ((UartHandle.Instance->CR1 & USART_CR1_TXEIE) == 0) all_disabled = 1; + if ((UartHandle.Instance->CR1 & USART_CR1_TCIE) == 0) all_disabled = 1; } else { // TxIrq - __HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TXE); + __HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TC); // Check if RxIrq is disabled too if ((UartHandle.Instance->CR1 & USART_CR1_RXNEIE) == 0) all_disabled = 1; } @@ -297,13 +301,13 @@ int serial_getc(serial_t *obj) { USART_TypeDef *uart = (USART_TypeDef *)(obj->uart); while (!serial_readable(obj)); - return (int)(uart->RDR & 0xFF); + return (int)(uart->RDR & (uint32_t)0xFF); } void serial_putc(serial_t *obj, int c) { USART_TypeDef *uart = (USART_TypeDef *)(obj->uart); while (!serial_writable(obj)); - uart->TDR = (uint16_t)(c & 0xFF); + uart->TDR = (uint32_t)(c & (uint32_t)0xFF); } int serial_readable(serial_t *obj) {