mirror of https://github.com/ARMmbed/mbed-os.git
commit
0f8a06d818
|
@ -90,6 +90,10 @@ static void init_uart(serial_t *obj) {
|
||||||
UartHandle.Init.Mode = UART_MODE_TX_RX;
|
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);
|
HAL_UART_Init(&UartHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,7 +227,7 @@ static void uart_irq(UARTName name, int id) {
|
||||||
}
|
}
|
||||||
if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE) != RESET) {
|
if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], RxIrq);
|
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 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) {
|
||||||
if (irq == RxIrq) {
|
if (irq == RxIrq) {
|
||||||
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_RXNE);
|
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_RXNE);
|
||||||
// Check if TxIrq is disabled too
|
// 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
|
} else { // TxIrq
|
||||||
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TXE);
|
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TC);
|
||||||
// Check if RxIrq is disabled too
|
// Check if RxIrq is disabled too
|
||||||
if ((UartHandle.Instance->CR1 & USART_CR1_RXNEIE) == 0) all_disabled = 1;
|
if ((UartHandle.Instance->CR1 & USART_CR1_RXNEIE) == 0) all_disabled = 1;
|
||||||
}
|
}
|
||||||
|
@ -339,8 +343,8 @@ int serial_writable(serial_t *obj) {
|
||||||
|
|
||||||
void serial_clear(serial_t *obj) {
|
void serial_clear(serial_t *obj) {
|
||||||
UartHandle.Instance = (USART_TypeDef *)(obj->uart);
|
UartHandle.Instance = (USART_TypeDef *)(obj->uart);
|
||||||
__HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_TXE);
|
__HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_TC);
|
||||||
__HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_RXNE);
|
__HAL_UART_SEND_REQ(&UartHandle, UART_RXDATA_FLUSH_REQUEST);
|
||||||
}
|
}
|
||||||
|
|
||||||
void serial_pinout_tx(PinName tx) {
|
void serial_pinout_tx(PinName tx) {
|
||||||
|
|
|
@ -91,6 +91,10 @@ static void init_uart(serial_t *obj)
|
||||||
UartHandle.Init.Mode = UART_MODE_TX_RX;
|
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);
|
HAL_UART_Init(&UartHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,9 +223,7 @@ static void uart_irq(UARTName name, int id)
|
||||||
}
|
}
|
||||||
if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE) != RESET) {
|
if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], RxIrq);
|
irq_handler(serial_irq_ids[id], RxIrq);
|
||||||
// [TODO] Check which line works the best
|
volatile uint32_t tmpval = UartHandle.Instance->RDR; // Clear RXNE bit
|
||||||
__HAL_UART_SEND_REQ(&UartHandle, UART_RXDATA_FLUSH_REQUEST);
|
|
||||||
//__HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_RXNE);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -287,9 +289,9 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
||||||
if (irq == RxIrq) {
|
if (irq == RxIrq) {
|
||||||
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_RXNE);
|
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_RXNE);
|
||||||
// Check if TxIrq is disabled too
|
// 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
|
} else { // TxIrq
|
||||||
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TXE);
|
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TC);
|
||||||
// Check if RxIrq is disabled too
|
// Check if RxIrq is disabled too
|
||||||
if ((UartHandle.Instance->CR1 & USART_CR1_RXNEIE) == 0) all_disabled = 1;
|
if ((UartHandle.Instance->CR1 & USART_CR1_RXNEIE) == 0) all_disabled = 1;
|
||||||
}
|
}
|
||||||
|
@ -346,8 +348,8 @@ int serial_writable(serial_t *obj)
|
||||||
void serial_clear(serial_t *obj)
|
void serial_clear(serial_t *obj)
|
||||||
{
|
{
|
||||||
UartHandle.Instance = (USART_TypeDef *)(obj->uart);
|
UartHandle.Instance = (USART_TypeDef *)(obj->uart);
|
||||||
__HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_TXE);
|
__HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_TC);
|
||||||
__HAL_UART_CLEAR_IT(&UartHandle, UART_FLAG_RXNE);
|
__HAL_UART_SEND_REQ(&UartHandle, UART_RXDATA_FLUSH_REQUEST);
|
||||||
}
|
}
|
||||||
|
|
||||||
void serial_pinout_tx(PinName tx)
|
void serial_pinout_tx(PinName tx)
|
||||||
|
|
|
@ -91,6 +91,10 @@ static void init_uart(serial_t *obj) {
|
||||||
UartHandle.Init.Mode = UART_MODE_TX_RX;
|
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);
|
HAL_UART_Init(&UartHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,7 +221,7 @@ static void uart_irq(UARTName name, int id) {
|
||||||
}
|
}
|
||||||
if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE) != RESET) {
|
if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE) != RESET) {
|
||||||
irq_handler(serial_irq_ids[id], RxIrq);
|
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 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) {
|
||||||
if (irq == RxIrq) {
|
if (irq == RxIrq) {
|
||||||
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_RXNE);
|
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_RXNE);
|
||||||
// Check if TxIrq is disabled too
|
// 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
|
} else { // TxIrq
|
||||||
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TXE);
|
__HAL_UART_DISABLE_IT(&UartHandle, UART_IT_TC);
|
||||||
// Check if RxIrq is disabled too
|
// Check if RxIrq is disabled too
|
||||||
if ((UartHandle.Instance->CR1 & USART_CR1_RXNEIE) == 0) all_disabled = 1;
|
if ((UartHandle.Instance->CR1 & USART_CR1_RXNEIE) == 0) all_disabled = 1;
|
||||||
}
|
}
|
||||||
|
@ -297,13 +301,13 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) {
|
||||||
int serial_getc(serial_t *obj) {
|
int serial_getc(serial_t *obj) {
|
||||||
USART_TypeDef *uart = (USART_TypeDef *)(obj->uart);
|
USART_TypeDef *uart = (USART_TypeDef *)(obj->uart);
|
||||||
while (!serial_readable(obj));
|
while (!serial_readable(obj));
|
||||||
return (int)(uart->RDR & 0xFF);
|
return (int)(uart->RDR & (uint32_t)0xFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
void serial_putc(serial_t *obj, int c) {
|
void serial_putc(serial_t *obj, int c) {
|
||||||
USART_TypeDef *uart = (USART_TypeDef *)(obj->uart);
|
USART_TypeDef *uart = (USART_TypeDef *)(obj->uart);
|
||||||
while (!serial_writable(obj));
|
while (!serial_writable(obj));
|
||||||
uart->TDR = (uint16_t)(c & 0xFF);
|
uart->TDR = (uint32_t)(c & (uint32_t)0xFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
int serial_readable(serial_t *obj) {
|
int serial_readable(serial_t *obj) {
|
||||||
|
|
Loading…
Reference in New Issue