睡眠模式配置

学到更多常见问题解答教程

9帖/ 0新
最后发表
Rajapurerohit
离线
最后看到:两个月前,三个星期前
加入时间:二○一七年四月二十○日09:17
睡眠模式配置

亲爱的Dialog_Support,

我们正在开发的应用程序,我们要唤醒使用两个中断法装置。
1.使用按钮中断
2.传感器中断[如果任何活动传感器中断引脚]

我引用了ble_sleep_mode的例子,但对于我的应用程序,它不能正常工作。
我用下面的代码片段来配置中断,

静态无效app_button_press_cb(无效)
{
arch_disable_sleep();
// arch_force_active_mode();
如果(GetBits16(SYS_STAT_REG,PER_IS_DOWN))
{
periph_init();
}

如果(arch_ble_ext_wakeup_get())
{
arch_set_sleep_mode(app_default_sleep_mode);
arch_ble_force_wakeup();
arch_ble_ext_wakeup_off();
app_easy_wakeup();
}
}

空白app_button_enable(空白)
{
app_easy_wakeup_set(app_wakeup_cb);
wkupct_register_callback(app_button_press_cb);
wkupct_enable_irq(WKUPCT_PIN_SELECT(GPIO_KEY_PORT,GPIO_KEY_PIN)| WKUPCT_PIN_SELECT(GPIO_I2C_BUZZER_PORT,ACCELEROMETER_INT),//选择引脚(GPIO_PORT_1,GPIO_PIN_1)
wkupct_pin_polarized _low (GPIO_I2C_BUZZER_PORT, ACCELEROMETER_INT, wkupct_pin_极化_low), //极性低
1,// 1个事件
40);//揭发时间= 0

}

空白user_app_adv_undirect_complete (uint8_t状态)
{
//禁用BLE和timer事件的唤醒。只有外部(GPIO)唤醒事件才能唤醒处理器。
如果(状态== GAP_ERR_CANCELED)
{
user_app_adv_start();

//配置唤醒按钮
app_button_enable();
}
}

使用这个我无法产生中断和唤醒我的设备从睡眠。
一些随机的行为正在发生的事情,只喜欢我第一次能够检测按键中断,如果重复进行第二次无法检测。
同样的,传感器中断。
请帮我解决这个问题。

感谢致敬
罗希特

设备:
PM_Dialog
离线
最后看到:9小时25分钟前
员工
加入时间:2018年2月8日11:03
嗨Rajapurerohit,

嗨Rajapurerohit,

你能澄清一下你的申请要做什么吗?正如我在你的代码中看到的,你已经发布,你调用user_app_adv_start()到user_app_adv_undirect_complete()函数,所以当广告完成(取消你的应用),你将开始再次广告,你的设备不会进入睡眠模式。所以你能解释一下你到底想做什么吗?例如,您想要广告和唤醒中断配置时,广告?
有几个原因导致醒来可能会失败:
•在user_app_adv_undirect_complete()函数中,您不调用arch_ble_ext_wakeup_on()函数,作为SDK的ble_app_sleepmode示例。该函数在广告完成时将sleep_ext_force变量变为true,默认情况下为false。当按下按钮触发app_button_press_cb()函数时,arch_ble_ext_wakeup_get()将返回默认值为false,因此进入if (arch_ble_ext_wakeup_get())的代码将不会执行。所以,我建议检查一下。
•此外,你应该检查你的唤醒引脚的状态,并确保它们都是高(因为你已经配置了唤醒被触发时低)。因为如果两个源之一保持在中断状态(低你的情况),则唤醒控制器将不会被触发其他中断切换低时。
•此外,你启用按钮到应用程序代码,第二次?如果它的启用一次,仅在第一次,你将能够检测按键中断。所以你调用app_button_enable()你想从外部中断唤醒之前?

由于PM_Dialog

Rajapurerohit
离线
最后看到:两个月前,三个星期前
加入时间:二○一七年四月二十○日09:17
你好PM_Dialog,

你好PM_Dialog,

感谢您的答复。
我的要求是,
在extended_sleep模式1.Configure设备和唤醒时候,从按钮中断,传感器中断,如果我们连接之后写入特性。
2.是否可以睡边的广告和联系?
其次要在睡眠组设备的广告中,但它应该在我的手机应用程序显示即使是在睡眠中。
和睡眠,如果移动应用程序连接。可能吗?如果是的话,其算法应我跟随。

3.Algorithm实施,现在是唤醒设备,每当有按钮或传感器中断,但不能够唤醒设备时,有按钮中断和我在以前的评论连接的代码片断。

GPIO配置如下
GPIO_ConfigurePin(GPIO_KEY_PORT, GPIO_KEY_PIN, INPUT_PULLUP, PID_GPIO, false);
GPIO_EnableIRQ(GPIO_KEY_PORT,GPIO_KEY_PIN,GPIO3_IRQn,真实,真,250);
GPIO_RegisterCallback (GPIO3_IRQn PushButtonInterruptHandler);

GPIO_ConfigurePin(GPIO_SENSOR_PORT,SENSOR_INT,INPUT_PULLDOWN,PID_GPIO,FALSE);
GPIO_EnableIRQ(GPIO_SENSOR_PORT,SENSOR_INT,GPIO2_IRQn,FALSE,TRUE,250);
GPIO_RegisterCallback (GPIO2_IRQn SENSORInterruptHandler);

感谢致敬
罗希特

PM_Dialog
离线
最后看到:9小时25分钟前
员工
加入时间:2018年2月8日11:03
嗨Rajapurerohit,

嗨Rajapurerohit,

1,2)设备会在广告和连接间隔之间进入睡眠状态。设备可以从一个预先编程的BLE事件(一个广告事件或一个连接事件或一个内核计时器)或一个唤醒中断中唤醒。例如,在广告的情况下,设备将唤醒广告,并再次返回睡眠,它将不会广告,直到时间为下一个广告间隔。我不能理解你的意思,你的设备应该显示在你的手机,即使它在睡眠。你能把你的问题说清楚吗?

3)在你已经张贴在您的最后一个职位的配置中,已经配置了中断对GPIO。只有当你的设备被唤醒,它是广告这个中断将被执行。这种配置是不能够在睡眠期间唤醒装置,所述唤醒控制器应当装置进入睡眠模式下使用,以便对外部中断将其唤醒。

由于PM_dialog

PM_Dialog
离线
最后看到:9小时25分钟前
员工
加入时间:2018年2月8日11:03
你必须了解

你必须了解设备运行时,该设备将要醒来,广告根据发布时间间隔,因此,您可以将永久睡眠的设备,仅通过按钮或内核计时器醒来或者你可以设置标准发布时间间隔,使得该装置将自动唤醒(后者是从中央发现的唯一方法)。我还提到了一些东西,你没有在代码实现您已经连接如下:

1.You enable the standard IRQs in the set_pad_functions and in the callbacks you are also mixed up with the wake up interrupt, when you are in sleep mode regarding permanent or wake up automatically those simple gpio interrupts won’t be able to wake up the system, the system wakes up when sleep via the wake up interrupt. Those interrupts will only work while the system is always on.

2.计时器app_adv_data_update_timer_used后还叫你调用停止广告然后重新启动广告然后启用中断醒来,和你也使错了(传递错误的参数)自从你混销参数与极性参数(请检查参数函数接受或检查这个论坛的票HTTPS://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl ...)。Additionally when the interrupt occurs from the external source you send a start advertising command while you are still advertising, but you won’t be able to do that ever since you are checking arch_ble_ext_wakeup_get() which will always will return flash since you have never enabled the arch_ble_ext_wakeup_on() (which is something that I’ve already mentioned in previous post).

综上所述,我不知道您所附加的代码到底应该做什么,或者您想要做什么,我建议您看看ble_app_sleepmode示例,并尝试理解系统究竟是如何运行的。

由于PM_dialog

Rajapurerohit
离线
最后看到:两个月前,三个星期前
加入时间:二○一七年四月二十○日09:17
嗨PM_dialog,

嗨PM_dialog,
感谢您的答复。

但我无法理解wkupct_enable_irq();它是如何工作,什么极性。
在数据表中也没有太多的解释。你能给我两个中断引脚配置的例子吗?
从附加链接还我不能够清除我的脚打断。
如果遵循睡眠模式的例子配置,我不能检测到两个中断或它工作只有一个中断,第二个一个不会工作。
请帮我解决问题。

感谢致敬
罗希特

PM_Dialog
离线
最后看到:9小时25分钟前
员工
加入时间:2018年2月8日11:03
嗨Rajapurerohit,

嗨Rajapurerohit,

我已经修改,以提供您的两个中断引脚配置的示例SDK5.0.4的ble_app_sleepmode例子。在这个例子中,你可以唤醒你的设备或者与SW2(GPIO0_6)BUTTON2或SW3(GPIO1_1)按钮,使用DA1458x ProDK。的装置通告的时间限定的量(APP_ADV_DATA_UPDATE_TO)时,它的电。默认值是10秒。上述超时期满之后,如果设备不进入连接状态,它停止广告。在此之后,该设备不执行任何操作,并等待外部事件退出休眠状态。您可以通过按下两个按钮我刚刚提到你的一个唤醒设备。按下按钮后,设备将再次开始在预定的时间做广告。您可以按照下面的步骤修改ble_app_sleepmode例子。

1)定义SW2(GPIO0_6)BUTTON2在user_periph_setup.h成HW_CONFIG_PRO_DK配置
#定义GPIO_BUTTON_2_PORT GPIO_PORT_0
#定义GPIO_BUTTON_2_PIN GPIO_PIN_6

2)保持沉默。获取user_periph_setup.c文件并添加到GPIO_reservations()函数,代码如下:

RESERVE_GPIO(PUSH_BUTTON, GPIO_BUTTON_2_PORT, GPIO_BUTTON_2_PIN, PID_GPIO);

3)转到user_periph_setup.c并添加在set_pad_functions()函数以下代码:

GPIO_ConfigurePin(GPIO_BUTTON_2_PORT,GPIO_BUTTON_2_PIN,INPUT_PULLUP,PID_GPIO,FALSE);

4)在sleep_mode。c,用下面的函数替换app_button_enable()函数。下面的函数将两个按钮设置为唤醒中断。

静态无效app_button_enable(无效)
{
app_easy_wakeup_set(app_wakeup_cb);
wkupct_register_callback(app_button_press_cb);
WKUPCT_PIN_SELECT(GPIO_BUTTON_2_PORT, GPIO_BUTTON_2_PIN), //选择pin (GPIO_BUTTON_PORT, GPIO_BUTTON_PIN)
WKUPCT_PIN_POLARITY(GPIO_BUTTON_PORT,GPIO_BUTTON_PIN,WKUPCT_PIN_POLARITY_LOW)|WKUPCT_PIN_POLARITY(GPIO_BUTTON_2_PORT,GPIO_BUTTON_2_PIN,WKUPCT_PIN_POLARITY_LOW),//极性低
1,// 1个事件
40);//揭发时间= 0
}

如果你遵循下面的步骤,你必须能够有两个中断引脚配置和唤醒你的设备使用他们中的任何一个。另外,我建议您再次检查应用程序中唤醒可能失败的三个可能原因。

由于PM_dialog

Rajapurerohit
离线
最后看到:两个月前,三个星期前
加入时间:二○一七年四月二十○日09:17
你好PM_dialog,

你好PM_dialog,
感谢您的答复,
我已经改变了功能,它很适合我。
基本上我的最终目标是达到以下部分
1.按下开关后保持清醒状态,如果没有按下开关,6秒后返回睡眠状态
(运动检测)再次
检测到运动之后2.保持清醒和回去睡觉6秒后,如果运动不
检测(按下开关)再次
3.在收到处于连接状态的东西并需要嗡嗡作响时保持清醒。然后回去
6秒后的睡眠如果没有检测到运动(按下开关)再次

而且我在使用定时器0和定时器2的PWM。但如果上述流程写那么M无法正常连接设备和PWM也不能正常工作,因为它总是会睡眠状态。
你能帮帮我使用唤醒定时器和睡眠转到后6秒

感谢致敬
罗希特

PM_Dialog
离线
最后看到:9小时25分钟前
员工
加入时间:2018年2月8日11:03
嗨Rajapurerohit,

嗨Rajapurerohit,

1,2)由于我能理解,你要通过一个开关按钮中断或通过传感器中断唤醒要么和宣传,持续6秒。6秒后的设备应该进入睡眠状态,并通过下一级中断唤醒。难道我没有理解错?如果你想这样做,你应该修改app_button_enable()函数wkupct_enable_irq()函数的输入。在我已经发布的例子中,wkupct_enable_irq()函数使能中断GPIO和两个按钮的极性。在你的情况,你应该修改wkupct_enable_irq()为:

wkupct_enable_irq(WKUPCT_PIN_SELECT(GPIO_BUTTON_PORT,GPIO_BUTTON_PIN)| WKUPCT_PIN_SELECT(GPIO_SENSOR_PORT,GPIO_SENSOR_PIN),//选择引脚(GPIO_BUTTON_PORT,GPIO_BUTTON_PIN)
WKUPCT_PIN_POLARITY(GPIO_BUTTON_PORT,GPIO_BUTTON_PIN,WKUPCT_PIN_POLARITY_LOW)|WKUPCT_PIN_POLARITY(GPIO_SENSOR_PORT,GPIO_SENSOR_PIN,WKUPCT_PIN_POLARITY_LOW),//极性低
1,// 1个事件
40);//揭发时间= 0

该GPIO_SENSOR_PORT和GPIO_SENSOR_PIN是例子。在您的应用程序,你应该为你的输入GPIO传感器定义。为了做广告,持续6秒,当你醒来时,你应该改变的广告数据的时间值。请到user_sleepmode.h文件和APP_ADV_DATA_UPDATE_TO定义的值更改为600。另外,我建议您检查传感器的极性,为了赶中断并触发唤醒控制器。例如,如果传感器的极性低,配置唤醒控制器低的极性,中断不会被捕获并唤醒控制器将不会被触发。我在以前的帖子集都提供了一个唤醒信号有两个来源的例子,您可以使用,并使用您的传感器的极性中断替换的按钮。

3)正如我在以前的文章中已经提到,当设备处于延长休眠模式下,只能从BLE事件,当连接你会醒来和睡眠根据预定义的连接的时间间隔,你已经安排与你醒来master, you can’t just go to permanent sleep for 6 seconds and still be able to maintain a connection. Regarding the timers, when in extended sleep the device will shut down all the peripherals, you are not going to be able to operate with PWM while you are in sleep. Please try to understand how BLE operates.

HTTPS://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl ...

由于PM_dialog