zoukankan      html  css  js  c++  java
  • 基于RT1052 Aworks 使能GPIO输出功能(五)

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

    在Aworks支持led_gpios类的驱动,和linux下的gpio-leds类似。在其框架之下只需要记录对应的GPIO的led id号,上层即可调用通用接口进行操作。

    /**
     * rief 设置LED状态
     * param[in] id   LED编号, 可用编号由具体平台决定
     * param[in] on   LED的点亮状态, true为点亮, false为熄灭
     *
     * 
    etval  AW_OK      操作成功
     * 
    etval -AW_ENODEV  设备不存在
     */
    aw_err_t aw_led_set (int id, aw_bool_t on);
    
    /**
     * rief 点亮LED
     * param[in] id   LED编号, 可用编号由具体平台决定.
     *
     * 
    etval  AW_OK      操作成功
     * 
    etval -AW_ENODEV  设备不存在
     */
    aw_err_t aw_led_on (int id);
    
    /**
     * rief 熄灭LED
     * param[in] id   LED编号, 可用编号由具体平台决定
     *
     * 
    etval  AW_OK      操作成功
     * 
    etval -AW_ENODEV  设备不存在
     */
    aw_err_t aw_led_off (int id);
    
    /**
     * rief 翻转LED
     * param[in] id   LED编号, 可用编号由具体平台决定
     *
     * 
    etval  AW_OK      操作成功
     * 
    etval -AW_ENODEV  设备不存在
     */
    aw_err_t aw_led_toggle (int id);
    
    

    1. 首先阅读原理图

    设计中有五个输出引脚,如下所示:
    如下五个引脚在Aworks 当中被注册成LED设备。

    2. 设备资源及驱动适配

    2.1 设备资源的注册

    在Aworks下注册GPIO的设备资源注册的关键在于awbl_hwconf_gpio_led.h 对应的数组。

    /* LED设备GPIO信息 */
    aw_local aw_const uint16_t __g_led_gpios[] = {
        GPIO1_18,     /*  MCU_WP */
    	GPIO2_28,     /*  CAN_STB */
    	GPIO2_29,     /*  CAN_EN */
    	GPIO2_31,     /*  CAN_WAKE */
    	GPIO1_30,     /*  INPUT_DET_EN */
    };
    

    默认AWBL_HWCONF_GPIO_LED宏已注册到其硬件设备列表当中g_awbl_devhcf_list。有了设备资源之后,我们需要注册设备驱动。

    2.2 设备驱动的注册

    在Aworks框架下,其驱动的注册在 aw_prj_config.c 如下所示

    #ifdef AW_DRV_GPIO_LED
        awbl_led_gpio_drv_register();
    #endif
    

    2.3 设备宏开关

    使能led模块只需要在aw_prj_params.h 新增相关的宏即可,如下所示

    #define AW_DEV_GPIO_LED                 /**< rief LED */
    

    至此我们就确定的GPIO的led id号如下所示,可以使用Aworks框架进行编程。

    3. 如何测试

    测试代码如下所示:

    /*----------------------------------------------*
     * macros                                       *
     *----------------------------------------------*/
    #define MCU_WP_LED_ID           0
    #define CAN_STB_LED_ID          1
    #define CAN_EN_LED_ID           2
    #define CAN_WAKE_LED_ID         3
    #define INPUT_DET_EN_LED_ID     4
    /*----------------------------------------------*
     * routines' implementations                    *
     *----------------------------------------------*/
    
    /**
     * @brief set MCU_WP pin to  high level
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 13:25:36
     *   Author       : panzidong
     *   Modification : Created function
     */
    void gpio_mcu_wp_on(){
      aw_led_on(MCU_WP_LED_ID);
    }
    /**
     * @brief set MCU_WP pin to low level
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 13:26:44
     *   Author       : panzidong
     *   Modification : Created function
     */
    void gpio_mcu_wp_off(){
      aw_led_off(MCU_WP_LED_ID);
    }
    /**
     * @brief set CAN_STB pin to high level
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 13:27:3
     *   Author       : panzidong
     *   Modification : Created function
     */
    void gpio_can_stb_on(){
      aw_led_on(CAN_STB_LED_ID);
    }
    
    /**
     * @brief set CAN_STB pin to low level
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 13:27:44
     *   Author       : panzidong
     *   Modification : Created function
     */
    void gpio_can_stb_off(){
      aw_led_off(CAN_STB_LED_ID);
    }
    /**
     * @brief set CAN_EN pin to high level
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 13:28:5
     *   Author       : panzidong
     *   Modification : Created function
     */
    void gpio_can_en_on(){
      aw_led_on(CAN_EN_LED_ID);
    }
    
    /**
     * @brief set CAN_EN pin to low level
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 13:28:32
     *   Author       : panzidong
     *   Modification : Created function
     */
    void gpio_can_en_off(){
      aw_led_off(CAN_EN_LED_ID);
    }
    /**
     * @brief set CAN_WAKE pin to high level
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 13:29:36
     *   Author       : panzidong
     *   Modification : Created function
     */
    void gpio_can_wake_on(){
      aw_led_on(CAN_WAKE_LED_ID);
    }
    /**
     * @brief set CAN_WAKE pin to low level
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 13:29:53
     *   Author       : panzidong
     *   Modification : Created function
     */
    void gpio_can_wake_off(){
      aw_led_off(CAN_WAKE_LED_ID);
    }
    /**
     * @brief set INPUT_DET_EN pin to high level
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 13:30:47
     *   Author       : panzidong
     *   Modification : Created function
     */
    void gpio_input_det_en_on(){
      aw_led_on(INPUT_DET_EN_LED_ID);
    }
    /**
     * @brief set INPUT_DET_EN pin to low level
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 13:31:18
     *   Author       : panzidong
     *   Modification : Created function
     */
    void gpio_input_det_en_off(){
      aw_led_off(INPUT_DET_EN_LED_ID);
    }
    
    #ifdef GPIO_LED_TEST
    void gpio_led_test(aw_bool_t on){
    
        if(on == 1){
            gpio_mcu_wp_on();
            gpio_can_stb_on();
            gpio_can_en_on();
            gpio_can_wake_on();
            gpio_input_det_en_on();
        }else{
            gpio_mcu_wp_off();
            gpio_can_stb_off();
            gpio_can_en_off();
            gpio_can_wake_off();
            gpio_input_det_en_off();
        }
    }
    #endif  // GPIO_LED_TEST
    
    

    4. 总结

    在Aworks下GPIO输出引用的注册很简单,但是也有不完美的地方,所有的GPIO输出初始化时,无法分别指定初始化之后的引脚的默认状态,要么全为高电平,要么全为低电平。

  • 相关阅读:
    JavaScript二(第一个js程序)
    JavaScript简述一
    选择合适的Linux版本
    jQuery(一)引入
    Java从零开始学零(Java简介)
    正则表达式
    通过Servlet生成验证码图片(转)
    监听器(web基础学习笔记二十二)
    利用Session完成用户的登录和注销
    Spring Security OAuth 2.0
  • 原文地址:https://www.cnblogs.com/lianghong881018/p/15169444.html
Copyright © 2011-2022 走看看