131 lines
3.3 KiB
C
131 lines
3.3 KiB
C
#include "tos_k.h"
|
|
#include "tos_hal.h"
|
|
#include "fsl_lpuart.h"
|
|
|
|
/* Definition of the clock source frequency */
|
|
#define LPUART_CLOCK_SOURCE 80000000UL
|
|
|
|
__API__ int tos_hal_uart_init(hal_uart_t *uart, hal_uart_port_t port)
|
|
{
|
|
status_t status;
|
|
lpuart_config_t config;
|
|
|
|
if (!uart) {
|
|
return -1;
|
|
}
|
|
|
|
if (port == HAL_UART_PORT_0) {
|
|
// not support.
|
|
return -1;
|
|
} else if (port == HAL_UART_PORT_1) {
|
|
uart->private_uart = LPUART1;
|
|
|
|
LPUART_GetDefaultConfig(&config);
|
|
config.baudRate_Bps = 115200;
|
|
config.enableTx = true;
|
|
config.enableRx = true;
|
|
status = LPUART_Init(LPUART1, &config, LPUART_CLOCK_SOURCE);
|
|
if (status != kStatus_Success) {
|
|
return -1;
|
|
}
|
|
|
|
/* Enable RX interrupt. */
|
|
LPUART_EnableInterrupts(LPUART1, kLPUART_RxDataRegFullInterruptEnable);
|
|
EnableIRQ(LPUART1_IRQn);
|
|
} else if (port == HAL_UART_PORT_2) {
|
|
uart->private_uart = LPUART2;
|
|
|
|
LPUART_GetDefaultConfig(&config);
|
|
config.baudRate_Bps = 115200;
|
|
config.enableTx = true;
|
|
config.enableRx = true;
|
|
status = LPUART_Init(LPUART2, &config, LPUART_CLOCK_SOURCE);
|
|
if (status != kStatus_Success) {
|
|
return -1;
|
|
}
|
|
|
|
/* Enable RX interrupt. */
|
|
LPUART_EnableInterrupts(LPUART2, kLPUART_RxDataRegFullInterruptEnable);
|
|
EnableIRQ(LPUART2_IRQn);
|
|
} else if (port == HAL_UART_PORT_3) {
|
|
uart->private_uart = LPUART3;
|
|
|
|
LPUART_GetDefaultConfig(&config);
|
|
config.baudRate_Bps = 115200;
|
|
config.enableTx = true;
|
|
config.enableRx = true;
|
|
status = LPUART_Init(LPUART3, &config, LPUART_CLOCK_SOURCE);
|
|
if (status != kStatus_Success) {
|
|
return -1;
|
|
}
|
|
|
|
/* Enable RX interrupt. */
|
|
LPUART_EnableInterrupts(LPUART3, kLPUART_RxDataRegFullInterruptEnable);
|
|
EnableIRQ(LPUART3_IRQn);
|
|
} else if (port == HAL_UART_PORT_4) {
|
|
uart->private_uart = LPUART4;
|
|
|
|
LPUART_GetDefaultConfig(&config);
|
|
config.baudRate_Bps = 115200;
|
|
config.enableTx = true;
|
|
config.enableRx = true;
|
|
status = LPUART_Init(LPUART4, &config, LPUART_CLOCK_SOURCE);
|
|
if (status != kStatus_Success) {
|
|
return -1;
|
|
}
|
|
|
|
/* Enable RX interrupt. */
|
|
LPUART_EnableInterrupts(LPUART4, kLPUART_RxDataRegFullInterruptEnable);
|
|
EnableIRQ(LPUART4_IRQn);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
__API__ int tos_hal_uart_write(hal_uart_t *uart, const uint8_t *buf, size_t size, uint32_t timeout)
|
|
{
|
|
status_t status;
|
|
LPUART_Type *base;
|
|
|
|
if (!uart || !buf) {
|
|
return -1;
|
|
}
|
|
|
|
if (!uart->private_uart) {
|
|
return -1;
|
|
}
|
|
|
|
base = (LPUART_Type *)uart->private_uart;
|
|
|
|
status = LPUART_WriteBlocking(base, (uint8_t *)buf, size);
|
|
if (status != kStatus_Success) {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
__API__ int tos_hal_uart_read(hal_uart_t *uart, const uint8_t *buf, size_t size, uint32_t timeout)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
__API__ int tos_hal_uart_deinit(hal_uart_t *uart)
|
|
{
|
|
LPUART_Type *base;
|
|
|
|
if (!uart) {
|
|
return -1;
|
|
}
|
|
|
|
if (!uart->private_uart) {
|
|
return -1;
|
|
}
|
|
|
|
base = (LPUART_Type *)uart->private_uart;
|
|
|
|
LPUART_Deinit(base);
|
|
|
|
return 0;
|
|
}
|
|
|