DSP使用GPIO控制延长睡眠并唤醒。

13个帖子/ 0新
最后一篇
车道
离线
最后一次露面:4周1天前
加入:2015-07-14 14:21
DSP使用GPIO控制延长睡眠并唤醒。

嗨对话框

使用DSPS 3.150.2设备项目进行数据传输时出现了一些问题。da4580_config.h设置为:
#define cfg_ext_sleep.
#undef.CFG_DEEP_SLEEP
但是,当我与我的对等设备连接时,它也进入睡眠模式,数据传输将丢失,所以我想知道如何设置GPIO唤醒以确保DA不进入睡眠。我是根据《AN-B-026 DA14580外部唤醒机制》来配置的:

#定义外部唤醒1
......
ext_wakeup_enable(UART1_CTSN_GPIO_PORT, UART1_CTSN_GPIO_PIN, 1);
......
这是我修改的任何其他设置,以通过GPIO唤醒DA。

TKS

设备:
mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 34
嗨,莱恩,

嗨,莱恩,

为了检查您如何启用外部唤醒机制以及如何注册回调功能,请查看App_button_press_cb()函数中的智能标记参考设计。另请参阅10.7唤醒定时器的文档UM-B-051。

谢谢mt_dialog.

车道
离线
最后一次露面:4周1天前
加入:2015-07-14 14:21
嗨,对话,

嗨,对话,
have read the section 10.7 in document UM-B-051, and setup the program as it. But DA14580 still in sleep
这是检察官睡觉前我的密码:
app_set_extended_sleep();
app_ble_ext_wakeup_on();
ext_wakeup_enable(uart1_cts_port,uart1_cts_pin,1);
SCB->SCR |= 1<<2; // enable sleepdeep mode bit in System Control Register (SCR[2]=SLEEPDEEP)
SetBits16(SYS_CTRL_REG, PAD_LATCH_EN, 1); // activate PAD latches
SetBits16(PMU\u CTRL\u REG,RADIO\u SLEEP,1);//关掉收音机
SetBits16(PMU\u CTRL\u REG,PERIPH\u SLEEP,0);//关闭外围电源域
setbits16(sys_ctrl_reg,ret_sysram,1);//关闭系统RAM =>所有数据都将丢失
the function "ext_wakeup_enable()":
void ext_wakeup_enable(uint32_t端口,uint32_t pin,uint8_t极性)
{
rwip_env.ext_wakeup_enable=2;
#如果开发\u调试
保留\u GPIO(EXT \u WAKEUP \u GPIO,(GPIO \u PORT)PORT,(GPIO \u PIN)PIN,PID \u GPIO);
#结束
保留\u GPIO(EXT \u WAKEUP \u GPIO,(GPIO \u PORT)PORT,(GPIO \u PIN)PIN,PID \u GPIO);
if(极性== 0)//高电平
GPIO_ConfigurePin((GPIO_PORT)PORT,(GPIO_PIN)PIN,INPUT_PULLUP,PID_GPIO,false);//低电平有效。将默认设置为“输入高”。
else // active high
GPIO_ConfigurePin((GPIO_PORT)PORT,(GPIO_PIN)PIN,INPUT_PULLDOWN,PID_GPIO,false);//高活性。将默认设置为输入低。

wkupct_register_callback(ext_wakeup_cb);

wkupct_enable_irq(1 <

车道
离线
最后一次露面:4周1天前
加入:2015-07-14 14:21
(无主题)
mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 34
嗨,莱恩,

嗨,莱恩,

请遵循智能标记参考设计中的示例,为了唤醒,请检查app\u button\u press\u cb()函数(从按钮唤醒da)。您可以通过使用一个按钮来唤醒配置,然后实现CTS唤醒来检查配置是否正常。

谢谢mt_dialog.

车道
离线
最后一次露面:4周1天前
加入:2015-07-14 14:21
thank you very much,I have

非常感谢你,我发现了问题,它已经解决了.AS跟随:
在函数“wkupct\u enable\u irq()”中说:@param[in]sel\u pins Select enabled inputs。位0-7->端口0(P00..P07),位8-13->端口1(P10..P15),位14-15->端口2(P28,P29),位->16-23端口2(P00..P07),位24-31->端口3(P30..P37)。0-禁用,1-启用。
我使用p2_3端口唤醒,但在函数“ext_wakeup_enable()”中,行为wkupct_enable_irq(1 <

光盘
离线
最后一次露面:3年10个月前
加入:2015-11-18 02:51
谢谢你和莱恩先生的对话,

谢谢你和莱恩先生的对话,

我也遇到了同样的问题。莱恩应该在右边。SDK 5.0.3(以及SDK 3.x.x)中的以下函数似乎有问题。。。


void ext_wakeup_enable(uint32_t端口,uint32_t pin,uint8_t极性)
{
rwip_env.ext_wakeup_enable=2;
#如果开发\u调试
保留\u GPIO(EXT \u WAKEUP \u GPIO,(GPIO \u PORT)PORT,(GPIO \u PIN)PIN,PID \u GPIO);
#结束
if(极性== 0)//高电平
GPIO_ConfigurePin((GPIO_PORT)PORT,(GPIO_PIN)PIN,INPUT_PULLUP,PID_GPIO,false);//低电平有效。将默认设置为“输入高”。
else // active high
GPIO_ConfigurePin((GPIO_PORT)PORT,(GPIO_PIN)PIN,INPUT_PULLDOWN,PID_GPIO,false);//高活性。将默认设置为输入低。

wkupct_register_callback(ext_wakeup_cb);

wkupct_enable_irq(1 <}

如果我们称之为:
ext_wakeup_enable(gpio_port_2,gpio_pin_3,0)
此方法呼叫wkupct_enable_irq()函数错误的参数到底。
wkupct_enable_irq()function needs following parameters:

/**
****************************************************************************************
*@brief启用唤醒IRQ。
*
* @param [in] sel_pins选择已启用的输入。位0-7 - >端口0(端口00..p07),位8-13 - >端口1(p10..p15),位14-15 - >端口2(p28,p29),位 - > 16-23端口2(端口00..p07),位24-31 - >端口3(P30..p37)。0禁用,1启用。
*@param[in]pol\u pins输入极性。位0-7->端口0(端口00..P07),位8-13->端口1(P10..P15),位14-15->端口2(P28,P29),位->16-23端口2(端口00..P07),位24-31->端口3(P30..P37)。0-高,1-低。
* @param [in] event_num唤醒中断前的事件数。最多255。
*@param[in]去抖动时间去抖动时间。最大0x3F。
*
*@返回无效
****************************************************************************************
*/
void wkupct_enable_irq(uint32_t sel_pins,uint32_t pol_pins,uint16_t events_num,uint16_t deb_time)

如果有良好的解决方案来解决这个问题,请告诉我。

Thanks for your support in advance.

Best regards,
光盘

mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 34
嗨CD,

嗨CD,

ext_wakeup_enable是一个应该只使用完整的嵌入式设计时使用的函数,但这种实现不是由于您尝试使用它的原因。For using the wake up controller please use the API implementation of the wakeup driver. You can find examples in the reference designs which is similar to the implementation of the ext_wakeup_enable.

谢谢mt_dialog.

光盘
离线
最后一次露面:3年10个月前
加入:2015-11-18 02:51
嗨mt_dialog,

嗨mt_dialog,

感谢您的快速回复。

对不起,我变得困惑......请让我确认那里的东西....

1. My environment: I would like to use DA14583 as the FULL EMBEDDED design.
你的评论是:

ext_wakeup_enable是一个应该只使用完整的嵌入式设计时使用的函数,但这种实现不是由于您尝试使用它的原因。

我可以为完整的嵌入式设计系统使用ext\u wakeup\u enable()函数吗?或者您想让ext\u wakeup\u enable()函数与“运行主机应用程序的外部处理器”一起使用吗?
In source code, there are some comments about these things, but it's really confusing to me...

- da1458x_config_advanced.h -
LINE
64 / *************************************************** /
65 / *唤醒外部处理器运行主机应用程序。*/
66 /***************************************************/
67#未定义CFGŠ外部Š唤醒

- arch.h -
LINE
210#如果定义(CFG#外部#唤醒)
211 #define external_wakeup 1
212 #else.
213 #define external_wakeup 0
214 #ENDIF.
.....
388#如果((外部唤醒)&&(!BLE\u APP\u PRESENT))//外部唤醒,仅在full embedded设计
389 void ext_wakeup_enable(uint32_t port, uint32_t pin, uint8_t polarity);
390 void ext_wakeup_disable(void);
391 void ext_wakeup_cb(void);
392#结束

- arch_main.c -
静态内联空拱门转到睡眠(睡眠\u模式\u t当前睡眠\u模式)
{
sleep_mode_t sleep_mode = current_sleep_mode;
ble_turn_radio_off ( );
//关闭收音机并检查我们是否可以深入睡眠
sleep_mode = ble_validate_sleep_mode(sleep_mode);
//授予对申请的访问检查我们是否可以睡觉
app_sleep_prepare_proc(&sleep_mode);// SDK的均匀性改进此一个应该改变这个?
//根据当前睡眠模式关闭外设
关闭外围设备(睡眠模式);
#if(use_power_optimizations)
fine_hit = false;
#结束
// hook for app specific tasks just before sleeping
app_sleep_entry_proc(sleep_mode);
#if((hyperent_wakeup)&&(!ble_app_present))//外部唤醒,只有外部处理器设计
ext_wakeup_enable(gpio_port_2,gpio_pin_2,0);
#结束
//做最后一个房子保持钟表并睡觉
ARCH_SWITCH_CLOCK_GOTO_SLEEP(Sleep_Mode);
}

- arch_system.c -
#如果((外部唤醒)&&(!BLE_APP_PRESENT))//仅在full embedded设计
/**
****************************************************************************************
*@brief Enable external wake up GPIO Interrupt.
* @param [in] gpio_port。外部唤醒信号的GPIO端口
*@param[in]GPIO\u引脚。外部唤醒信号的GPIO引脚
* @param [in]极性。外部唤醒中断的极性。0 =电源低。1 =活跃高
* @return void。
****************************************************************************************
*/
void ext_wakeup_enable(uint32_t端口,uint32_t pin,uint8_t极性)
{
rwip_env.ext_wakeup_enable=2;
if(development_debug)
保留\u GPIO(EXT \u WAKEUP \u GPIO,(GPIO \u PORT)PORT,(GPIO \u PIN)PIN,PID \u GPIO);
if(极性== 0)//高电平
GPIO_ConfigurePin((GPIO_PORT)PORT,(GPIO_PIN)PIN,INPUT_PULLUP,PID_GPIO,false);//低电平有效。将默认设置为“输入高”。
else // active high
GPIO_ConfigurePin((GPIO_PORT)PORT,(GPIO_PIN)PIN,INPUT_PULLDOWN,PID_GPIO,false);//高活性。将默认设置为输入低。
wkupct_register_callback(ext_wakeup_cb);
wkupct_enable_irq(1 <}

正如我在上面列出的,有相同的#if语句“#if((EXTERNALŠu WAKEUP)&&(!BLE_APP_PRESENT)),但这些注释与每个文件或函数的完全嵌入式和外部处理器混合在一起。
如果我使用DA1458x作为一个完整的嵌入式设计,我应该代码如下,是对吗???:

#undef.CFG\u外部唤醒

And ext_wakeup_enable() in arch_goto_sleep() function is NOT called when full embedded design system, isn't it?! Is my understanding right?!?
因此,如上所述,我们必须使用唤醒控制器来唤醒全嵌入式设计系统。我相信醒来的代码将是如下所示:
1st:在系统唤醒时注册回调函数:使用wkupct_register_callback()
2nd: Enable IRQ for wakeup: wkupct_enable_irq(0x40000, 0x40000, 1, 0); // i.e. P2_2, active low for P2_2, 1 event, debouncing time = 0ms
My systems seems to wake up when I coded above. ( Let me check some sample projects from Dialog regarding GPIO wakeup.)

3.尽管ext\u wakeup\u enable()只设计用于完全嵌入式(或外部处理器主机?)设计,但我认为arch\u system.c中的ext\u wakeup\u enable()函数似乎是错误的,正如Lane提到的那样。
ext\u wakeup \u enable()函数需要3个参数,wakeup GPIO port、pin和polarity。因此,如果用户想唤醒P2泷2,激活事件较少,可以这样调用:ext泷wakeup泷enable(GPIO泷u PORT泷2,GPIO泷u PIN泷2,0)。
另一方面,在ext\ u wakeup\ u enable()函数中,端口信息(即GPIO\ u port\ u 2)完全丢失。wkupct \u enable \u irq()函数需要位表达式来选择端口和pin,包括端口信息。ext\u wakeup \u enable()的当前代码只能处理端口\u 0上的信号更改(换句话说,ext\u wakeup\u enable(GPIO\u PORT\u 2,GPIO\u PIN\u 2,0)将在ext\u wakeup\u enable()函数中被修改为GPIO\u PORT\u 0,GPIO\u PIN\u 2,低活动事件。

抱歉我的长期回复,但如果您能提供任何意见,那就非常感谢。

谢谢你的大力支持。

Best regards,
光盘

mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 34
嗨CD,

嗨CD,

只是一些说明完全嵌入->应用程序在外部MCU上运行,完全托管->应用程序在DA上运行

我没有意识到您使用完全嵌入的设计(从外部主机运行),因为您是,那么是的,您可以使用该函数。这是代码假定您只能从端口0中使用引脚。此部分必须更正,并将在将来的SDK版本中。如果您要使用完全嵌入的设计,并且您将应用程序从外部主机运行,并且希望您的设备从外部MCU唤醒,那么您必须配置外部唤醒。ext_wakeup_enable()用于完全嵌入式设计(因为应用程序应从外部Proccessor唤醒)。如果您的设计完全托管,那么您应该使用您提到的代码。

谢谢mt_dialog.

光盘
离线
最后一次露面:3年10个月前
加入:2015-11-18 02:51
你好,先生,

你好,先生,

非常感谢您的评论。
是的,你说得对。我把“完全嵌入”和“完全托管”混为一谈。我很抱歉。。。

如您所提到的,我们希望使用DA1458x作为“完全托管”的设计(使用DA作为集成处理器)。

所以我必须像下面的代码一样,是对吗?

#undef.CFG\u外部唤醒
Register callback function when system wakes up:using wkupct_register_callback()
为唤醒启用IRQ:wkupct_enable_irq(0x40000,0x40000,1,0);//i、 e.P2琰2,P2琰2的低电平有效,1个事件,去抖动时间=0毫秒

Thanks again,
光盘

mt_dialog.
离线
最后一次露面:2个月2周前
职员
加入:2015-06-08 34
嗨CD,

嗨CD,

是的,没错,注册回调(wkupct\u register\u callback(your function))并将管脚和极性启用到相应的管脚(wkupct\u enable\u irq())。

谢谢mt_dialog.

光盘
离线
最后一次露面:3年10个月前
加入:2015-11-18 02:51
你好,先生,

你好,先生,

非常感谢您的确认。
现在,一切都清楚了!!

非常感谢,
光盘

主题锁定