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

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

    其实对于输入型GPIO来说,要么是一个普通的输入引脚,要么当作特定的按键使用,有对应的键值。在本文中我们将其注册成普通的输入GPIO使用。
    aw_err_t aw_gpio_pin_cfg(int pin, uint32_t flags);
    aw_err_t aw_gpio_get(int pin);
    这两个函数就满足了我们的需要,其说明如下所示:

    /**
     * param[in] pin       引脚编号
     * param[in] flags     配置标志,其格式请参考上面的详细描述
     *
     * 
    etval AW_OK        操作成功
     * 
    etval -AW_ENXIO    a pin 不存在
     * 
    etval -AW_EIO      操作出错
     *
     * par 示例:配置引脚功能 (使用“通用定义”标志域)
     * code
     * #include "aw_gpio.h"
     *
     * // 配置引脚PIO0_1为GPIO输入功能
     * aw_gpio_pin_cfg(PIO0_1, AW_GPIO_INPUT);
     *
     * // 配置引脚PIO0_1为GPIO输入功能,并使能引脚上拉电阻
     * aw_gpio_pin_cfg(PIO0_1, AW_GPIO_INPUT | AW_GPIO_PULL_UP);
     *
     * // 配置引脚PIO0_1为GPIO输出功能,并使能引脚上拉电阻
     * aw_gpio_pin_cfg(PIO0_1, AW_GPIO_OUTPUT | AW_GPIO_PULL_UP);
     * endcode
     */
    aw_err_t aw_gpio_pin_cfg(int pin, uint32_t flags);
    
    /**
     * rief 读取GPIO引脚的输入值/输出值
     *
     * 读取引脚 a pin 当前的输入值(a pin 被配置为GPIO输入功能)或输出值
     * (a pin 被配置为GPIO输出功能)
     *
     * par 实现相关
     * 当引脚被配置为GPIO输出功能时, aw_gpio_get() 返回的可以是设置的输出值,
     * 也可以是引脚上的实际电平
     *
     * param[in] pin   引脚编号
     *
     * 
    etval  0         a pin 的输入值或输出值为0(低电平)
     * 
    etval  1         a pin 的输入值或输出值为1(高电平)
     * 
    etval -AW_ENXIO  a pin 不存在
     *
     * par 示例
     * code
     * #include "aw_gpio.h"
     *
     * int val;
     *
     * // 配置引脚 PIO0_11 为GPIO输入功能,上拉电阻使能
     * aw_gpio_pin_cfg(PIO0_11, AW_GPIO_INPUT | AW_GPIO_PULL_UP);
     *
     * val = aw_gpio_get(PIO0_11); //读取引脚 PIO0_11 的输入值
     *
     * // 配置引脚 PIO0_11 为GPIO输出功能
     * aw_gpio_pin_cfg(PIO0_11, AW_GPIO_OUTPUT);
     *
     * val = aw_gpio_get(PIO0_11); //读取引脚 PIO0_11 当前的输出值
     * endcode
     */
    aw_err_t aw_gpio_get(int pin);
    

    1. 首先阅读原理图

    设计中有两个GPIO当作输入,不需要注册相关的设备资源和驱动

    由应用开发自行调用aw_gpio_pin_cfg进行初始化,以兼容Awroks编程接口。在imx1050_pin.h文件当中,定义了所有引脚的编号,我们可重定义相关宏之后,进行操作。

    2. 如何测试

    测试代码如下所示:

    /*----------------------------------------------*
     * macros                                       *
     *----------------------------------------------*/
    
    #define Ignition_MCU  GPIO1_19
    #define CAN_ERROR     GPIO2_30
    
    /*----------------------------------------------*
     * routines' implementations                    *
     *----------------------------------------------*/
    
    /**
     * @brief  Ignition_MCU pin mux init
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 11:11:27
     *   Author       : panzidong
     *   Modification : Created function
     */
    void gpio_ignition_mcu_init(){
    	aw_gpio_pin_cfg(Ignition_MCU, AW_GPIO_INPUT | AW_GPIO_PULL_UP );
    }
    /**
     * @brief get Ignition_MCU pin level
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 11:12:13
     *   Author       : panzidong
     *   Modification : Created function
     */
    int get_ignition_mcu_level(){
    	return aw_gpio_get(Ignition_MCU);
    }
    
    /**
     * @brief CAN_ERR pin mux init
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 11:12:44
     *   Author       : panzidong
     *   Modification : Created function
     */
    void gpio_can_error_init(){
    	aw_gpio_pin_cfg(CAN_ERROR, AW_GPIO_INPUT | AW_GPIO_PULL_UP );
    }
    /**
     * @brief get CAN_ERR pin  level
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 11:13:27
     *   Author       : panzidong
     *   Modification : Created function
     */
    int get_can_error_level(){
    	return aw_gpio_get(CAN_ERROR);
    }
    
    #define GPIO_INPUT_TEST
    
    #ifdef GPIO_INPUT_TEST
    /**
     * @brief Print Ignition_MCU and CAN_ERR pin level
     *
     * @param [in] None
     * @param [out] None
     * 
     * @return 
     * 
     * @history
     * 1.Date         : 2020-9-26 11:14:12
     *   Author       : panzidong
     *   Modification : Created function
     */
    void gpio_input_test(){
         gpio_ignition_mcu_init();
    	 gpio_can_error_init();
    	
         aw_kprintf("
     Ignition_MCU  level:  %s  
    ", 
    	 get_ignition_mcu_level()?"High":"Low");
    	
    	 aw_kprintf("
     CAN_ERROR  level:  %s  
    ", 
    	 get_can_error_level()?"High":"Low");	
    }
    
    #endif
    
    
    
    

    3. 总结

    在做底层适配时,首先得了解在框架之下,该类型驱动的操作接口,以便于编写出测试代码。在aworks框架之下,不同类型的驱动都有相对应的头文件,在文件当中包含了其操作的接口。

  • 相关阅读:
    面向对象课程第三次博客总结
    面向对象课程多线程总结
    23种设计模式整理
    java中synchronized与lock的理解与应用
    关于MySQL查询优化
    mysql操作规范建议
    Linux中实体链接与符号链接详解
    获取本地ipv4地址方法(go语言)
    分库分表与负载均衡的一致性hash算法
    golang闭包的一个经典例子
  • 原文地址:https://www.cnblogs.com/lianghong881018/p/15169455.html
Copyright © 2011-2022 走看看