亲爱的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_PIN_SELECT(GPIO_I2C_BUZZER_PORT, ACCELEROMETER_INT), //选择pin (GPIO_PORT_1, GPIO_PIN_1)
WKUPCT_PIN_POLARITY(GPIO_KEY_PORT,GPIO_KEY_PIN,WKUPCT_PIN_POLARITY_LOW)|WKUPCT_PIN_POLARITY(GPIO_I2C_BUZZER_PORT,ACCELEROMETER_INT,WKUPCT_PIN_POLARITY_LOW),//极性低
1,// 1个事件
40);//去抖动时间= 0
}
无效user_app_adv_undirect_complete(uint8_t状态)
{
//禁用唤醒的BLE和定时器事件。只有外部(GPIO)唤醒事件可以唤醒处理器。
如果(状态== GAP_ERR_CANCELED)
{
user_app_adv_start();
//配置唤醒按钮
app_button_enable();
}
}
使用这个我无法产生中断,并从睡眠模式唤醒我的设备。
一些随机的行为正在发生的事情,只喜欢我第一次能够检测按键中断,如果重复进行第二次无法检测。
同样的,传感器中断。
请帮我解决问题。
感谢和问候
罗希特
嗨Rajapurerohit,
能否请你澄清你想与你的应用程序做什么?As I can see in your code that you have posted, you call user_app_adv_start() into user_app_adv_undirect_complete() function, so when the advertise is completed (cancelled by your application) you will start advertise again and your device won’t go to sleep mode. So can you please explain what exactly you would like to do? For example you would like to advertise and have the wake up interrupt configured while advertising?
醒来可能会失败的几个原因:
•在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()返回默认值是假,所以代码转换成IF(arch_ble_ext_wakeup_get())将不会执行。所以,我建议检查。
•此外,你应该检查你的唤醒引脚的状态,并确保它们都是高(因为你已经配置了唤醒被触发时低)。因为如果两个源之一保持在中断状态(低你的情况),则唤醒控制器将不会被触发其他中断切换低时。
•此外,你启用按钮到应用程序代码,第二次?如果它的启用一次,仅在第一次,你将能够检测按键中断。所以你调用app_button_enable()你想从外部中断唤醒之前?
由于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, true, true, 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);
感谢和问候
罗希特
嗨Rajapurerohit,
1,2)的装置获取到睡眠广告和连接间隔之间。该设备可以从预先编程的BLE事件(广告事件或连接事件或内核定时器)或与唤醒中断任一醒来。例如,在广告情况下,设备将被唤醒做广告和将再次回去睡觉,也不会做广告,直到下一个广告的间隔时间已过。我不能让你的意思是您的设备要在手机上显示,即使是在睡眠中。能否请你澄清你的问题?
3)在你上次发布的配置中,你已经在GPIO上配置了一个中断。这个中断只会在你的设备被唤醒并且它正在广告的时候被执行。这个配置不能在睡眠期间唤醒设备,唤醒控制器应该在设备进入睡眠模式时使用,以便外部中断唤醒它。
由于PM_dialog
你必须了解设备运行时,该设备将要醒来,广告根据发布时间间隔,因此,您可以将永久睡眠的设备,仅通过按钮或内核计时器醒来或者你可以设置标准发布时间间隔,使得该装置将自动唤醒(后者是从中央发现的唯一方法)。我还提到了一些东西,你没有在代码实现您已经连接如下:
1.启用终端请求的标准set_pad_functions和回调你也混合了中断醒来,当你在睡眠模式关于永久或自动醒来这些简单的gpio中断无法唤醒系统,该系统通过醒来醒来当睡眠中断。这些中断只会在系统始终处于开启状态时工作。
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
嗨PM_dialog,
感谢您的答复。
但我无法理解wkupct_enable_irq ();它是如何工作的,极性是什么。
在数据表中也没有出现太多的解释。能否请您给我举例的两个中断引脚配置。
从附加链接还我不能够清除我的脚打断。
如果遵循睡眠模式示例配置,我不能够同时检测中断或者它只是一个中断第二个不会工作工作。
请帮我解决这个问题。
感谢和问候
罗希特
嗨Rajapurerohit,
我已经修改了SDK5.0.4的ble_app_sleepmode示例,以便提供一个两个中断引脚配置的示例。在本例中,可以使用DA1458x ProDK使用SW2 (GPIO0_6) button2或SW3 (GPIO1_1)按钮唤醒设备。设备在通电时广告一段定义的时间(APP_ADV_DATA_UPDATE_TO)。默认值是10秒。在以上超时结束后,如果设备没有进入连接状态,它将停止广告。在此之后,设备什么也不做,并等待外部事件退出睡眠状态。你可以按我刚才提到的两个按钮中的一个来唤醒这个设备。按下按钮后,设备将重新开始进行预定时间的广告。您可以通过以下步骤修改ble_app_sleepmode示例。
1)将user_periph_setup.h中的SW2 (GPIO0_6) button2定义为HW_CONFIG_PRO_DK配置
#定义GPIO_BUTTON_2_PORT GPIO_PORT_0
#定义GPIO_BUTTON_2_PIN GPIO_PIN_6
2)储备BUTTON2。到了user_periph_setup.c文件,并在GPIO_reservations add()函数下面的代码:
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_enable_irq(WKUPCT_PIN_SELECT(GPIO_BUTTON_PORT,GPIO_BUTTON_PIN)| WKUPCT_PIN_SELECT(GPIO_BUTTON_2_PORT,GPIO_BUTTON_2_PIN),//选择引脚(GPIO_BUTTON_PORT,GPIO_BUTTON_PIN)
wkupct_pin_极性(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN, WKUPCT_PIN_POLARITY_LOW
1,// 1个事件
40);//去抖动时间= 0
}
如果你按照下面的步骤,你必须能够有两个中断引脚配置和使用其中任何唤醒你的设备。另外,我建议你再次检查这三个可能的原因在您的应用程序可能会失败,该醒来。
由于PM_dialog
你好PM_dialog,
感谢您的答复,
我已经改变了功能,它很适合我。
基本上我的最终目标是要达到以下部分
开关后1.Be清醒按下并回去睡觉6秒后,如果按钮被按下不
(运动检测)
2.在检测到运动后保持清醒,如果没有运动,6秒后恢复睡眠
检测(按下开关)再次
3.您收到的连接状态和需要的东西,嗡嗡声后清醒。然后回去
如果没有检测到动作(按下开关),6秒后进入睡眠状态
而且我在使用定时器0和定时器2的PWM。但如果上述流程写那么M无法正常连接设备和PWM也不能正常工作,因为它总是会睡眠状态。
你能帮帮我使用唤醒定时器和睡眠转到后6秒
感谢和问候
罗希特
嗨Rajapurerohit,
我能理解的是,你想通过开关按钮或传感器中断来唤醒自己,然后播放6秒钟的广告。6秒后,设备应该进入睡眠状态,并通过下一个中断醒来。我理解对了吗?如果您想这样做,您应该在app_button_enable()函数中修改wkupct_enable_irq()函数的输入。在我发布的示例中,wkupct_enable_irq()函数启用了中断GPIO和两个按钮的极性。在您的情况下,您应该将wkupct_enable_irq()修改为:
WKUPCT_PIN_SELECT(GPIO_SENSOR_PORT, GPIO_SENSOR_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_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事件醒来,当你会起床和睡眠有关的根据预定义的连接的间隔安排与你的主人,你不能只是去永久睡眠6秒钟,仍然能够保持联系。关于定时器,当在延长睡眠时,设备将关闭所有的外设,你将无法与PWM操作,而你在睡眠。请试着理解BLE是如何操作的。
https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。
由于PM_dialog