add kernel test for 485 in XiZi/xidatong board
This commit is contained in:
parent
909f3cc635
commit
609d52c745
|
@ -995,6 +995,22 @@ void BOARD_InitUartPins(void)
|
||||||
IOMUXC_GPIO_AD_B1_03_LPUART2_RX,
|
IOMUXC_GPIO_AD_B1_03_LPUART2_RX,
|
||||||
0x10B0u);
|
0x10B0u);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef BSP_USING_LPUART3
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_AD_B1_06_LPUART3_TX,
|
||||||
|
0U);
|
||||||
|
IOMUXC_SetPinMux(
|
||||||
|
IOMUXC_GPIO_AD_B1_07_LPUART3_RX,
|
||||||
|
0U);
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_AD_B1_06_LPUART3_TX,
|
||||||
|
0x10B0u);
|
||||||
|
IOMUXC_SetPinConfig(
|
||||||
|
IOMUXC_GPIO_AD_B1_07_LPUART3_RX,
|
||||||
|
0x10B0u);
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************************************************************
|
/***********************************************************************************************************************
|
||||||
|
|
|
@ -27,3 +27,34 @@ if BSP_USING_LPUART2
|
||||||
string "serial bus 2 device name"
|
string "serial bus 2 device name"
|
||||||
default "uart2_dev2"
|
default "uart2_dev2"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
config BSP_USING_LPUART3
|
||||||
|
bool "Enable LPUART3"
|
||||||
|
default y
|
||||||
|
if BSP_USING_LPUART3
|
||||||
|
config SERIAL_BUS_NAME_3
|
||||||
|
string "serial bus 3 name"
|
||||||
|
default "uart3"
|
||||||
|
config SERIAL_DRV_NAME_3
|
||||||
|
string "serial bus 3 driver name"
|
||||||
|
default "uart3_drv"
|
||||||
|
config SERIAL_3_DEVICE_NAME_0
|
||||||
|
string "serial bus 3 device name"
|
||||||
|
default "uart3_dev3"
|
||||||
|
endif
|
||||||
|
|
||||||
|
config BSP_USING_LPUART8
|
||||||
|
bool "Enable LPUART8"
|
||||||
|
default y
|
||||||
|
if BSP_USING_LPUART8
|
||||||
|
config SERIAL_BUS_NAME_8
|
||||||
|
string "serial bus 8 name"
|
||||||
|
default "uart8"
|
||||||
|
config SERIAL_DRV_NAME_8
|
||||||
|
string "serial bus 8 driver name"
|
||||||
|
default "uart8_drv"
|
||||||
|
config SERIAL_8_DEVICE_NAME_0
|
||||||
|
string "serial bus 8 device name"
|
||||||
|
default "uart8_dev8"
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,24 @@ void LPUART2_IRQHandler(int irqn, void *arg)
|
||||||
DECLARE_HW_IRQ(UART2_IRQn, LPUART2_IRQHandler, NONE);
|
DECLARE_HW_IRQ(UART2_IRQn, LPUART2_IRQHandler, NONE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef BSP_USING_LPUART3
|
||||||
|
struct SerialBus serial_bus_3;
|
||||||
|
struct SerialDriver serial_driver_3;
|
||||||
|
struct SerialHardwareDevice serial_device_3;
|
||||||
|
|
||||||
|
void LPUART3_IRQHandler(int irqn, void *arg)
|
||||||
|
{
|
||||||
|
|
||||||
|
DisableIRQ(LPUART3_IRQn);
|
||||||
|
|
||||||
|
UartIsr(&serial_bus_3, &serial_driver_3, &serial_device_3);
|
||||||
|
EnableIRQ(LPUART3_IRQn);
|
||||||
|
|
||||||
|
}
|
||||||
|
DECLARE_HW_IRQ(LPUART3_IRQn, LPUART3_IRQHandler, NONE);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struct SerialCfgParam *serial_cfg_new)
|
static void SerialCfgParamCheck(struct SerialCfgParam *serial_cfg_default, struct SerialCfgParam *serial_cfg_new)
|
||||||
{
|
{
|
||||||
struct SerialDataCfg *data_cfg_default = &serial_cfg_default->data_cfg;
|
struct SerialDataCfg *data_cfg_default = &serial_cfg_default->data_cfg;
|
||||||
|
@ -426,5 +444,38 @@ int Imxrt1052HwUartInit(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef BSP_USING_LPUART3
|
||||||
|
static struct SerialCfgParam serial_cfg_3;
|
||||||
|
memset(&serial_cfg_3, 0, sizeof(struct SerialCfgParam));
|
||||||
|
|
||||||
|
static struct SerialDevParam serial_dev_param_3;
|
||||||
|
memset(&serial_dev_param_3, 0, sizeof(struct SerialDevParam));
|
||||||
|
|
||||||
|
serial_driver_3.drv_done = &drv_done;
|
||||||
|
serial_driver_3.configure = &SerialDrvConfigure;
|
||||||
|
serial_device_3.hwdev_done = &hwdev_done;
|
||||||
|
|
||||||
|
serial_cfg_3.data_cfg = data_cfg_init;
|
||||||
|
|
||||||
|
serial_cfg_3.hw_cfg.private_data = (void *)LPUART3;
|
||||||
|
serial_cfg_3.hw_cfg.serial_irq_interrupt = LPUART3_IRQn;
|
||||||
|
serial_driver_3.private_data = (void *)&serial_cfg_3;
|
||||||
|
|
||||||
|
serial_dev_param_3.serial_work_mode = SIGN_OPER_INT_RX;
|
||||||
|
serial_device_3.haldev.private_data = (void *)&serial_dev_param_3;
|
||||||
|
|
||||||
|
ret = BoardSerialBusInit(&serial_bus_3, &serial_driver_3, SERIAL_BUS_NAME_3, SERIAL_DRV_NAME_3);
|
||||||
|
if (EOK != ret) {
|
||||||
|
KPrintf("Imxrt1052HwUartInit uart error ret %u\n", ret);
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = BoardSerialDevBend(&serial_device_3, (void *)&serial_cfg_3, SERIAL_BUS_NAME_3, SERIAL_3_DEVICE_NAME_0);
|
||||||
|
if (EOK != ret) {
|
||||||
|
KPrintf("Imxrt1052HwUartInit uart error ret %u\n", ret);
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,9 @@ menuconfig KERNEL_TEST
|
||||||
default n
|
default n
|
||||||
|
|
||||||
if KERNEL_TEST
|
if KERNEL_TEST
|
||||||
|
config KERNEL_TEST_485
|
||||||
|
bool "Config test ch485"
|
||||||
|
default n
|
||||||
config KERNEL_TEST_AVLTREE
|
config KERNEL_TEST_AVLTREE
|
||||||
bool "Config test avl tree"
|
bool "Config test avl tree"
|
||||||
default n
|
default n
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
SRC_FILES := test_main.c test_fpu.c
|
SRC_FILES := test_main.c test_fpu.c
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_KERNEL_TEST_485),y)
|
||||||
|
SRC_FILES += test_485.c
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_KERNEL_TEST_SEM),y)
|
ifeq ($(CONFIG_KERNEL_TEST_SEM),y)
|
||||||
SRC_FILES += test_sem.c
|
SRC_FILES += test_sem.c
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -0,0 +1,174 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 AIIT XUOS Lab
|
||||||
|
* XiUOS is licensed under Mulan PSL v2.
|
||||||
|
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||||
|
* You may obtain a copy of Mulan PSL v2 at:
|
||||||
|
* http://license.coscl.org.cn/MulanPSL2
|
||||||
|
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||||
|
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||||
|
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||||
|
* See the Mulan PSL v2 for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file test_485.c
|
||||||
|
* @brief support to test ch485 function, only support xidatong
|
||||||
|
* @version 1.0
|
||||||
|
* @author AIIT XUOS Lab
|
||||||
|
* @date 2022-05-30
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <xizi.h>
|
||||||
|
#include <device.h>
|
||||||
|
#include "board.h"
|
||||||
|
#include "connect_ch438.h"
|
||||||
|
|
||||||
|
#define DATA_BUFF_SIZE 255
|
||||||
|
|
||||||
|
static struct Bus *bus;
|
||||||
|
static struct HardwareDev *dev;
|
||||||
|
static struct Driver *drv;
|
||||||
|
|
||||||
|
static int uart3_fd = 0;
|
||||||
|
static BusType ch485dir_pin;
|
||||||
|
|
||||||
|
#define BSP_485A_DIR 2
|
||||||
|
|
||||||
|
void Set485Input()
|
||||||
|
{
|
||||||
|
struct PinStat pin_stat;
|
||||||
|
struct BusBlockWriteParam write_param;
|
||||||
|
write_param.buffer = (void *)&pin_stat;
|
||||||
|
|
||||||
|
pin_stat.val = GPIO_LOW;
|
||||||
|
pin_stat.pin = BSP_485A_DIR;
|
||||||
|
BusDevWriteData(ch485dir_pin->owner_haldev, &write_param);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Set485Output()
|
||||||
|
{
|
||||||
|
struct PinStat pin_stat;
|
||||||
|
struct BusBlockWriteParam write_param;
|
||||||
|
write_param.buffer = (void *)&pin_stat;
|
||||||
|
|
||||||
|
pin_stat.val = GPIO_HIGH;
|
||||||
|
pin_stat.pin = BSP_485A_DIR;
|
||||||
|
BusDevWriteData(ch485dir_pin->owner_haldev, &write_param);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Read485(void *parameter)
|
||||||
|
{
|
||||||
|
uint8 RevLen;
|
||||||
|
|
||||||
|
char data_buffer[128] = {0};
|
||||||
|
char data_size = 0;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
MdelayKTask(100);
|
||||||
|
|
||||||
|
memset(data_buffer, 0, 128);
|
||||||
|
data_size = read(uart3_fd, data_buffer, 128);
|
||||||
|
|
||||||
|
KPrintf("\n");
|
||||||
|
for(int i=0;i<data_size;++i)
|
||||||
|
KPrintf("%c(0x%0x) ", data_buffer[i], data_buffer[i]);
|
||||||
|
|
||||||
|
memset(data_buffer, 0, sizeof(data_buffer));
|
||||||
|
data_size = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Write485(void *parameter)
|
||||||
|
{
|
||||||
|
x_err_t result;
|
||||||
|
// uint8 Instruction[] = "AT+UART_CUR?\r\n";
|
||||||
|
uint8 Instruction[8] = {0x01, 0x03, 0x20, 0x00, 0x00, 0x08, 0x4f, 0xcc};
|
||||||
|
char data_buffer[128] = {0};
|
||||||
|
char data_size = 0;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
MdelayKTask(2000);
|
||||||
|
|
||||||
|
Set485Output();
|
||||||
|
MdelayKTask(50);
|
||||||
|
|
||||||
|
write(uart3_fd, Instruction, 8);
|
||||||
|
|
||||||
|
MdelayKTask(50);
|
||||||
|
Set485Input();
|
||||||
|
|
||||||
|
KPrintf("write success\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Test485Init(void)
|
||||||
|
{
|
||||||
|
x_err_t flag;
|
||||||
|
int ret = EOK;
|
||||||
|
|
||||||
|
struct PinParam pin_cfg;
|
||||||
|
struct PinStat pin_stat;
|
||||||
|
ch485dir_pin = PinBusInitGet();
|
||||||
|
|
||||||
|
struct BusConfigureInfo configure_info;
|
||||||
|
configure_info.configure_cmd = OPE_CFG;
|
||||||
|
configure_info.private_data = (void *)&pin_cfg;
|
||||||
|
|
||||||
|
pin_cfg.cmd = GPIO_CONFIG_MODE;
|
||||||
|
pin_cfg.pin = BSP_485A_DIR;
|
||||||
|
pin_cfg.mode = GPIO_CFG_OUTPUT;
|
||||||
|
|
||||||
|
ret = BusDrvConfigure(ch485dir_pin->owner_driver, &configure_info);
|
||||||
|
if (ret != EOK) {
|
||||||
|
KPrintf("config BSP_CH438_NWR_PIN pin %d failed!\n", BSP_485A_DIR);
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
uart3_fd = open("/dev/uart3_dev3", O_RDWR);
|
||||||
|
if (uart3_fd < 0) {
|
||||||
|
KPrintf("open fd error %d\n", uart3_fd);
|
||||||
|
}
|
||||||
|
KPrintf("open fd %d\n", uart3_fd);
|
||||||
|
|
||||||
|
struct SerialDataCfg cfg;
|
||||||
|
cfg.serial_baud_rate = BAUD_RATE_9600;
|
||||||
|
cfg.serial_data_bits = DATA_BITS_8;
|
||||||
|
cfg.serial_stop_bits = STOP_BITS_1;
|
||||||
|
cfg.serial_buffer_size = 128;
|
||||||
|
cfg.serial_parity_mode = PARITY_NONE;
|
||||||
|
cfg.serial_bit_order = 0;
|
||||||
|
cfg.serial_invert_mode = 0;
|
||||||
|
cfg.ext_uart_no = 0;
|
||||||
|
cfg.port_configure = 0;
|
||||||
|
|
||||||
|
KPrintf("before ioctl\n");
|
||||||
|
|
||||||
|
if (ret != ioctl(uart3_fd, OPE_INT, &cfg)) {
|
||||||
|
KPrintf("ioctl fd error %d\n", ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 task_CH438_read = KTaskCreate("task_CH438_read", Read485, NONE, 2048, 10);
|
||||||
|
flag = StartupKTask(task_CH438_read);
|
||||||
|
if (flag != EOK) {
|
||||||
|
KPrintf("StartupKTask task_CH438_read failed .\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 task_CH438_write = KTaskCreate("task_CH438_write", Write485, NONE, 2048, 10);
|
||||||
|
flag = StartupKTask(task_CH438_write);
|
||||||
|
if (flag != EOK) {
|
||||||
|
KPrintf("StartupKTask task_CH438_write failed .\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Test485(void)
|
||||||
|
{
|
||||||
|
Test485Init();
|
||||||
|
MdelayKTask(500);
|
||||||
|
}
|
||||||
|
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
|
||||||
|
Test485, Test485, Test485 );
|
Loading…
Reference in New Issue