基于RT1052 Aworks 使能GPIO输出功能(五)
作者:互联网
本文主要是通过迁移的思维,记录本人初次使用周立功的Aworks框架进行BSP开发
在Aworks支持led_gpios类的驱动,和linux下的gpio-leds类似。在其框架之下只需要记录对应的GPIO的led id号,上层即可调用通用接口进行操作。
/**
* \brief 设置LED状态
* \param[in] id LED编号, 可用编号由具体平台决定
* \param[in] on LED的点亮状态, true为点亮, false为熄灭
*
* \retval AW_OK 操作成功
* \retval -AW_ENODEV 设备不存在
*/
aw_err_t aw_led_set (int id, aw_bool_t on);
/**
* \brief 点亮LED
* \param[in] id LED编号, 可用编号由具体平台决定.
*
* \retval AW_OK 操作成功
* \retval -AW_ENODEV 设备不存在
*/
aw_err_t aw_led_on (int id);
/**
* \brief 熄灭LED
* \param[in] id LED编号, 可用编号由具体平台决定
*
* \retval AW_OK 操作成功
* \retval -AW_ENODEV 设备不存在
*/
aw_err_t aw_led_off (int id);
/**
* \brief 翻转LED
* \param[in] id LED编号, 可用编号由具体平台决定
*
* \retval AW_OK 操作成功
* \retval -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 /**< \brief 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输出初始化时,无法分别指定初始化之后的引脚的默认状态,要么全为高电平,要么全为低电平。
标签:使能,LED,RT1052,Aworks,None,param,aw,gpio,led 来源: https://www.cnblogs.com/lianghong881018/p/15169444.html