STM32F0: fix usart irq management

pull/5954/head
bcostm 2018-01-23 15:18:14 +01:00 committed by Cruz Monrreal II‰
parent f047a93066
commit d5523167bf
1 changed files with 71 additions and 70 deletions

View File

@ -87,47 +87,46 @@ static void uart2_irq(void)
} }
#endif #endif
#if defined USART3_BASE // Used for both USART3_4_IRQn and USART3_8_IRQn
static void uart3_irq(void) static void uart3_8_irq(void)
{ {
uart_irq(2); #if defined(USART3_BASE)
} if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART3) != RESET)
{
uart_irq(2);
}
#endif #endif
#if defined(USART4_BASE)
#if defined USART4_BASE if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART4) != RESET)
static void uart4_irq(void) {
{ uart_irq(3);
uart_irq(3); }
}
#endif #endif
#if defined(USART5_BASE)
#if defined USART5_BASE if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART5) != RESET)
static void uart5_irq(void) {
{ uart_irq(4);
uart_irq(4); }
}
#endif #endif
#if defined(USART6_BASE)
#if defined USART6_BASE if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART6) != RESET)
static void uart6_irq(void) {
{ uart_irq(5);
uart_irq(5); }
}
#endif #endif
#if defined(USART7_BASE)
#if defined USART7_BASE if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART7) != RESET)
static void uart7_irq(void) {
{ uart_irq(6);
uart_irq(6); }
}
#endif #endif
#if defined(USART8_BASE)
#if defined USART8_BASE if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART8) != RESET)
static void uart8_irq(void) {
{ uart_irq(7);
uart_irq(7); }
}
#endif #endif
}
void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id)
{ {
@ -156,53 +155,55 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
} }
#endif #endif
#if defined (TARGET_STM32F091RC)
if (obj_s->uart == UART_3) {
irq_n = USART3_8_IRQn;
vector = (uint32_t)&uart3_irq;
}
if (obj_s->uart == UART_4) {
irq_n = USART3_8_IRQn;
vector = (uint32_t)&uart4_irq;
}
if (obj_s->uart == UART_5) {
irq_n = USART3_8_IRQn;
vector = (uint32_t)&uart5_irq;
}
if (obj_s->uart == UART_6) {
irq_n = USART3_8_IRQn;
vector = (uint32_t)&uart6_irq;
}
if (obj_s->uart == UART_7) {
irq_n = USART3_8_IRQn;
vector = (uint32_t)&uart7_irq;
}
if (obj_s->uart == UART_8) {
irq_n = USART3_8_IRQn;
vector = (uint32_t)&uart8_irq;
}
#elif defined (TARGET_STM32F030R8) || defined (TARGET_STM32F051R8)
#else
#if defined(USART3_BASE) #if defined(USART3_BASE)
if (obj_s->uart == UART_3) { if (obj_s->uart == UART_3) {
#if defined(TARGET_STM32F091RC)
irq_n = USART3_8_IRQn;
#else
irq_n = USART3_4_IRQn; irq_n = USART3_4_IRQn;
vector = (uint32_t)&uart3_irq; #endif
vector = (uint32_t)&uart3_8_irq;
} }
#endif #endif
#if defined(USART4_BASE) #if defined(USART4_BASE)
if (obj_s->uart == UART_4) { if (obj_s->uart == UART_4) {
#if defined(TARGET_STM32F091RC)
irq_n = USART3_8_IRQn;
#else
irq_n = USART3_4_IRQn; irq_n = USART3_4_IRQn;
vector = (uint32_t)&uart4_irq; #endif
vector = (uint32_t)&uart3_8_irq;
} }
#endif #endif
// Below usart are available only on TARGET_STM32F091RC
#if defined(USART5_BASE)
if (obj_s->uart == UART_5) {
irq_n = USART3_8_IRQn;
vector = (uint32_t)&uart3_8_irq;
}
#endif
#if defined(USART6_BASE)
if (obj_s->uart == UART_6) {
irq_n = USART3_8_IRQn;
vector = (uint32_t)&uart3_8_irq;
}
#endif
#if defined(USART7_BASE)
if (obj_s->uart == UART_7) {
irq_n = USART3_8_IRQn;
vector = (uint32_t)&uart3_8_irq;
}
#endif
#if defined(USART8_BASE)
if (obj_s->uart == UART_8) {
irq_n = USART3_8_IRQn;
vector = (uint32_t)&uart3_8_irq;
}
#endif #endif
if (enable) { if (enable) {