MCUXpresso_LPC55S69/components/serial_mwm/serial_mwm_usart.c

114 lines
2.9 KiB
C

/*
* Copyright 2019-2021 NXP
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
/*******************************************************************************
* Includes
******************************************************************************/
#include "board.h"
#include "fsl_usart_freertos.h"
/*******************************************************************************
* Definitions
******************************************************************************/
#define SERIAL_MWM_PORT_NVIC_PRIO 5
/* Ring buffer size */
#define RING_BUFFER_SIZE 2048
/*******************************************************************************
* Prototypes
******************************************************************************/
/*******************************************************************************
* Variables
******************************************************************************/
static uint8_t s_background_buffer[RING_BUFFER_SIZE];
static usart_rtos_handle_t s_handle;
static usart_handle_t s_t_handle;
static struct rtos_usart_config s_usart_config = {
.baudrate = 115200,
.parity = kUSART_ParityDisabled,
.stopbits = kUSART_OneStopBit,
.buffer = s_background_buffer,
.buffer_size = sizeof(s_background_buffer),
};
/*******************************************************************************
* Code
******************************************************************************/
int mwm_rx(uint8_t *read_buf, uint32_t len)
{
if ((read_buf == NULL) || (len == 0u))
{
return -1;
}
int error;
size_t n = 0;
error = USART_RTOS_Receive(&s_handle, (uint8_t *)read_buf, len, &n);
if (error == kStatus_Success)
{
return 0;
}
return -1;
}
int mwm_tx(uint8_t *write_buf, uint32_t len)
{
if ((write_buf == NULL) || (len == 0u))
{
return -1;
}
int error;
error = USART_RTOS_Send(&s_handle, (uint8_t *)write_buf, len);
if (error == kStatus_Success)
{
return 0;
}
return -1;
}
int mwm_port_init(void)
{
#if defined(BOARD_SERIAL_MWM_PORT) && defined(BOARD_SERIAL_MWM_PORT_CLK_FREQ) && defined(BOARD_SERIAL_MWM_PORT_IRQn)
s_usart_config.srcclk = BOARD_SERIAL_MWM_PORT_CLK_FREQ;
s_usart_config.base = BOARD_SERIAL_MWM_PORT;
NVIC_SetPriority(BOARD_SERIAL_MWM_PORT_IRQn, SERIAL_MWM_PORT_NVIC_PRIO);
#else
/*
* Example of USART settings:
* #define BOARD_SERIAL_MWM_PORT_CLK_FREQ CLOCK_GetFlexCommClkFreq(2)
* #define BOARD_SERIAL_MWM_PORT USART2
* #define BOARD_SERIAL_MWM_PORT_IRQn FLEXCOMM2_IRQn
*/
#warning "Define BOARD_SERIAL_MWM_PORT, BOARD_SERIAL_MWM_PORT_CLK_FREQ, BOARD_SERIAL_MWM_PORT_IRQn in board.h"
#endif
if (0 > USART_RTOS_Init(&s_handle, &s_t_handle, &s_usart_config))
{
return -1;
}
return 0;
}
int mwm_port_deinit(void)
{
if (0 > USART_RTOS_Deinit(&s_handle))
{
return -1;
}
return 0;
}