问题描述:
1.DSPS_v_5.150.2工程中变量默认初始值:
const static sleep_state_t app_default_sleep_mode = arch_ext_sleep_on;
app_default_sleep_mode =ARCH_EXT_SLEEP_ON在DSPS工程中的含义是开启扩展睡眠模式,在这种情况下测试透传功能,数据传输是不稳定的。
请问一下da14583在arch_ext_sleep_on设置成扩展睡眠模式下,dsps工程的睡眠模式逻辑关键词是怎么样的?工程在什么情况下进入ext_sleep模式,什么情况情况被唤醒?
我查看了关联帖子说要app_default_sleep_mode = arch_sleep_off,dsps工程实现和整机应用程序透传数时才稳定。
但是我想要实现的功能是
如果(条件1==真){
// da14583进入ext_sleep模式
}else {
//实现dsps,及da14583外汇相关性
}
当da14583在ext_sleep模式下由按键和ble事件(ke_timer_set)唤醒da14583
P.S 我调试发现当app_default_sleep_mode =ARCH_EXT_SLEEP_ON的时候,程序运行2s左右就进入LED状态设置了-->GPIO_SetActive( LED_PORT, LED_PIN);
而(1){
... ...
if((sleep_mode == mode_ext_sleep)||(sleep_mode == mode_deep_sleep)){
GPIO_SetActive( LED_PORT, LED_PIN);
//power down the radio and whatever is allowed
Arch_Goto_Sleep(Sleep_Mode);
... ...
2.宏定义:#define CFG_MAX_SLEEP_DURATION_EXTERNAL_WAKEUP_MS 10000 // 10s
请问该销量的10s的10s是什么什么?跟按键唤醒功能功能有关系?
3.请问在DSPS工程下,如何设置进入ext_sleep模式?如何判断da14583已经ext_sleep模式?
问题有多,期房技术支持!
1.开着延长睡眠传输数码,没有不稳定。你需要在PC端的串口工具里设置流控。如果不设置,之前看到容易出现手机APP端收数偶尔会出现乱码。extended sleep进入的条件,可以查看rwip_sleep函数。主要就是检查kernel里面的状态和射频模块等。唤醒的条件,一般就是GPIO的唤醒中断,还有就是kernel里的timer设定。
2.虽然时间是那个的单一的,但在rwip_sleep andie的ke_timer_sleep_check和lld_sleep_check的参例明。现在是第一时代在核有时代的lead oped,sleep_duration设置的就“cfg_max_sleep_duration_external_wakeup_ms”
通讯之梦leep_duration = jump_table_struct [max_sleep_duration_external_wakeup_pos];获得;第二第二函数是给第二的设备时间rwip_env.wakeup_delay。
这两个函数被封住,但大概执行的结果就是:前一个检查定时器下一次起来到当前的时间间隔,后一个检查LLD里event的时间间隔。如果这个值比sleep_duration大,那么睡眠条件满足,返回true;如果这个值比sleep_duration小,但超过wakeup_delay,更新sleep_duration的值,仍然返回true,可以睡。别的情况就不让睡了,返回false。接着按照更新后的sleep_duration值,安排蓝牙协议栈睡眠的时间。所以目前蓝牙协议栈单次最多就是睡10s。这个和按键的中断没有关系。
3.判断是否进入睡眠,可以用smartsnippet连接待测的设备,然后在界面上选择spi/uart模式,在power_profile里面通过看电流就可以判断。
非常感谢。
1.现在我在DSPS工程中设置变量app_default_sleep_mode =ARCH_SLEEP_OFF;关闭睡眠模式的情况下,我该如何手动设置DA14583让其进入extended sleep?
我的设置是:当条件1等于真的时候如下操作,但实际测试DA14583没有进入extended sleep下,我有arch_printf("%d: mode\r\n",__LINE__);一直在打印。
while(1)
{
做 {
//安排所有待处理的事件
schedule_hile_ble_on();
}
而((app_asynch_proc())));//授予控件到应用程序,尝试掉电
... ...
如果(条件1==真){
条件1=假;
ARCH_SET_SLEEP_MODE(ARCH_EXT_SLEEP_ON);
}
}
3.我在开通Smartsnippet连接待测的设备,然后在上面选择spi / uart模式,spi / uart模式选项下没有可可选项,请问smartsnippet检测电源_新智能的是针对官开采开发的么?
P.S我是不是用来的开采舞蹈,在Smartsnippet,♥Uart模式下是有可能的,我也是通讯Smartsnippet->靴子下载到DA110183。
期刊@gongyu_dialog♥。
1.应该直接调用就行,但你有打印的,看uart_callback函数里面是没办法调用到arch_restore_sleep_mode的。
2.测电影的功能,应该是在官方开发诗的,你也可用用力器具上测。
1.我关键地说,在(1)里面的信息(1)中的led的状态控制,当调用作arch_set_sleep_mode(Arch_ext_sleep_on);后,led的状态还是一盏闪烁,表明没有进入延长睡眠模式下。
static uint8_t state = 0;
while(1)
{
做 {
//安排所有待处理的事件
schedule_hile_ble_on();
}
而((app_asynch_proc())));//授予控件到应用程序,尝试掉电
//如果应用程序返回goto_sleep
//((streeData_queue)&& stree_queue_more_data()));//授予对拖缆的控制,尝试向下掉电
... ...
如果(条件1==真){
条件1=假;
ARCH_SET_SLEEP_MODE(ARCH_EXT_SLEEP_ON);
}
// 500ms执行一卷
if(500ms时间到){
if(state == 0){
state = 1;
GPIO_SetActive( LED2_PORT, LED2_PIN);
}别的 {
状态= 0;
gpio_setinactive(LED2_PORT,LED2_PIN);
}
}
@gongyu_dialog直接配置arch_set_sleep_mode(arch_ext_sleep_on);后da14583哈利延长睡眠模式下,请指导一下,还有其他需要注意或者配置的么?
你还需要把ble里奇的计时器和事件关键词,只让外面来唤醒。否则还会把你加入灯代码代码的地方
所以还需要加一句:arch_ble_ext_wakeup_on();
可以参考一下sdk里的user_proxr.ch文件里的
APP_BUTTON_ENABLE幂位以及APP_WAKEUP_CB参数
我加加后
如果(条件1==真){
条件1=假;
ARCH_BLE_EXT_WAKEUP_ON();
ARCH_SET_SLEEP_MODE(ARCH_EXT_SLEEP_ON);
}
代码运行还是会跑到灯控制代码部分。
user_proxr.c里面app_button_enable函数以及app_wakeup_cb函数都是关于按键唤醒的逻辑,
有关关键词延长睡眠模式的操作品!或者我没有找到,请指导下!
非常感谢。
你好,可以是你是用途开采开发板测试下DSPS_V_5.150.2工程,
配置配置下数:
const static sleep_state_t app_default_sleep_mode = arch_sleep_off;
#define cfg_mem_map_ext_sleep.
#undef cfg_mem_map_deep_sleep.
在工程while(1){
//条件批发下载,判断da14583是进入ext_sleep模式
ARCH_SET_SLEEP_MODE(ARCH_EXT_SLEEP_ON);
ARCH_BLE_EXT_WAKEUP_ON();
}
非常感谢!
直接直接用,可以进入睡眠,但会被默认的广播程。延伸睡眠不可能在WFI指令不动箱。仍然会被被栈的消息唤醒。
ARCH_SET_SLEEP_MODE(ARCH_EXT_SLEEP_ON);
ARCH_BLE_EXT_WAKEUP_ON();
如果你需要代码停在WFI指令之前,并且通过GPIO状态显示当前的状态,就需要把广播关掉。
另外,就是GPIO的电平,在进入睡眠后即使外设电关断的情况下,会retention之前的状态。
我这里通过按键进入睡眠的模式,通过GPIO可以观察。
* void app_button_press_cb(void)
{
if(getBits16(sys_stat_reg,per_is_down)){
periph_init();
}
if(arch_get_sleep_mode() == ARCH_SLEEP_OFF)
{
app_easy_gap_advertise_stop();//关键词
ARCH_SET_SLEEP_MODE(ARCH_EXT_SLEEP_ON);
ARCH_BLE_EXT_WAKEUP_ON();
}
app_button_enable();//
}
×关掉广播的相关代码
void user_app_adv_start(void)
{
//安排下一个广告数据更新
// app_addata_update_timer_used = app_easy_timer(app_addata_update_to,adv_data_update_timer_cb);//删掉可以关键词
struct gapm_start_advertise_cmd * cmd;
cmd = app_easy_gap_undirected_advertise_get_active();
// add manufacturer specific data dynamically
mnf_data_update();
app_add_ad_struct(cmd,&mnf_data,sizeof(struct mnf_specific_data_ad_structure));
app_easy_gap_undirected_advertise_start();
}
×关键字次数的广播作作
void user_app_adv_undirect_complete(uint8_t status)
{
// If advertising was canceled then update advertising data and start advertising again
if(status == gap_err_canceled)
{
// user_app_adv_start(); //防止防止用相关性,广播默认又从来
}
}
×增加加入GPIO在数位在
while(1)
{
做 {
test_gpio1(1);---------------------------------------------------------------------------- //拉高GPIO
//安排所有待处理的事件
schedule_hile_ble_on();
}
而((app_asynch_proc())));//授予控件到应用程序,尝试掉电
//如果应用程序返回goto_sleep
//((streeData_queue)&& stree_queue_more_data()));//授予对拖缆的控制,尝试向下掉电
//如果应用程序返回goto_sleep
//wait for interrupt and go to sleep if this is allowed
if(((!ble_app_present)&&(check_gtl_state()))||
(ble_app_present))
{
//禁用中断
global_int_stop();
app_asynch_sleep_proc();
//获取允许的睡眠模式
// time from rwip_power_down() to WFI() must be kept as short as possible!!
sleep_mode = rwip_power_down();
if((sleep_mode == mode_ext_sleep)||(sleep_mode == mode_deep_sleep)){
//power down the radio and whatever is allowed
test_gpio1(0); //-----------------------------------------------------------------------拉低GPIO,在下面的函数关掉外设电之前设置
Arch_Goto_Sleep(Sleep_Mode);
//wait for an interrupt to resume operation
WFI();
//恢复操作
ARCH_RESUME_FROM_SLEEP();
}
......
非常感谢,我在DSPS_v_5.150.2下添加按键进入extended sleep 模式的函数,并且添加一句LED1状态至高,
if(arch_get_sleep_mode() == ARCH_SLEEP_OFF)
{
gpio_setactive(LED1_PORT,LED1_PIN);//确认确认响应应到了
app_easy_gap_advertise_stop();//关键词
ARCH_SET_SLEEP_MODE(ARCH_EXT_SLEEP_ON);
ARCH_BLE_EXT_WAKEUP_ON();
}
同样在以下地方置低LED1作为判断是否进入extended sleep 模式的标志
... ...
if((sleep_mode == mode_ext_sleep)||(sleep_mode == mode_deep_sleep)){
//power down the radio and whatever is allowed
/ / test_gpio1 (0);//-------------------------------------------------------------------------------------拉低GPIO,在下面的函数关掉外设电之前设置
gpio_setinactive(LED1_PORT,LED1_pin);
Arch_Goto_Sleep(Sleep_Mode);
... ...
结果LED1状态一直是高,没有进入extended sleep。
问题1:请问下工程DSPS_v_5.150.2下默认的广播流程唤醒的地方有哪些?
问题2:da14583在进入延长睡眠状态模式后,io口状态是保持保持电源的状态,我加入了下代码
while(1)
{
做 {
//安排所有待处理的事件
schedule_hile_ble_on();
}
而((app_asynch_proc())));//授予控件到应用程序,尝试掉电
... ...
toggle_led2(500);// 500ms周期闪烁
}
在进行了按键作品,进入延长睡眠后,若da14583成功进入模式,
LED2的状态有一盏把,要么高,要么低。而我的现象。而,LED2,在闪烁。
这个现象也说明DA14583没有成功进入extended sleep把。
期间回复中。
之前和你用的工程不一一,对于dsps工程,你还还加数把app_default_sleep_mode值值。在user_sps_sleep_check次数和user_sps_sleep_restore anify oili oilcie到。
户外,就是dsps工程里的关怀,不在于后又再广播。所以保持默认的就了了。
void app_button_press_cb(void)
{
if(getBits16(sys_stat_reg,per_is_down)){
periph_init();
}
if(arch_get_sleep_mode() == ARCH_SLEEP_OFF)
{
app_easy_gap_advertise_stop();
ARCH_SET_SLEEP_MODE(ARCH_EXT_SLEEP_ON);
user_sps_set_mode(Arch_ext_sleep_on); -----------------
user_scheduler_reinit();//
ARCH_BLE_EXT_WAKEUP_ON();
}
app_button_enable();
}
void user_sps_set_mode(uint8_t mode)
{
app_default_sleep_mode = mode;
}
非常感谢,按照按照上设置后,DA14583成功进入extended sleep模式下。
我用的是DSPS_v_5.150.2代码,我如何设置进入到EXT_SLEEP呢?我将app_default_sleep_mode = ARCH_EXT_SLEEP_ON打开,#是undef CFG_DEVELOPMENT_DEBUG,因为我的设备不允许用流控,将和#undef CFG_UART_HW_FLOW_CTRL,#是undef CFG_UART_SW_FLOW_CTRL,下载到外接闪光,我用来的是14580,但功耗不正常,BLE接收数码正,发表数码不统,能否能否呢?请指教,谢谢!
我如果打开软件流控的话,PC端一直接收11、13,而且收发数据不正常,谢谢!
用的是SDK5.04的prox_reporter,进入扩展睡眠模式后,电流维持在460uA左右,怎么都降不下来,jtag去掉也一样,有没有人遇到过相同的问题?