bes2300之led配置(三)

代码解析

led模块相对简单,对对外只有一个接口暴露出来,通过设置状态来执行相应的显示

/* 应用层设置led的状态,led模块根据状态设置相应的动作 */
app_status_indication_set(APP_STATUS_INDICATION_T status)
{
    struct APP_PWL_CFG_T cfg0;
    struct APP_PWL_CFG_T cfg1;
	...
	switch (status) {
		case APP_STATUS_INDICATION_POWERON:
			cfg0.part[0].level = 1;
			cfg0.part[0].time = (300);
			cfg0.part[1].level = 0;
			cfg0.part[1].time = (300);
			cfg0.parttotal = 2;
			cfg0.startlevel = 0;
			cfg0.periodic = true;

			cfg1.part[0].level = 1;
			cfg1.part[0].time = (300);
			cfg1.part[1].level = 0;
			cfg1.part[1].time = (300);
			cfg1.parttotal = 2;
			cfg1.startlevel = 1;
			cfg1.periodic = true;

			app_pwl_setup(APP_PWL_ID_0, &cfg0);
			app_pwl_start(APP_PWL_ID_0);
			app_pwl_setup(APP_PWL_ID_1, &cfg1);
			app_pwl_start(APP_PWL_ID_1);
			break;
		case APP_STATUS_INDICATION_INITIAL:
			break;
	...
	}
	...
}

上面的参数定义如下所示:

status 类型定义在APP_STATUS_INDICATION_T中:

typedef enum APP_STATUS_INDICATION_T {
    APP_STATUS_INDICATION_POWERON = 0,
    APP_STATUS_INDICATION_INITIAL,
		...
		...
		...
}APP_STATUS_INDICATION_T;

APP_PWL_CFG_T的定义如下

struct APP_PWL_CFG_T {
    struct PWL_CYCLE_ONCE {
        uint8_t  level;/*电平 高/低*/
        uint32_t time;/*电平持续时间*/
    }part[10];
    uint8_t parttotal;/*part总共有几种操作,即part数组中有效操作的个数*/
    uint8_t startlevel;/* 起始电平*/
    bool periodic;/*是否循环操作*/
};

led的ID号,用于在cfg_hw_pinmux_pwl索引具体的硬件io,目前最多只支持两个led

enum APP_PWL_ID_T {
    APP_PWL_ID_0 = 0,
    APP_PWL_ID_1 = 1,
#if (CFG_HW_PLW_NUM == 1)
    APP_PWL_ID_QTY = 1,
#elif (CFG_HW_PLW_NUM == 2)
    APP_PWL_ID_QTY = 2,
#else
    APP_PWL_ID_QTY = 0,
#endif
};

使用举例

io配置

led的io配置在tgt_hardware.c中定义,如下所示,注意不同的芯片可能会有不同

const struct HAL_IOMUX_PIN_FUNCTION_MAP cfg_hw_pinmux_pwl[CFG_HW_PLW_NUM] = {
#if (CFG_HW_PLW_NUM > 0)
    {HAL_IOMUX_PIN_LED2, HAL_IOMUX_FUNC_AS_GPIO, HAL_IOMUX_PIN_VOLTAGE_VIO, HAL_IOMUX_PIN_PULLUP_ENALBE},
    {HAL_IOMUX_PIN_LED1, HAL_IOMUX_FUNC_AS_GPIO, HAL_IOMUX_PIN_VOLTAGE_VIO, HAL_IOMUX_PIN_PULLUP_ENALBE},
#endif
};

设置状态

假如这里想开机时,led1快闪两次,先在app_status_indication_set配置led动作

int app_status_indication_set(APP_STATUS_INDICATION_T status)
{
	/* 对应两个led配置 */
	struct APP_PWL_CFG_T cfg0;
    struct APP_PWL_CFG_T cfg1;
	......
	switch (status) {
		case APP_STATUS_INDICATION_POWERON:
            cfg0.part[0].level = 1;
            cfg0.part[0].time = (200);
            cfg0.part[1].level = 0;
            cfg0.part[1].time = (200);
            cfg0.part[2].level = 1;
            cfg0.part[2].time = (200);
            cfg0.part[3].level = 0;
            cfg0.part[3].time = (200);
			cfg0.parttotal = 3;
            cfg0.startlevel = 1;
            cfg0.periodic = false;
			
			app_pwl_setup(APP_PWL_ID_0, &cfg0);/* 将cfg0与led1绑定 */
            app_pwl_start(APP_PWL_ID_0);
			
			break;
		......
	}
	return 0;
}

然后在开机起来之后,设置开机状态即可

app_status_indication_set(APP_STATUS_INDICATION_POWERON);

 

 

 

相关资料请到<bes2300开发调试笔记>文章底部的网盘链接中下载!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在云巅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值