Skip to content

Commit bdec190

Browse files
committed
MAX32660, MAX32670 UART performance improvement
Signed-off-by: Sadik.Ozer <[email protected]>
1 parent 0eac033 commit bdec190

File tree

2 files changed

+94
-94
lines changed

2 files changed

+94
-94
lines changed

targets/TARGET_Maxim/TARGET_MAX32660/serial_api.c

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,35 @@ static serial_t *objs[MXC_UART_INSTANCES];
6767

6868
static void usurp_pin(PinName, int);
6969

70+
//******************************************************************************
71+
void uart_handler(serial_t *obj)
72+
{
73+
// clear interrupts
74+
volatile uint32_t flags = obj->uart->int_fl;
75+
76+
if (flags & UART_ER_IE) {
77+
// clear error flags
78+
obj->uart->int_fl = UART_ER_IE;
79+
}
80+
81+
if (flags & UART_RX_IE) {
82+
obj->uart->int_fl = UART_RX_IE;
83+
if (obj && irq_handler) {
84+
irq_handler(obj->id, RxIrq);
85+
}
86+
}
87+
88+
if (flags & UART_TX_IE) {
89+
obj->uart->int_fl = UART_TX_IE;
90+
if (obj && irq_handler) {
91+
irq_handler(obj->id, TxIrq);
92+
}
93+
}
94+
}
95+
96+
void uart0_handler(void) { uart_handler(objs[0]); }
97+
void uart1_handler(void) { uart_handler(objs[1]); }
98+
7099
//******************************************************************************
71100
void serial_init(serial_t *obj, PinName tx, PinName rx)
72101
{
@@ -106,6 +135,19 @@ void serial_init(serial_t *obj, PinName tx, PinName rx)
106135

107136
MXC_UART_Init (obj->uart, DEFAULT_BAUD, obj->map);
108137
//MBED_ASSERT(retval == E_NO_ERROR);
138+
139+
switch (obj->index) {
140+
case 0:
141+
NVIC_SetVector(UART0_IRQn, (uint32_t)uart0_handler);
142+
NVIC_EnableIRQ(UART0_IRQn);
143+
break;
144+
case 1:
145+
NVIC_SetVector(UART1_IRQn, (uint32_t)uart1_handler);
146+
NVIC_EnableIRQ(UART1_IRQn);
147+
break;
148+
}
149+
150+
return;
109151
}
110152

111153
void serial_free(serial_t *obj)
@@ -158,35 +200,6 @@ void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_b
158200
}
159201
}
160202

161-
//******************************************************************************
162-
void uart_handler(serial_t *obj)
163-
{
164-
// clear interrupts
165-
volatile uint32_t flags = obj->uart->int_fl;
166-
167-
if (flags & UART_ER_IE) {
168-
// clear error flags
169-
obj->uart->int_fl = UART_ER_IE;
170-
}
171-
172-
if (flags & UART_RX_IE) {
173-
obj->uart->int_fl = UART_RX_IE;
174-
if (obj && irq_handler) {
175-
irq_handler(obj->id, RxIrq);
176-
}
177-
}
178-
179-
if (flags & UART_TX_IE) {
180-
obj->uart->int_fl = UART_TX_IE;
181-
if (obj && irq_handler) {
182-
irq_handler(obj->id, TxIrq);
183-
}
184-
}
185-
}
186-
187-
void uart0_handler(void) { uart_handler(objs[0]); }
188-
void uart1_handler(void) { uart_handler(objs[1]); }
189-
190203
//******************************************************************************
191204
void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id)
192205
{
@@ -200,19 +213,6 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
200213
MBED_ASSERT(obj->index < MXC_UART_INSTANCES);
201214
objs[obj->index] = obj;
202215

203-
switch (obj->index) {
204-
case 0:
205-
NVIC_SetVector(UART0_IRQn, (uint32_t)uart0_handler);
206-
NVIC_EnableIRQ(UART0_IRQn);
207-
break;
208-
case 1:
209-
NVIC_SetVector(UART1_IRQn, (uint32_t)uart1_handler);
210-
NVIC_EnableIRQ(UART1_IRQn);
211-
break;
212-
default:
213-
MBED_ASSERT(0);
214-
}
215-
216216
// Set TX Almost Empty level to interrupt when empty
217217
obj->uart->ctrl1 = (MXC_F_UART_THRESH_CTRL_RX_FIFO_DEFAULT_THRESH_VAL | MXC_F_UART_THRESH_CTRL_TX_FIFO_DEFAULT_THRESH_VAL);
218218

targets/TARGET_Maxim/TARGET_MAX32670/serial_api.c

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,37 @@ static serial_t *objs[MXC_UART_INSTANCES];
6363

6464
static void usurp_pin(PinName, int);
6565

66+
//******************************************************************************
67+
void uart_handler(serial_t *obj)
68+
{
69+
// clear interrupts
70+
volatile uint32_t flags = obj->uart->int_fl;
71+
72+
if (flags & UART_ER_IE) {
73+
// clear error flags
74+
obj->uart->int_fl = UART_ER_IE;
75+
}
76+
77+
if (flags & UART_RX_IE) {
78+
obj->uart->int_fl = UART_RX_IE;
79+
if (obj && irq_handler) {
80+
irq_handler(obj->id, RxIrq);
81+
}
82+
}
83+
84+
if (flags & UART_TX_IE) {
85+
obj->uart->int_fl = UART_TX_IE;
86+
if (obj && irq_handler) {
87+
irq_handler(obj->id, TxIrq);
88+
}
89+
}
90+
}
91+
92+
void uart0_handler(void) { uart_handler(objs[0]); }
93+
void uart1_handler(void) { uart_handler(objs[1]); }
94+
void uart2_handler(void) { uart_handler(objs[2]); }
95+
void uart3_handler(void) { uart_handler(objs[3]); }
96+
6697
//******************************************************************************
6798
void serial_init(serial_t *obj, PinName tx, PinName rx)
6899
{
@@ -101,6 +132,27 @@ void serial_init(serial_t *obj, PinName tx, PinName rx)
101132

102133
MXC_UART_Init (obj->uart, DEFAULT_BAUD, MXC_UART_APB_CLK, obj->map);
103134
//MBED_ASSERT(retval == E_NO_ERROR);
135+
136+
switch (obj->index) {
137+
case 0:
138+
NVIC_SetVector(UART0_IRQn, (uint32_t)uart0_handler);
139+
NVIC_EnableIRQ(UART0_IRQn);
140+
break;
141+
case 1:
142+
NVIC_SetVector(UART1_IRQn, (uint32_t)uart1_handler);
143+
NVIC_EnableIRQ(UART1_IRQn);
144+
break;
145+
case 2:
146+
NVIC_SetVector(UART2_IRQn, (uint32_t)uart2_handler);
147+
NVIC_EnableIRQ(UART2_IRQn);
148+
break;
149+
case 3:
150+
NVIC_SetVector(UART3_IRQn, (uint32_t)uart3_handler);
151+
NVIC_EnableIRQ(UART3_IRQn);
152+
break;
153+
}
154+
155+
return;
104156
}
105157

106158
void serial_free(serial_t *obj)
@@ -153,37 +205,6 @@ void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_b
153205
}
154206
}
155207

156-
//******************************************************************************
157-
void uart_handler(serial_t *obj)
158-
{
159-
// clear interrupts
160-
volatile uint32_t flags = obj->uart->int_fl;
161-
162-
if (flags & UART_ER_IE) {
163-
// clear error flags
164-
obj->uart->int_fl = UART_ER_IE;
165-
}
166-
167-
if (flags & UART_RX_IE) {
168-
obj->uart->int_fl = UART_RX_IE;
169-
if (obj && irq_handler) {
170-
irq_handler(obj->id, RxIrq);
171-
}
172-
}
173-
174-
if (flags & UART_TX_IE) {
175-
obj->uart->int_fl = UART_TX_IE;
176-
if (obj && irq_handler) {
177-
irq_handler(obj->id, TxIrq);
178-
}
179-
}
180-
}
181-
182-
void uart0_handler(void) { uart_handler(objs[0]); }
183-
void uart1_handler(void) { uart_handler(objs[1]); }
184-
void uart2_handler(void) { uart_handler(objs[2]); }
185-
void uart3_handler(void) { uart_handler(objs[3]); }
186-
187208
//******************************************************************************
188209
void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id)
189210
{
@@ -197,27 +218,6 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
197218
MBED_ASSERT(obj->index < MXC_UART_INSTANCES);
198219
objs[obj->index] = obj;
199220

200-
switch (obj->index) {
201-
case 0:
202-
NVIC_SetVector(UART0_IRQn, (uint32_t)uart0_handler);
203-
NVIC_EnableIRQ(UART0_IRQn);
204-
break;
205-
case 1:
206-
NVIC_SetVector(UART1_IRQn, (uint32_t)uart1_handler);
207-
NVIC_EnableIRQ(UART1_IRQn);
208-
break;
209-
case 2:
210-
NVIC_SetVector(UART2_IRQn, (uint32_t)uart2_handler);
211-
NVIC_EnableIRQ(UART2_IRQn);
212-
break;
213-
case 3:
214-
NVIC_SetVector(UART3_IRQn, (uint32_t)uart3_handler);
215-
NVIC_EnableIRQ(UART3_IRQn);
216-
break;
217-
default:
218-
MBED_ASSERT(0);
219-
}
220-
221221
// Set TX Almost Empty level to interrupt when empty
222222
MXC_UART_SetRXThreshold(obj->uart, 1);
223223

0 commit comments

Comments
 (0)