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

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

嗨对话框

有一些问题,我是使用DSPS 3.150.2设备项目来进行数据传输。da4580_config.h被设置为:
#define cfg_ext_sleep.
#undef cfg_deep_sleep.
但是,当我与我的同伴divce,它也进入睡眠模式和数据传输将会丢失,所以我想知道如何设置一个GPIO唤醒,以确保达没有进入睡眠,我是根据设定的“- b - 026 DA14580外部唤醒机制”来配置:

#定义EXTERNAL_WAKEUP 1
......
ext_wakeup_enable(uart1_ctsn_gpio_port,uart1_ctsn_gpio_pin,1);
......
是任何其他设置,我已经修改了唤醒的DA由GPIO。

TKS

设备:
mt_dialog.
离线
最后一次露面:4个月1日前
职员
加入:2015-06-08 11:34
你好,

你好,

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

谢谢mt_dialog.

车道
离线
最后一次露面:1天22小时前
加入:2015-07-14 14:21
嗨,对话框中,

嗨,对话框中,
已阅读文档UM-B-051中的10.7节,并将程序设置为它。但DA14580仍然在睡眠状态
这是我在地检睡觉前的代码
app_set_extended_sleep();
app_ble_ext_wakeup_on();
ext_wakeup_enable(uart1_cts_port,uart1_cts_pin,1);
scb-> scr | = 1 << 2;//在系统控制寄存器中启用睡眠模式位(SCR [2] = SleepDeep)
SetBits16(Sys_ctrl_reg,pad_latch_en,1);//激活焊盘锁存器
SetBits16 (PMU_CTRL_REG RADIO_SLEEP 1);//关掉收音机
SetBits16 (PMU_CTRL_REG PERIPH_SLEEP 0);//关闭外部电源
setbits16(sys_ctrl_reg,ret_sysram,1);//关闭系统RAM =>所有数据都将丢失
函数“ext_wakeup_enable()”:
void ext_wakeup_enable(uint32_t端口,uint32_t pin,uint8_t极性)
{
rwip_env。ext_wakeup_enable = 2;
#如果DEVELOPMENT_DEBUG
RESERVE_GPIO(EXT_WAKEUP_GPIO, (GPIO_PORT) port, (GPIO_PIN) pin, PID_GPIO);
# endif
RESERVE_GPIO(EXT_WAKEUP_GPIO, (GPIO_PORT) port, (GPIO_PIN) pin, PID_GPIO);
if(极性== 0)//高电平
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLUP, PID_GPIO, false);/ /活性低。设置默认为输入高。
否则//主动高
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLDOWN, PID_GPIO, false);/ /活性高。设置默认为低输入。

wkupct_register_callback(ext_wakeup_cb);

wkupct_enable_irq(1 <

车道
离线
最后一次露面:1天22小时前
加入:2015-07-14 14:21
(无主题)
mt_dialog.
离线
最后一次露面:4个月1日前
职员
加入:2015-06-08 11:34
你好,

你好,

请按照Smart Tag参考设计中的示例来唤醒,检查app_button_press_cb()函数(从按钮中唤醒da)。您可以通过使用一个按钮来检查配置是否正确,然后实现CTS唤醒。

谢谢mt_dialog.

车道
离线
最后一次露面:1天22小时前
加入:2015-07-14 14:21
非常感谢,我有

非常感谢你,我发现了问题,它已经解决了.AS跟随:
在函数" wkupct_enable_irq() "中说:位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年12个月前
加入:2015-11-18 02:51
谢谢Lane和MT_dialog,

谢谢Lane和MT_dialog,

我也遇到了同样的问题。莱恩应该是对的。以下功能在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;
#如果DEVELOPMENT_DEBUG
RESERVE_GPIO(EXT_WAKEUP_GPIO, (GPIO_PORT) port, (GPIO_PIN) pin, PID_GPIO);
# endif
if(极性== 0)//高电平
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLUP, PID_GPIO, false);/ /活性低。设置默认为输入高。
否则//主动高
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLDOWN, PID_GPIO, false);/ /活性高。设置默认为低输入。

wkupct_register_callback(ext_wakeup_cb);

wkupct_enable_irq(1 << PIN,(UINT32_T)(极性== 0)?(1 << PIN):( 0),1,0);// PIN,有效低/高,1个事件,DEBOUNCING TIME = 0ms
}

如果我们称之为:
ext_wakeup_enable(gpio_port_2,gpio_pin_3,0)
此方法呼叫wkupct_enable_irq()函数与错误的参数到底。
wkupct_enable_irq()函数需要以下参数:

/ **
****************************************************************************************
* @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_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-high 1-low。
* @param [in] event_num唤醒中断前的事件数。最多255。
* @param[in] deb_time恢复时间。马克斯0 x3f。
*
* @return无效
****************************************************************************************
*/
void wkupct_enable_irq(uint32_t sel_pins,uint32_t pol_pins,uint16_t events_num,uint16_t deb_time)

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

感谢您提前支持。

最好的祝福,
光盘

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

嗨CD,

ext_wakeup_enable是一个应该只使用完整的嵌入式设计时使用的函数,但这种实现不是由于您尝试使用它的原因。对于使用唤醒控制器,请使用唤醒驱动程序的API实现。您可以在参考设计中找到类似于ext_wakeup_enable的实现的示例。

谢谢mt_dialog.

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

嗨mt_dialog,

感谢您的快速回复。

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

1.我的环境:我想使用DA14583作为完整的嵌入式设计。
你的评论是:

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

我可以在全嵌入式设计系统中使用ext_wakeup_enable()函数吗?还是说ext_wakeup_enable()函数应该与“外部处理器运行主机应用程序”一起使用?
在源代码中,有一些关于这些东西的评论,但它真的很困惑......

- da1458x_config_advanced.h -
线
64 / *************************************************** /
65 / *唤醒外部处理器运行主机应用程序。*/
66年 /***************************************************/
67 # undef CFG_EXTERNAL_WAKEUP

- arch.h -
线
210 #如果定义(CFG_EXTERNAL_WAKEUP)
211 #define external_wakeup 1
212 #else.
213 #define external_wakeup 0
214 #ENDIF.
.....
388 #if ((EXTERNAL_WAKEUP) && (!BLE_APP_PRESENT)) //外部唤醒,仅在全嵌入式设计
389 void ext_wakeup_enable(uint32_t端口,uint32_t引脚,uint8_t极性);
390 void ext_wakeup_disable(void);
391 void ext_wakeup_cb(void);
392 # endif

- arch_main.c -
静态inline void arch_goto_sleep (sleep_mode_t current_sleep_mode)
{
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的均匀性改进此一个应该改变这个?
//根据当前睡眠模式关闭外设
arch_turn_peripherals_off (sleep_mode);
#if(use_power_optimizations)
fine_hit = false;
# endif
//睡觉前的应用程序特定任务
app_sleep_entry_proc(sleep_mode);
#if((hyperent_wakeup)&&(!ble_app_present))//外部唤醒,只有外部处理器设计
ext_wakeup_enable(gpio_port_2,gpio_pin_2,0);
# endif
//做最后一个房子保持钟表并睡觉
ARCH_SWITCH_CLOCK_GOTO_SLEEP(Sleep_Mode);
}

- ARCH_SYSTEM.C -
#if ((EXTERNAL_WAKEUP) && (!BLE_APP_PRESENT)) //只在全嵌入式设计
/ **
****************************************************************************************
* @brief启用外部唤醒GPIO中断。
* @param [in] gpio_port。外部唤醒信号的GPIO端口
* @param[在]GPIO_PIN。外部唤醒信号的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)
RESERVE_GPIO(EXT_WAKEUP_GPIO, (GPIO_PORT) port, (GPIO_PIN) pin, PID_GPIO);
if(极性== 0)//高电平
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLUP, PID_GPIO, false);/ /活性低。设置默认为输入高。
否则//主动高
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLDOWN, PID_GPIO, false);/ /活性高。设置默认为低输入。
wkupct_register_callback(ext_wakeup_cb);
wkupct_enable_irq(1 << PIN,(UINT32_T)(极性== 0)?(1 << PIN):( 0),1,0);// PIN,有效低/高,1个事件,DEBOUNCING TIME = 0ms
}

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

#undef.CFG_EXTERNAL_WAKEUP

Arch_goto_sleep()ext_wakeup_enable()在完整的嵌入式设计系统时未调用,不是吗?!是我的理解吗?!?
因此,如上所述,我们必须使用唤醒控制器来唤醒全嵌入式设计系统。我相信醒来的代码将是如下所示:
1st:在系统唤醒时注册回调函数:使用wkupct_register_callback()
2nd:启用IRQ for WakeUp:WKUPCT_ENABLE_IRQ(0x40000,0x40000,1,0);//即P2_2, P2_2活跃低,1事件,解除时间= 0ms
当我编写上面时,我的系统似乎醒来。(让我查看关于GPIO唤醒的对话框的一些示例项目。)

3.虽然ext_wakeup_enable()只设计为完全嵌入式(或外部处理器主机?)设计,但arch_system.c中的ext_wakeup_enable()函数似乎是错误的,我想Lane也提到过。
ext_wakeup_enable()函数需要3个参数,唤醒GPIO端口,引脚和极性。因此,如果用户想用低活动事件唤醒P2_2,用户可以这样调用:ext_wakeup_enable(GPIO_PORT_2, GPIO_PIN_2, 0)。
另一方面,在ext_wakeup_enable()函数中,端口信息(例如。GPIO_PORT_2)完全丢失。函数Wkupct_enable_irq()需要位表达式来选择端口和引脚,包括端口信息。ext_wakeup_enable()的当前代码只能处理PORT_0上的信号变化。(换句话说,ext_wakeup_enable(GPIO_PORT_2, GPIO_PIN_2, 0)将被修改为GPIO_PORT_0, GPIO_PIN_2,在ext_wakeup_enable()函数中带有低活动事件。

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

谢谢你的大力支持。

最好的祝福,
光盘

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

嗨CD,

>应用运行在外部MCU上,>应用运行在DA上

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

谢谢mt_dialog.

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

嗨太,

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

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

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

#undef.CFG_EXTERNAL_WAKEUP
系统唤醒时注册回调函数:使用wkupct_register_callback()
开启唤醒IRQ功能: wkupct_enable_irq(0x40000, 0x40000, 1,0);//即P2_2, P2_2活跃低,1事件,解除时间= 0ms

再次感谢,
光盘

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

嗨CD,

是的,这是正确的,注册你的回调(wkupct_register_callback(你的函数)),并启用引脚和极性到适当的引脚(wkupct_enable_irq())。

谢谢mt_dialog.

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

嗨太,

非常感谢您的确认。
现在,很明显! !

非常感谢,
光盘

主题锁定