• 基于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
    
    /**
     * 
    ame 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
    
    /**
     * rief 串口 demo
     * 
    eturn 无
     */
    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.

  • 相关阅读:
    用curl发起https请求
    curl: (60) SSL certificate problem: unable to get local issuer certificate 错误
    单例模式
    黑窗口命令
    推荐的php安全配置选项
    sublime配置大全
    数据库三范式最简单最易记的解释
    linux 下安装python3
    restframwork 接口及优化
    Django的orm练习---多表查询
  • 原文地址:https://www.cnblogs.com/lianghong881018/p/15169479.html
Copyright © 2020-2023  润新知