@@ -51,28 +51,34 @@ static uart_irq_handler irq_handler;
51
51
* INTERRUPTS HANDLING
52
52
******************************************************************************/
53
53
54
- static void uart_irq (int id )
54
+ static uint32_t uart_irq (int id )
55
55
{
56
56
UART_HandleTypeDef * huart = & uart_handlers [id ];
57
-
57
+ uint32_t status = 0 ;
58
+
58
59
if (serial_irq_ids [id ] != 0 ) {
59
60
if (__HAL_UART_GET_FLAG (huart , UART_FLAG_TXE ) != RESET ) {
60
61
if (__HAL_UART_GET_IT (huart , UART_IT_TXE ) != RESET ) {
61
62
irq_handler (serial_irq_ids [id ], TxIrq );
63
+ status = 1 ;
62
64
}
63
65
}
64
66
if (__HAL_UART_GET_FLAG (huart , UART_FLAG_RXNE ) != RESET ) {
65
67
if (__HAL_UART_GET_IT (huart , UART_IT_RXNE ) != RESET ) {
66
68
irq_handler (serial_irq_ids [id ], RxIrq );
67
69
/* Flag has been cleared when reading the content */
70
+ status = 1 ;
68
71
}
69
72
}
70
73
if (__HAL_UART_GET_FLAG (huart , UART_FLAG_ORE ) != RESET ) {
71
74
if (__HAL_UART_GET_IT (huart , UART_IT_ORE ) != RESET ) {
72
75
__HAL_UART_CLEAR_FLAG (huart , UART_CLEAR_OREF );
76
+ status = 1 ;
73
77
}
74
78
}
75
79
}
80
+
81
+ return status ;
76
82
}
77
83
78
84
static void uart1_irq (void )
@@ -90,42 +96,42 @@ static void uart2_irq(void)
90
96
// Used for both USART3_4_IRQn and USART3_8_IRQn
91
97
static void uart3_8_irq (void )
92
98
{
99
+ #if defined(TARGET_STM32F091RC )
93
100
#if defined(USART3_BASE )
94
- if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART3 ) != RESET )
95
- {
101
+ if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART3 ) != RESET ) {
96
102
uart_irq (2 );
97
103
}
98
104
#endif
99
105
#if defined(USART4_BASE )
100
- if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART4 ) != RESET )
101
- {
106
+ if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART4 ) != RESET ) {
102
107
uart_irq (3 );
103
108
}
104
109
#endif
105
110
#if defined(USART5_BASE )
106
- if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART5 ) != RESET )
107
- {
111
+ if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART5 ) != RESET ) {
108
112
uart_irq (4 );
109
113
}
110
114
#endif
111
115
#if defined(USART6_BASE )
112
- if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART6 ) != RESET )
113
- {
116
+ if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART6 ) != RESET ) {
114
117
uart_irq (5 );
115
118
}
116
119
#endif
117
120
#if defined(USART7_BASE )
118
- if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART7 ) != RESET )
119
- {
121
+ if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART7 ) != RESET ) {
120
122
uart_irq (6 );
121
123
}
122
124
#endif
123
125
#if defined(USART8_BASE )
124
- if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART8 ) != RESET )
125
- {
126
+ if (__HAL_GET_PENDING_IT (HAL_ITLINE_USART8 ) != RESET ) {
126
127
uart_irq (7 );
127
128
}
128
129
#endif
130
+ #else // TARGET_STM32F070RB, TARGET_STM32F072RB
131
+ if (uart_irq (2 ) == 0 ) { // Check if it's USART3
132
+ uart_irq (3 ); // Otherwise it's USART4
133
+ }
134
+ #endif
129
135
}
130
136
131
137
void serial_irq_handler (serial_t * obj , uart_irq_handler handler , uint32_t id )
0 commit comments