Skip to content

Commit 39f2869

Browse files
committed
cmsis_uart: generic DAPLink adapter to CMSIS UART drivers
From lpc55xx HIC
1 parent 9f83e78 commit 39f2869

File tree

3 files changed

+29
-28
lines changed

3 files changed

+29
-28
lines changed

records/hic_hal/lpc55s69.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ common:
1717
- source/hic_hal/nxp/lpc55xx
1818
- source/hic_hal/nxp/lpc55xx/LPC55S69
1919
- source/hic_hal/nxp/lpc55xx/LPC55S69/drivers
20+
- source/hic_hal/cmsis-driver/uart
2021

2122
tool_specific:
2223
uvision:

source/hic_hal/nxp/lpc55xx/uart.c renamed to source/hic_hal/cmsis-driver/uart/uart.c

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,13 @@
2020
*/
2121

2222
#include "string.h"
23-
#include "fsl_device_registers.h"
24-
#include "fsl_usart_cmsis.h"
2523
#include "uart.h"
2624
#include "util.h"
2725
#include "cortex_m.h"
2826
#include "circ_buf.h"
2927
#include "settings.h" // for config_get_overflow_detect
30-
31-
#define USART_INSTANCE (Driver_USART0)
32-
#define USART_IRQ (FLEXCOMM0_IRQn)
33-
34-
extern uint32_t SystemCoreClock;
28+
#include "Driver_USART.h"
29+
#include "IO_Config.h"
3530

3631
static void clear_buffers(void);
3732

@@ -64,18 +59,18 @@ int32_t uart_initialize(void)
6459
{
6560
clear_buffers();
6661
cb_buf.tx_size = 0;
67-
USART_INSTANCE.Initialize(uart_handler);
68-
USART_INSTANCE.PowerControl(ARM_POWER_FULL);
62+
CMSIS_UART_INSTANCE.Initialize(uart_handler);
63+
CMSIS_UART_INSTANCE.PowerControl(ARM_POWER_FULL);
6964

7065
return 1;
7166
}
7267

7368
int32_t uart_uninitialize(void)
7469
{
75-
USART_INSTANCE.Control(ARM_USART_CONTROL_RX, 0);
76-
USART_INSTANCE.Control(ARM_USART_ABORT_RECEIVE, 0U);
77-
USART_INSTANCE.PowerControl(ARM_POWER_OFF);
78-
USART_INSTANCE.Uninitialize();
70+
CMSIS_UART_INSTANCE.Control(ARM_USART_CONTROL_RX, 0);
71+
CMSIS_UART_INSTANCE.Control(ARM_USART_ABORT_RECEIVE, 0U);
72+
CMSIS_UART_INSTANCE.PowerControl(ARM_POWER_OFF);
73+
CMSIS_UART_INSTANCE.Uninitialize();
7974
clear_buffers();
8075
cb_buf.tx_size = 0;
8176

@@ -85,14 +80,14 @@ int32_t uart_uninitialize(void)
8580
int32_t uart_reset(void)
8681
{
8782
// disable interrupt
88-
NVIC_DisableIRQ(USART_IRQ);
83+
NVIC_DisableIRQ(CMSIS_UART_IRQ);
8984
clear_buffers();
9085
if (cb_buf.tx_size != 0) {
91-
USART_INSTANCE.Control(ARM_USART_ABORT_SEND, 0U);
86+
CMSIS_UART_INSTANCE.Control(ARM_USART_ABORT_SEND, 0U);
9287
cb_buf.tx_size = 0;
9388
}
9489
// enable interrupt
95-
NVIC_EnableIRQ(USART_IRQ);
90+
NVIC_EnableIRQ(CMSIS_UART_IRQ);
9691

9792
return 1;
9893
}
@@ -161,27 +156,27 @@ int32_t uart_set_configuration(UART_Configuration *config)
161156
break;
162157
}
163158

164-
NVIC_DisableIRQ(USART_IRQ);
159+
NVIC_DisableIRQ(CMSIS_UART_IRQ);
165160
clear_buffers();
166161
if (cb_buf.tx_size != 0) {
167-
USART_INSTANCE.Control(ARM_USART_ABORT_SEND, 0U);
162+
CMSIS_UART_INSTANCE.Control(ARM_USART_ABORT_SEND, 0U);
168163
cb_buf.tx_size = 0;
169164
}
170165

171166
// If there was no Receive() call in progress aborting it is harmless.
172-
USART_INSTANCE.Control(ARM_USART_CONTROL_RX, 0U);
173-
USART_INSTANCE.Control(ARM_USART_ABORT_RECEIVE, 0U);
167+
CMSIS_UART_INSTANCE.Control(ARM_USART_CONTROL_RX, 0U);
168+
CMSIS_UART_INSTANCE.Control(ARM_USART_ABORT_RECEIVE, 0U);
174169

175-
uint32_t r = USART_INSTANCE.Control(control, config->Baudrate);
170+
uint32_t r = CMSIS_UART_INSTANCE.Control(control, config->Baudrate);
176171
if (r != ARM_DRIVER_OK) {
177172
return 0;
178173
}
179-
USART_INSTANCE.Control(ARM_USART_CONTROL_TX, 1);
180-
USART_INSTANCE.Control(ARM_USART_CONTROL_RX, 1);
181-
USART_INSTANCE.Receive(&(cb_buf.rx), 1);
174+
CMSIS_UART_INSTANCE.Control(ARM_USART_CONTROL_TX, 1);
175+
CMSIS_UART_INSTANCE.Control(ARM_USART_CONTROL_RX, 1);
176+
CMSIS_UART_INSTANCE.Receive(&(cb_buf.rx), 1);
182177

183-
NVIC_ClearPendingIRQ(USART_IRQ);
184-
NVIC_EnableIRQ(USART_IRQ);
178+
NVIC_ClearPendingIRQ(CMSIS_UART_IRQ);
179+
NVIC_EnableIRQ(CMSIS_UART_IRQ);
185180

186181
return 1;
187182
}
@@ -215,7 +210,7 @@ static void uart_start_tx_transfer() {
215210
}
216211
cb_buf.tx_size = tx_size;
217212
if (tx_size) {
218-
USART_INSTANCE.Send(buf, tx_size);
213+
CMSIS_UART_INSTANCE.Send(buf, tx_size);
219214
}
220215
}
221216

@@ -254,7 +249,7 @@ void uart_handler(uint32_t event) {
254249
} else {
255250
// Drop character
256251
}
257-
USART_INSTANCE.Receive(&(cb_buf.rx), 1);
252+
CMSIS_UART_INSTANCE.Receive(&(cb_buf.rx), 1);
258253
}
259254

260255
if (event & ARM_USART_EVENT_SEND_COMPLETE) {

source/hic_hal/nxp/lpc55xx/IO_Config.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@ COMPILER_ASSERT(DAPLINK_HIC_ID == DAPLINK_HIC_ID_LPC55XX);
107107
#define PIN_UART_TX (25U)
108108
#define PIN_UART_TX_MASK (1U << PIN_UART_TX)
109109

110+
// cmsis-driver/uart/uart.c configuration
111+
#include "fsl_usart_cmsis.h"
112+
#define CMSIS_UART_INSTANCE (Driver_USART0)
113+
#define CMSIS_UART_IRQ (FLEXCOMM0_IRQn)
114+
110115

111116
// Debug Unit LEDs
112117

0 commit comments

Comments
 (0)