mirror of https://github.com/ARMmbed/mbed-os.git
Add ability to use multiple UARTs on STM32L0, STM32G0 when IRQ is shared
parent
9bdbe9cb85
commit
8f9b1153ef
|
|
@ -19,32 +19,27 @@
|
|||
|
||||
#if defined (STM32G030xx) || defined (STM32G050xx)
|
||||
#define UART_NUM (2)
|
||||
#define USART_GROUP1_IRQn USART2_IRQn
|
||||
#elif defined (STM32G031xx) || defined (STM32G041xx) || defined (STM32G051xx) || defined (STM32G061xx)
|
||||
#define UART_NUM (3)
|
||||
#define USART_GROUP1_IRQn USART2_IRQn
|
||||
#define USART_GROUP2_IRQn LPUART1_IRQn
|
||||
#elif defined (STM32G070xx)
|
||||
#define UART_NUM (4)
|
||||
#define USART3_IRQn USART3_4_IRQn
|
||||
#define USART4_IRQn USART3_4_IRQn
|
||||
#define USART_GROUP1_IRQn USART2_IRQn
|
||||
#define USART_GROUP2_IRQn USART3_4_IRQn
|
||||
#elif defined (STM32G071xx) || defined (STM32G081xx)
|
||||
#define UART_NUM (5)
|
||||
#define USART3_IRQn USART3_4_LPUART1_IRQn
|
||||
#define USART4_IRQn USART3_4_LPUART1_IRQn
|
||||
#define LPUART1_IRQn USART3_4_LPUART1_IRQn
|
||||
#define USART_GROUP1_IRQn USART2_IRQn
|
||||
#define USART_GROUP2_IRQn USART3_4_LPUART1_IRQn
|
||||
#elif defined (STM32G0B0xx)
|
||||
#define UART_NUM (6)
|
||||
#define USART3_IRQn USART3_4_5_6_IRQn
|
||||
#define USART4_IRQn USART3_4_5_6_IRQn
|
||||
#define USART5_IRQn USART3_4_5_6_IRQn
|
||||
#define USART6_IRQn USART3_4_5_6_IRQn
|
||||
#define USART_GROUP1_IRQn USART2_IRQn
|
||||
#define USART_GROUP2_IRQn USART3_4_5_6_IRQn
|
||||
#elif defined (STM32G0B1xx) || defined (STM32G0C1xx)
|
||||
#define UART_NUM (8)
|
||||
#define USART2_IRQn USART2_LPUART2_IRQn
|
||||
#define USART3_IRQn USART3_4_5_6_LPUART1_IRQn
|
||||
#define USART4_IRQn USART3_4_5_6_LPUART1_IRQn
|
||||
#define USART5_IRQn USART3_4_5_6_LPUART1_IRQn
|
||||
#define USART6_IRQn USART3_4_5_6_LPUART1_IRQn
|
||||
#define LPUART1_IRQn USART3_4_5_6_LPUART1_IRQn
|
||||
#define LPUART2_IRQn USART2_LPUART2_IRQn
|
||||
#define USART_GROUP1_IRQn USART2_LPUART2_IRQn
|
||||
#define USART_GROUP2_IRQn USART3_4_5_6_LPUART1_IRQn
|
||||
#endif
|
||||
|
||||
uint32_t serial_irq_ids[UART_NUM] = {0};
|
||||
|
|
@ -93,52 +88,35 @@ static void uart1_irq(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(USART2_BASE)
|
||||
static void uart2_irq(void)
|
||||
#if defined (USART_GROUP1_IRQn)
|
||||
static void uart_group1_irq(void)
|
||||
{
|
||||
#if defined(USART2_BASE)
|
||||
uart_irq(UART_2);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(USART3_BASE)
|
||||
static void uart3_irq(void)
|
||||
{
|
||||
uart_irq(UART_3);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(USART4_BASE)
|
||||
static void uart4_irq(void)
|
||||
{
|
||||
uart_irq(UART_4);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(USART5_BASE)
|
||||
static void uart5_irq(void)
|
||||
{
|
||||
uart_irq(UART_5);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(USART6_BASE)
|
||||
static void uart6_irq(void)
|
||||
{
|
||||
uart_irq(UART_6);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(LPUART1_BASE)
|
||||
static void lpuart1_irq(void)
|
||||
{
|
||||
uart_irq(LPUART_1);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(LPUART2_BASE)
|
||||
static void lpuart2_irq(void)
|
||||
{
|
||||
#endif
|
||||
#if defined(LPUART2_BASE)
|
||||
uart_irq(LPUART_2);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(USART_GROUP2_IRQn)
|
||||
static void uart_group2_irq(void)
|
||||
{
|
||||
#if defined(USART3_BASE)
|
||||
uart_irq(UART_3);
|
||||
#endif
|
||||
#if defined(USART4_BASE)
|
||||
uart_irq(UART_4);
|
||||
#endif
|
||||
#if defined(USART5_BASE)
|
||||
uart_irq(UART_5);
|
||||
#endif
|
||||
#if defined(USART6_BASE)
|
||||
uart_irq(UART_6);
|
||||
#endif
|
||||
#if defined(LPUART1_BASE)
|
||||
uart_irq(LPUART_1);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -166,50 +144,50 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
|||
|
||||
#if defined(USART2_BASE)
|
||||
if (obj_s->uart == UART_2) {
|
||||
irq_n = USART2_IRQn;
|
||||
vector = (uint32_t)&uart2_irq;
|
||||
irq_n = USART_GROUP1_IRQn;
|
||||
vector = (uint32_t)&uart_group1_irq;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(USART3_BASE)
|
||||
if (obj_s->uart == UART_3) {
|
||||
irq_n = USART3_IRQn;
|
||||
vector = (uint32_t)&uart3_irq;
|
||||
irq_n = USART_GROUP2_IRQn;
|
||||
vector = (uint32_t)&uart_group2_irq;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(USART4_BASE)
|
||||
if (obj_s->uart == UART_4) {
|
||||
irq_n = USART4_IRQn;
|
||||
vector = (uint32_t)&uart4_irq;
|
||||
irq_n = USART_GROUP2_IRQn;
|
||||
vector = (uint32_t)&uart_group2_irq;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(USART5_BASE)
|
||||
if (obj_s->uart == UART_5) {
|
||||
irq_n = USART5_IRQn;
|
||||
vector = (uint32_t)&uart5_irq;
|
||||
irq_n = USART_GROUP2_IRQn;
|
||||
vector = (uint32_t)&uart_group2_irq;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(USART6_BASE)
|
||||
if (obj_s->uart == UART_6) {
|
||||
irq_n = USART6_IRQn;
|
||||
vector = (uint32_t)&uart6_irq;
|
||||
irq_n = USART_GROUP2_IRQn;
|
||||
vector = (uint32_t)&uart_group2_irq;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(LPUART1_BASE)
|
||||
if (obj_s->uart == LPUART_1) {
|
||||
irq_n = LPUART1_IRQn;
|
||||
vector = (uint32_t)&lpuart1_irq;
|
||||
irq_n = USART_GROUP2_IRQn;
|
||||
vector = (uint32_t)&uart_group2_irq;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(LPUART2_BASE)
|
||||
if (obj_s->uart == LPUART_2) {
|
||||
irq_n = LPUART2_IRQn;
|
||||
vector = (uint32_t)&lpuart2_irq;
|
||||
irq_n = USART2_LPUART2_IRQn;
|
||||
vector = (uint32_t)&uart_group1_irq;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -79,17 +79,15 @@ static void uart2_irq(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(USART4_BASE)
|
||||
static void uart4_irq(void)
|
||||
#if defined(USART4_BASE) || defined(USART5_BASE)
|
||||
static void uart4_5_irq(void)
|
||||
{
|
||||
#if defined(USART4_BASE)
|
||||
uart_irq(UART_4);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(USART5_BASE)
|
||||
static void uart5_irq(void)
|
||||
{
|
||||
#endif
|
||||
#if defined(USART4_BASE)
|
||||
uart_irq(UART_5);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -132,14 +130,14 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
|||
#if defined(USART4_BASE)
|
||||
if (obj_s->uart == UART_4) {
|
||||
irq_n = USART4_5_IRQn;
|
||||
vector = (uint32_t)&uart4_irq;
|
||||
vector = (uint32_t)&uart4_5_irq;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(USART5_BASE)
|
||||
if (obj_s->uart == UART_5) {
|
||||
irq_n = USART4_5_IRQn;
|
||||
vector = (uint32_t)&uart5_irq;
|
||||
vector = (uint32_t)&uart4_5_irq;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue