DSPS使用GPIO控制其扩展的睡眠和唤醒。

13个员额/ 0个新员额
最后发表
车道
离线
最后看到:1个月20小时前
加入:2015-07-14 14:21
DSPS使用GPIO控制其扩展的睡眠和唤醒。

嗨对话框

有一些问题是我使用DSP 3.150.2设备项目来数据传输。DA4580_CONFIG.H已设置为:
#定义CFG_EXT_SLEEP
# undef CFG_DEEP_SLEEP
但是,当我与我的同伴角度联系时,它也进入睡眠模式,数据传输将会丢失,所以我想知道如何设置一个gpio唤醒,以确保da没有进入睡眠。我被设置为“AN-B-026DA14580外部唤醒机制”根据配置:

#define external_wakeup 1
......
ext_wakeup_enable (UART1_CTSN_GPIO_PORT UART1_CTSN_GPIO_PIN 1);
......
是我修改的任何其他设置以由GPIO唤醒。

谢谢大家

关键词:
设备:
MT_dialog
离线
最后看到:2个月3个星期前
工作人员
加入:2015-06-08 11:34
嗨巷,

嗨巷,

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

由于MT_dialog

车道
离线
最后看到:1个月20小时前
加入: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);
渣打银行——>可控硅| = 1 < < 2;//在系统控制寄存器中启用休眠模式位(SCR[2]= sleepdeep)
SetBits16 (SYS_CTRL_REG PAD_LATCH_EN 1);//激活PAD锁存
setbits16(pmu_ctrl_reg,radio_sleep,1);//关闭收音机
setBits16(PMU_CTRL_REG,PERIPH_SLEEP,0);//关闭外围电源域
SetBits16 (SYS_CTRL_REG RET_SYSRAM 1);//关闭系统内存=>所有数据将丢失
函数“ext_wakeup_enable ()":
ext_wakeup_enable(uint32_t port, uint32_t pin, uint8_t极性)
{
rwip_env.ext_wakeup_enable = 2;
#if development_debug.
Letail_GPIO(ext_wakeup_gpio,(gpio_port)端口,(gpio_pin)pin,pid_gpio);
#万一
Letail_GPIO(ext_wakeup_gpio,(gpio_port)端口,(gpio_pin)pin,pid_gpio);
If(极性== 0)//有效低
gpio_configurepin((gpio_port)端口,(gpio_pin)引脚,input_pullup,pid_gpio,false);//电源低。设置默认值以输入高。
Else //激活高
gpio_configurepin((gpio_port)端口,(gpio_pin)引脚,input_pulldown,pid_gpio,false);//主动高。将默认值设置为低电平。

wkupct_register_callback (ext_wakeup_cb);

wkupct_enable_irq (1 <

车道
离线
最后看到:1个月20小时前
加入:2015-07-14 14:21
(无主题)
MT_dialog
离线
最后看到:2个月3个星期前
工作人员
加入:2015-06-08 11:34
嗨巷,

嗨巷,

请按照智能标记参考设计中的示例进行唤醒,检查App_button_press_cb()函数(从按钮唤醒da)。您可以通过使用按钮唤醒并唤醒CTS唤醒来检查配置是否正常。

由于MT_dialog

车道
离线
最后看到:1个月20小时前
加入:2015-07-14 14:21
非常感谢,我已经

非常感谢,我发现了问题,已经解决了,如下:
在功能中,“wkupct_enable_irq()”说:@param [in] sel_pins选择已启用的输入。位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-disabled 1-enabled。
我使用P2_3端口来唤醒,但是在ext_wakeup_enable()函数中,行是wkupct_enable_irq(1<

CD
离线
最后看到:3年10个月前
加入:2015-11-18 02:51
谢谢Lane和MT_Dialog,

谢谢Lane和MT_Dialog,

我刚遇到了同样的问题。车道应该是对的。在SDK 5.0.3中的函数遵循(也是SDK 3.x.x)似乎有问题......


ext_wakeup_enable(uint32_t port, uint32_t pin, uint8_t极性)
{
rwip_env.ext_wakeup_enable = 2;
#if development_debug.
Letail_GPIO(ext_wakeup_gpio,(gpio_port)端口,(gpio_pin)pin,pid_gpio);
#万一
If(极性== 0)//有效低
gpio_configurepin((gpio_port)端口,(gpio_pin)引脚,input_pullup,pid_gpio,false);//电源低。设置默认值以输入高。
Else //激活高
gpio_configurepin((gpio_port)端口,(gpio_pin)引脚,input_pulldown,pid_gpio,false);//主动高。将默认值设置为低电平。

wkupct_register_callback (ext_wakeup_cb);

wkupct_enable_irq(1 < <销(uint32_t)(极性= = 0)?(1 < <销):(0),1,0);//引脚,主动低/高,1事件,去噪时间= 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-disabled 1-enabled。
* @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高,1低。
* @param[in] events_num唤醒中断前的事件数。Max 255。
* @param [in] deb_time debouncing时间。最大0x3f。

* @return void.
****************************************************************************************
* /
Void wkupct_enable_irq(uint32_t sel_pins, uint32_t pol_pins, uint16_t events_num, uint16_t deb_time)

如果有好的解决方案,请让我知道。

提前感谢您的支持。

最好的问候,
CD

MT_dialog
离线
最后看到:2个月3个星期前
工作人员
加入:2015-06-08 11:34
嗨,CD,

嗨,CD,

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

由于MT_dialog

CD
离线
最后看到:3年10个月前
加入:2015-11-18 02:51
嗨MT_dialog,

嗨MT_dialog,

谢谢你的快速回复。

对不起,我有点糊涂了……请让我在这里确认一下....

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

ext_wakeup_enable是一个只应该在全嵌入式设计中使用的函数,这个实现不是您尝试使用它的原因。

我可以使用全嵌入式设计系统的ext_wakeup_enable()函数吗?或者您想要表示ext_wakeup_enable()函数应该与“运行主机应用程序的外部处理器”一起使用?
在源代码中,有一些关于这些东西的注释,但它真的让我困惑……

- da1458x_config_advanced.h

64年 /***************************************************/
65 /*从运行主机应用程序的外部处理器。* /
66 / *************************************************** /
67 #undef cfg_external_wakeup.

- arch.h

210 #f定义(CFG_EXTERNAL_WAKEUP)
定义EXTERNAL_WAKEUP
其他212 #
定义EXTERNAL_WAKEUP
214 # endif
.....
388 #f((hyperent_wakeup)&&(!ble_app_present))//外部唤醒,只在完整的嵌入式设计
389 void ext_wakeup_enable(uint32_t port, uint32_t pin, uint8_t极性);
390年空白ext_wakeup_disable(无效);
391年空白ext_wakeup_cb(无效);
392 #ENDIF.

- arch_main.c
静态内联void arch_goto_sleep(sleep_mode_t current_sleep_mode)
{
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_PERITITALLE_OFF(Sleep_Mode);
#如果(USE_POWER_OPTIMIZATIONS)
fine_hit = false;
#万一
//为应用程序特定的任务在睡觉前
app_sleep_entry_proc (sleep_mode);
#if ((EXTERNAL_WAKEUP) && (!BLE_APP_PRESENT) //外部唤醒,仅在外部处理器设计
ext_wakeup_enable (GPIO_PORT_2 GPIO_PIN_2 0);
#万一
//做最后一件家务事,然后去睡觉
arch_switch_clock_goto_sleep (sleep_mode);

- arch_system.c
#if((hyperent_wakeup)&&(!ble_app_present))//只有完整的嵌入式设计
/**
****************************************************************************************
启用外部唤醒GPIO中断。
* @param[在]GPIO_PORT。外部唤醒信号的GPIO端口
* @param [in] gpio_pin。外部唤醒信号的GPIO引脚
* @param[在]极性。外部唤醒中断的极性。0 =活性低。1 =活性高
* @return空白。
****************************************************************************************
* /
ext_wakeup_enable(uint32_t port, uint32_t pin, uint8_t极性)
{
rwip_env.ext_wakeup_enable = 2;
如果(DEVELOPMENT_DEBUG)
Letail_GPIO(ext_wakeup_gpio,(gpio_port)端口,(gpio_pin)pin,pid_gpio);
If(极性== 0)//有效低
gpio_configurepin((gpio_port)端口,(gpio_pin)引脚,input_pullup,pid_gpio,false);//电源低。设置默认值以输入高。
Else //激活高
gpio_configurepin((gpio_port)端口,(gpio_pin)引脚,input_pulldown,pid_gpio,false);//主动高。将默认值设置为低电平。
wkupct_register_callback (ext_wakeup_cb);
wkupct_enable_irq(1 < <销(uint32_t)(极性= = 0)?(1 < <销):(0),1,0);//引脚,主动低/高,1事件,去噪时间= 0ms

正如我上面所列出的那样,有相同的#if语句“#if((hyperent_wakeup)&&(!ble_app_present))”,但是,每文件或函数都与全嵌入和外部处理器混合的注释。
如果我使用DA1458x作为全嵌入式设计,我应该这样编码,对吗??:

# undefcfg_external_wakeup.

arch_goto_sleep()函数中的ext_wakeup_enable()在全嵌入式设计系统中没有被调用,不是吗?!我的理解对吗?!?
所以,正如你提到的,我们必须使用唤醒控制器来唤醒全嵌入式设计系统。我相信醒来的代码应该是这样的:
在系统唤醒时注册回调函数:使用wkupct_register_callback()
2:开启唤醒IRQ: wkupct_enable_irq(0x40000, 0x40000, 1,0);// i.e.p2_2,p2_2的高电平为低电平,1个事件,debouncing time = 0ms
当我编写上述代码时,我的系统似乎苏醒了。(让我看看Dialog中关于GPIO唤醒的一些示例项目。)

3.即使ext_wakeup_enable()只是仅为完整的嵌入式(或外部处理器主机?)设计,exch_system.c的ext_wakeup_enable()函数似乎是错误的,因为我认为车道也是如此。
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()函数中具有低活动事件。

很抱歉我这么长时间的回复,但如果你能对此提供任何意见,我将非常感激。

谢谢你的支持。

最好的问候,
CD

MT_dialog
离线
最后看到:2个月3个星期前
工作人员
加入:2015-06-08 11:34
嗨,CD,

嗨,CD,

只是一些澄清完全蒙上的澄清 - >应用程序在外部MCU上运行,完全托管 - >应用程序在DA上运行

我没有意识到你在使用一个完全嵌入的设计(从外部主机运行),既然你是,那么是的,你可以使用这个功能。问题是,代码假设您将只使用端口0的引脚。这部分必须更正,并将在未来的SDK版本。如果你打算使用一个完全嵌入的设计,你从外部主机运行你的应用程序,你想让你的设备从外部MCU唤醒,那么你必须配置外部唤醒。ext_wakeup_enable()在完全嵌入式设计中使用(因为应用程序应该从外部处理器中唤醒)。如果您的设计是完全托管的,那么您应该使用您提到的代码。

由于MT_dialog

CD
离线
最后看到:3年10个月前
加入:2015-11-18 02:51
嗨MT,

嗨MT,

非常感谢您的意见。
你是对的。我混淆了“完全托管”的“完全嵌入式”。我很抱歉......

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

所以我必须像这样编码,对吗?

# undefcfg_external_wakeup.
在系统唤醒时注册回调函数:使用wkupct_register_callback ()
启用IRQ唤醒:WKUPCT_ENABLE_IRQ(0x40000,0x40000,1,0);// i.e.p2_2,p2_2的高电平为低电平,1个事件,debouncing time = 0ms

再次感谢,
CD

MT_dialog
离线
最后看到:2个月3个星期前
工作人员
加入:2015-06-08 11:34
嗨,CD,

嗨,CD,

是的,就是正确的,注册回调(Wkupct_register_callback(您的函数))并使引脚和极性为适当的PIN(WKUPCT_ENABLE_IRQ())。

由于MT_dialog

CD
离线
最后看到:3年10个月前
加入:2015-11-18 02:51
嗨MT,

嗨MT,

非常感谢您的确认。
现在,很清楚!!

非常感谢,
CD

主题锁定