基于RT1052 Aworks 使能UART功能(十五)

本文主要是通过迁移的思维,记录本人初次使用周立功的Aworks框架进行BSP开发

在适配UART硬件时,先学习Aworks UART编程的接口,查看Aworks提供的测试demo,才知道其导出什么样的接口供应用层使用。只要在注册UART时,确认其对应的串口的COMID号,编程起来就很轻松了。

1. 首先阅读原理图

2. 设备资源及驱动适配

2.1 设备资源的注册

其设备资源在awbl_hwconf_imx1050_lpuart6.h注册
所以需要先确认硬件设计上对应的UART引脚,GPIO1_2和GPIO1_3当作UART6使用,在如下函数当中设置即可。

aw_local void __imx1050_lpuart6_plat_init (void)
{
    aw_clk_enable(IMX1050_CLK_CG_LPUART6);

    int lpuart6_gpios[] = {GPIO1_2, GPIO1_3};

    if (aw_gpio_pin_request("lpuart6_gpios",
                             lpuart6_gpios,
                             AW_NELEMENTS(lpuart6_gpios)) == AW_OK) {
    }
    aw_gpio_pin_cfg(GPIO1_2, GPIO1_2_LPUART6_TX);
    aw_gpio_pin_cfg(GPIO1_3, GPIO1_3_LPUART6_RX);
}

2.2 设备驱动的注册

在aw_prj_config.c文件当中

#ifdef AW_DRV_IMX1050_LPUART
    awbl_imx10xx_lpuart_drv_register();
#endif

2.3 设备宏开关

在aw_prj_param_auto_cfg.h文件当中,AW_DEV_IMX1050_LPUART6 如果被定义之后,对应的宏AW_DRV_IMX1050_LPUART就会被定义,UART驱动就会被注册。所以我们只需要在aw_prj_params.h中打开如下宏. 至此BSP适配完毕,可以通过Awork标准接口进行访问。

aw_prj_params.h

AW_DEV_IMX1050_LPUART6

aw_prj_param_auto_cfg.h

/**
 * \name LPUART
 * @{
 */
#if defined AW_DEV_IMX1050_LPUART1  || \
    defined AW_DEV_IMX1050_LPUART2  || \
    defined AW_DEV_IMX1050_LPUART3  || \
    defined AW_DEV_IMX1050_LPUART4  || \
    defined AW_DEV_IMX1050_LPUART5  || \
    defined AW_DEV_IMX1050_LPUART6  || \
    defined AW_DEV_IMX1050_LPUART7  || \
    defined AW_DEV_IMX1050_LPUART8

#ifndef AW_COM_SERIAL
#define AW_COM_SERIAL
#endif

#define AW_DRV_IMX1050_LPUART

#endif
/** @} */

3. 如何测式


#include "aworks.h"

#include "aw_delay.h"
#include "aw_serial.h"
#include "aw_ioctl.h"

#define  TEST_SERIAL_NUM   COM4

/**
 * \brief 串口 demo
 * \return 无
 */
aw_local void* __task_handle (void *parg)
{
    char                      buf[32];
    int                       len = 0;
    struct  aw_serial_dcb     dcb;
    aw_err_t                  ret;
    struct aw_serial_timeout  timeout;

    /* 获取dcb的默认配置 */
    ret = aw_serial_dcb_get(TEST_SERIAL_NUM, &dcb);
    if (AW_OK != ret) {
        return 0;
    }

    /* 配置串口波特率为115200,8个数据位,1位停止位,无奇偶校验 */
    dcb.baud_rate = 115200;
    dcb.byte_size = 8;
    dcb.stop_bits = AW_SERIAL_ONESTOPBIT;
    dcb.f_parity = AW_FALSE;
    ret = aw_serial_dcb_set(TEST_SERIAL_NUM, &dcb);
    if (AW_OK != ret) {
        return 0;
    }

    /* 配置串口超时 */
    ret = aw_serial_timeout_get(TEST_SERIAL_NUM, &timeout);
    if (AW_OK != ret) {
        return 0;
    }

    timeout.rd_timeout = 1000;          /* 读总超时为1s */
    timeout.rd_interval_timeout = 50;   /* 码间超时为50ms */
    ret = aw_serial_timeout_set(TEST_SERIAL_NUM, &timeout);
    if (AW_OK != ret) {
        return 0;
    }


    /* 收到什么数据就发送什么数据 */
    AW_FOREVER {

        /* 读取数据 */
        len = aw_serial_read(TEST_SERIAL_NUM, buf, sizeof(buf));
        if (len > 0) {
            aw_serial_write(TEST_SERIAL_NUM, buf, len);
        }
    }

    return 0;
}

4. 总结

此次针对UART的配置非常的简单,上层的接口简单易用。前提条件还是得学习Aworks的框架。需要注意的就是注册串口时,其应对的COMID.

posted @ 2021-08-21 14:31  嵌入式实操  阅读(123)  评论(0编辑  收藏  举报