15个员额/0个新员额
最后一篇文章
index219
离线
最后一次见到:1年3个月前
加入:2016-05-23 07:00
关于工程DSPS_v_5.150.2中EXT_SLEEP问题请教!

问题描述:
1. dsps_v_5.150.2工程中变量默认初始值:
const static sleep\u state\u t app\u default\u sleep\u mode=ARCH\u EXT\u sleep\u ON;
app_default_sleep_mode = ARCH_EXT_SLEEP_ON在需求方工程中的含义是开启扩展睡眠模式,在这种情况下测试透传功能,数据传输是不稳定的。
请问一下DA14583在拱门外的睡眠设置成扩展睡眠模式下,DSP工程的睡觉模式逻辑关系是怎么样的?工程在什么情况下进入 外景睡眠模式,什么情况下会被唤醒?
我查看了相关帖子说要设置应用程序\默认\睡眠\模式=拱门\睡眠\关闭,DSP工程实现和手机应用程序透传数据时才稳定。
但是我想要实现的功能是
如果(条件1 == 真) {
//DA14583进入外景睡眠模式
其他}{
// 实现DSP及DA14583外设相关操作
}
当DA14583在外景睡眠模式下由按键和BLE事件(KEU定时器设置)唤醒DA14583

注我调试发现当app_default_sleep_mode = ARCH_EXT_SLEEP_ON的时候,程序运行2 s左右就进入领导状态设置了——> GPIO_SetActive (LED_PORT LED_PIN);
而(1){
……
如果((睡眠模式==模式外部睡眠);(睡眠模式==模式深度睡眠)){
GPIO_SetActive (LED_PORT LED_PIN);
//关掉收音机,做任何允许做的事情
arch_goto_睡眠(睡眠模式);
……
2.宏定义:#定义CFG_MAX_SLEEP_DURATION_EXTERNAL_WAKEUP_MS 10000 / / 10年代
请问该变量的宏定义10秒的含义是什么?跟按键唤醒功能有关系么?
3.请问在DSP工程下,如何设置进入外景睡眠模式?如何判断DA14583已经进入外景睡眠模式?
问题有点多,期待技术支持!

设备:
Gongyu_Dialog
离线
最后一次见到:3周1天前
加入:2016-04-27 07:07
1.开启延长睡眠时间传输数据,并没有不稳定

1.开启延长睡眠时间传输数据,并没有不稳定。你需要在PC端的串口工具里设置流控。如果不设置,之前看到容易出现手机APP端收数偶尔会出现乱码。extended sleep进入的条件,可以查看rwip_sleep函数。主要就是检查kernel里面的状态和射频模块等。唤醒的条件,一般就是GPIO的唤醒中断,还有就是kernel里的timer设定。

2.这个时间是设定的单次睡眠允许的最长时间初始值。以在睡眠函数里的定时、睡眠、检查和lld_睡眠检查的参数为例说明。现在第一个参数在内核有定时器开启的情况下,睡眠时间设置的就是“CFG\最大睡眠\持续时间\外部唤醒\毫秒”
通过之前睡眠持续时间=跳转表结构[最大睡眠持续时间外部唤醒位置];获得;第二个参数是给的唤醒的准备时间rwip_环境唤醒_延迟。

这两个函数被封住,但大概执行的结果就是:前一个检查定时器下一次起来到当前的时间间隔,后一个检查LLD里事件的时间间隔。如果这个值比sleep_duration大,那么睡眠条件满足,返回正确的;如果这个值比sleep_duration小,但超过wakeup_delay,更新sleep_duration的值,仍然返回真,可以睡。别的情况就不让睡了,返回错误的。接着按照更新后的sleep_duration值,安排蓝牙协议栈睡眠的时间。所以目前蓝牙协议栈单次最多就是睡10年代。这个和按键的中断没有关系。

3 .判断是否进入睡眠,可以用smartsnippet连接待测的设备,然后在界面上选择spi / uart模式,在power_profile里面通过看电流就可以判断。

index219
离线
最后一次见到:1年3个月前
加入:2016-05-23 07:00
非常感谢。

非常感谢。
1.现在我在需求方工程中设置变量app_default_sleep_mode = ARCH_SLEEP_OFF;关闭睡眠模式的情况下,我该如何手动设置DA14583让其进入延长睡眠?
我的设置是:当条件1等于真的时候如下操作,但实际测试DA14583没有进入扩展睡下,我有arch_printf(“% d:模式\ r \ n”,__LINE__);一直在打印。
而(1)
{
做{
//安排所有未决事件
在启动()时计划启动;
}
((app_asynch_proc());//将控制权授予应用程序时,请尝试关闭电源
……
如果(条件1 == 真) {
条件1 = 假;
arch_设置_睡眠_模式(arch_EXT_睡眠_开启);
}
}

3.我在打开智能代码段连接待测的设备,然后在界面上选择spi/uart模式,spi/uart模式选项下没有可选项,请问智能代码段检测电流电源配置文件的功能是针对官方开发板的么?
附笔我不是用的官方开发板,在smartsnippet界面通用异步收发器模式下是有串口可选,而且我也是通过smartsnippet->Booter下载代码到DA14583的。
期待@工友对话回复。

Gongyu_Dialog
离线
最后一次见到:3周1天前
加入:2016-04-27 07:07
1.应该直接调用就行,但你有打印的话,看通用异步收发器

1 .应该直接调用就行,但你有打印的话,看uart_callback函数里面是没办法调用到arch_restore_sleep_mode的。
2.测电流的功能,应该是在官方开发板的,你也可以用示波器上测。

index219
离线
最后一次见到:1年3个月前
加入:2016-05-23 07:00
1.我关闭了所有打印信息,在而(1)

1.我关闭了所有打印信息,在而(1)里面添加一个发光二极管的状态控制,当调用arch_设置_睡眠_模式(arch_EXT_睡眠_开启);后,发光二极管的状态还是一直闪烁,表明没有进入延长睡眠时间模式下。
Static uint8_t state = 0;
而(1)
{
做{
//安排所有未决事件
在启动()时计划启动;
}
((app_asynch_proc());//将控制权授予应用程序时,请尝试关闭电源
//如果应用程序返回GOTO_SLEEP
//((STREAMDATA_QUEUE)&&stream_QUEUE_more_data());//将控制权授予拖缆,尝试关闭电源
……
如果(条件1 == 真){
条件1 = 假;
arch_设置_睡眠_模式(arch_EXT_睡眠_开启);
}

//500毫秒执行一次
如果(500毫秒时间到) {
如果(状态==0){
国家= 1;
GPIO_SetActive (LED2_PORT LED2_PIN);
}否则{
状态=0;
GPIO_设置不活动(LED2_端口,LED2_引脚);
}
}
@工友对话直接配置arch_设置_睡眠_模式(arch_EXT_睡眠_开启);后DA14583并没有进入延长睡眠时间模式下,请指导一下,还有其他需要注意或者配置的么?

Gongyu_Dialog
离线
最后一次见到:3周1天前
加入:2016-04-27 07:07
你还需要把祝福里面的计时器和事件关掉

你还需要把BLE里面的计时器和事件关掉,只让外部来唤醒。否则还会走到你添加灯控制代码的地方
所以还需要加一句:arch_ble_ext_wakeup_on ();

可以参考一下SDK里的用户_proxr.c文件里的
应用程序按钮启用函数以及应用程序_唤醒_cb函数

index219
离线
最后一次见到:1年3个月前
加入:2016-05-23 07:00
我添加后

我添加后
如果(条件1 == 真){
条件1 = 假;
拱门可外接唤醒开启();
arch_设置_睡眠_模式(arch_EXT_睡眠_开启);
}
代码运行还是会跑到灯控制代码部分。

user_proxr.c里面app_button_enable函数以及app_wakeup_cb函数都是关于按键唤醒的逻辑,
没有关于如何进入延长睡眠时间模式的操作!或者是我没有找到,请指导下!
非常感谢。

index219
离线
最后一次见到:1年3个月前
加入:2016-05-23 07:00
你好,可以麻烦你使用官方开发板测试下数字信号处理器5

你好,可以麻烦你使用官方开发板测试下DSPS_v_5.150.2工程,
配置如下参数:
const static sleep\u state\u t app\u default\u sleep\u mode=ARCH\u sleep\u OFF;
#定义CFG\u MEM\u MAP\u EXT\u SLEEP
#undef CFG_MEM_MAP_DEEP_SLEEP

在工程而(1){
// 条件触发以下操作,判断DA14583是否进入外景睡眠模式
arch_设置_睡眠_模式(arch_EXT_睡眠_开启);
拱门可外接唤醒开启();
}
非常感谢!

Gongyu_Dialog
离线
最后一次见到:3周1天前
加入:2016-04-27 07:07
直接调用,可以进入睡眠,但会被默认的广播流程唤醒

直接调用,可以进入睡眠,但会被默认的广播流程唤醒。延长睡眠时间并不是说停在注射用水指令不动了。仍然会被协议栈的消息唤醒。
arch_设置_睡眠_模式(arch_EXT_睡眠_开启);
拱门可外接唤醒开启();

如果你需要代码停在注射用水指令之前,并且通过GPIO状态显示当前的状态,就需要把广播关掉。
另外,就是GPIO的电平,在进入睡眠后即使外设电关断的情况下,会保留之前的状态。

我这里通过按键进入睡眠的模式,通过GPIO可以观察。
*无效应用按钮按下cb(无效)
{
if(GetBits16(系统状态寄存器,PER向下)){
periph_init();
}
如果(arch_get_sleep_mode () = = ARCH_SLEEP_OFF)
{
app_easy_gap_advertise_stop()//关掉广播
arch_设置_睡眠_模式(arch_EXT_睡眠_开启);
拱门可外接唤醒开启();
}
app_button_enable (); / /
}

×关掉广播的相关代码
无效用户\应用\高级\启动(无效)
{
//安排下一次广告数据更新
//app_adv_data_update_timer_used=app_easy_timer(app_adv_data_update_TO,adv_data_update_timer_cb)//删掉可以关掉广播的操作

结构gapm\u start\u advision\u cmd*cmd;
cmd=app_easy_gap_undirected_adverting_get_active();

//动态添加特定制造商的数据
mnf_数据_更新();
app_add_ad_struct(cmd,&mnf_data,sizeof(struct mnf_specific_data_ad_structure));

app_easy_gap_undirected_advertise_start ();
}
×关掉默认回调函数的广播操作
空白user_app_adv_undirect_complete (uint8_t状态)
{
//如果广告被取消,则更新广告数据并重新开始广告

如果(状态==间隙错误已取消)
{
//用户_应用_adv_start()//防止调用完关广播的操作,广播默认又起来
}

}

×添加GPIO函数在
而(1)
{
做{
测试单元gpio1(1)--------------------------------------------------------------//拉高GPIO
//安排所有未决事件
在启动()时计划启动;
}
((app_asynch_proc());//将控制权授予应用程序时,请尝试关闭电源
//如果应用程序返回GOTO_SLEEP
//((STREAMDATA_QUEUE)&&stream_QUEUE_more_data());//将控制权授予拖缆,尝试关闭电源
//如果应用程序返回GOTO_SLEEP
//如果允许的话,等待中断并进入睡眠
如果((!BLE_APP_PRESENT)和&(check_gtl_state())||
(现在有)
{
//禁用中断
全局_INT_STOP();

app_asynch_sleep_proc();

//获取允许的睡眠模式
//从rwip_power_down()到WFI()的时间必须尽可能短!!
sleep_mode = rwip_power_down ();

如果((睡眠模式==模式外部睡眠);(睡眠模式==模式深度睡眠)){
//关掉收音机,做任何允许做的事情
test_gpio1 (0);//----------------------------------------------------------------------- 拉低GPIO,在下面的函数关掉外设电之前设置
arch_goto_睡眠(睡眠模式);

//等待中断恢复操作

注射用水();

//恢复运行
从睡眠中恢复睡眠();
}

......

index219
离线
最后一次见到:1年3个月前
加入:2016-05-23 07:00
非常感谢,我在DSPS_v_5.150

非常感谢,我在DSPS_v_5.150.2下添加按键进入延长睡眠模式的函数,并且添加一句LED1状态至高,
如果(arch_get_sleep_mode () = = ARCH_SLEEP_OFF)
{
GPIO_设置激活(LED1_端口,LED1_引脚)//确认响应到了按键
app_easy_gap_advertise_stop()//关掉广播
arch_设置_睡眠_模式(arch_EXT_睡眠_开启);
拱门可外接唤醒开启();
}
同样在以下地方置低LED1作为判断是否进入延长睡眠模式的标志
……
如果((睡眠模式==模式外部睡眠);(睡眠模式==模式深度睡眠)){
//关掉收音机,做任何允许做的事情
/ / test_gpio1 (0);//----------------------------------------------------------------------- 拉低GPIO,在下面的函数关掉外设电之前设置
GPIO_设置不活动(LED1_端口,LED1_引脚);
arch_goto_睡眠(睡眠模式);
……
结果LED1状态一直是高,没有进入延长睡眠。
问题1:请问下工程DSPS_v_5.150.2下默认的广播流程唤醒的地方有哪些吗?
问题2:da14583在进入延长睡眠时间模式后,木卫一口状态是保持掉电前的状态,所以我添加如下代码
而(1)

做{
//安排所有未决事件
在启动()时计划启动;
}
((app_asynch_proc());//将控制权授予应用程序时,请尝试关闭电源
……
切换_led2(500);/500ms周期闪烁

在进行了按键操作,进入延长睡眠时间后,若DA14583成功进入该模式,
led2的状态只有一种把,要么高,要么低。 而我的现象是按键触发后,led2还是在闪烁。
这个现象也说明DA14583没有成功进入延长睡眠把。

期待回复中。

Gongyu_Dialog
离线
最后一次见到:3周1天前
加入:2016-04-27 07:07
之前和你用的工程不一样,对于DSP工程

之前和你用的工程不一样,对于DSP工程,你还需要加个函数把应用程序\默认\睡眠\模式值改掉。因为在用户睡眠检查函数和用户\u sps\u睡眠\u恢复函数还会用到。
另外,就是DSP工程里面的关广播的操作,不会在关后又再重启广播。所以保持默认的就行了。直接调用关广播的函数就可以了。

空白app_button_press_cb(空白)
{
if(GetBits16(系统状态寄存器,PER向下)){
periph_init();
}

如果(arch_get_sleep_mode () = = ARCH_SLEEP_OFF)
{
app_easy_gap_advertise_stop();
arch_设置_睡眠_模式(arch_EXT_睡眠_开启);
用户设置模式(拱门外部睡眠打开)-----------------
user_scheduler_reinit (); / /
拱门可外接唤醒开启();
}
应用程序按钮启用();
}

空白user_sps_set_mode (uint8_t模式)
{
应用\默认\睡眠\模式=模式;
}

index219
离线
最后一次见到:1年3个月前
加入:2016-05-23 07:00
非常感谢,按照如上设置后

非常感谢,按照如上设置后,DA14583成功进入延长睡眠模式下。

zslstandly
离线
最后一次见到:4年10小时前
加入:2016-08-15 06:54
我用的是DSPS_v_5.150.2代码

我用的是DSPS_v_5.150.2代码,我如何设置进入到外景睡眠呢?我将应用程序\默认\睡眠\模式=拱门\外部\睡眠\开启打开,#undef CFG_开发_调试因为我的设备不允许用流控,将#未定义CFG\U UART\U HW\U FLOW\U CTRL、#未定义CFG\U UART\U SW\U FLOW\U CTRL、,下载到外接闪光我用的是14580,但是功耗不正确,BLE接收数据正确,发送数据确不稳定,能否实现呢?请指教,谢谢!

zslstandly
离线
最后一次见到:4年10小时前
加入:2016-08-15 06:54
我如果打开软件流控的话,PC端一直接收11日13

我如果打开软件流控的话,PC端一直接收11日,13日,而且收发数据不正常,谢谢!

doman
离线
最后一次见到:3年8个月前
加入:2016-10-17 09:42
用的是SDK5.04的prox_reporter

用的是SDK5.04的prox_reporter,进入扩展睡眠模式后,电流维持在460 ua左右,怎么都降不下来,jtag去掉也一样,有没有人遇到过相同的问题吗?