基于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框架之下,不同类型的驱动都有相对应的头文件,在文件当中包含了其操作的接口。

原文地址:https://www.cnblogs.com/lianghong881018/p/15169455.html