dsp使用GPIO控制进入其扩展休眠和唤醒。

13个帖子/ 0个新
最后发表
车道
离线
最后看到:1周5天前
加入:2015-07-14 14:21
dsp使用GPIO控制进入其扩展休眠和唤醒。

嗨对话框

有一些问题,我是使用DSPS 3.150.2设备项目的数据传输。da4580_config.h被设置为:
#定义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);
......
I have modified to wake The DA up by GPIO

谢谢大家

设备:
MT_dialog
离线
最后看到:三个月两个星期前
工作人员
加入:2015-06-08 34
你好,

你好,

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

由于MT_dialog

车道
离线
最后看到:1周5天前
加入: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);//关闭系统RAM =>所有数据将丢失
函数“ext_wakeup_enable ()":
ext_wakeup_enable(uint32_t port, uint32_t pin, uint8_t极性)

rwip_env。ext_wakeup_enable = 2;
#如果DEVELOPMENT_DEBUG
/ /设置端口为EXT_WAKEUP_GPIO, (GPIO_PORT) port, (GPIO_PIN) pin, PID_GPIO);
# endif
/ /设置端口为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);/ /活性低。将default设置为输入高。
否则//活动高
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLDOWN, PID_GPIO, false);/ /活性高。将default设置为input low。

wkupct_register_callback (ext_wakeup_cb);

wkupct_enable_irq (1 <

车道
离线
最后看到:1周5天前
加入:2015-07-14 14:21
(无主题)
MT_dialog
离线
最后看到:三个月两个星期前
工作人员
加入:2015-06-08 34
你好,

你好,

请按照智能标签参考设计中的例子来唤醒,检查app_button_press_cb()函数(从按钮唤醒da)。您可以使用一个按钮来唤醒配置,然后实现CTS唤醒,从而检查配置是否正确。

由于MT_dialog

车道
离线
最后看到:1周5天前
加入:2015-07-14 14:21
非常感谢,我有

非常感谢,我已经发现了问题,已经解决,如下:
在函数“wkupct_enable_irq()”是说:Bits 0-7 ->端口0(P00..P07), Bits 8-13 ->端口1(P10..P15), Bits 14-15 ->端口2(P28,P29), Bits -> 16-23端口2(P00..P07), Bits 24-31 ->端口3(P30..P37)。0-disabled 1-enabled。
我使用P2_3端口来唤醒,但是在函数“ext_wakeup_enable()”中,行是wkupct_enable_irq(1<

CD
离线
最后看到:3年11个月前
加入: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;
#如果DEVELOPMENT_DEBUG
/ /设置端口为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);/ /活性低。将default设置为输入高。
否则//活动高
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLDOWN, PID_GPIO, false);/ /活性高。将default设置为input low。

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选择启用的输入。Bits 0-7 ->端口0(port 00..P07), Bits 8-13 ->端口1(P10..P15), Bits 14-15 ->端口2(P28,P29), Bits -> 16-23端口2(port 00..P07), Bits 24-31 ->端口3(P30..P37)。0-disabled 1-enabled。
* @param[in] pol_pins输入极性。Bits 0-7 ->端口0(port 00..P07), Bits 8-13 ->端口1(P10..P15), Bits 14-15 ->端口2(P28,P29), Bits -> 16-23端口2(port 00..P07), Bits 24-31 ->端口3(P30..P37)。0-high 1-low。
* @param[in] events_num唤醒中断前的事件数。Max 255。
* @param[in] deb_time调试时间。马克斯0 x3f。

* @return无效
****************************************************************************************
*/
无效wkupct_enable_irq(uint32_t sel_pins, uint32_t pol_pins, uint16_t events_num, uint16_t deb_time)

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

提前感谢您的支持。

最好的问候,
CD

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

嗨,CD,

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

由于MT_dialog

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

嗨MT_dialog,

感谢您的快速回复。

对不起,我有点糊涂了……请让我确认那里的事情....

1.我的环境:我想使用DA14583作为FULL EMBEDDED设计。
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 #如果定义(CFG_EXTERNAL_WAKEUP)
#定义EXTERNAL_WAKEUP
其他212 #
213 #define EXTERNAL_WAKEUP 0
214 # endif
.....
388 #if ((EXTERNAL_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_peripherals_off (sleep_mode);
#如果(USE_POWER_OPTIMIZATIONS)
fine_hit = false;
# endif
//在睡觉前钩子应用特定的任务
app_sleep_entry_proc (sleep_mode);
#如果((EXTERNAL_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[在]GPIO_PORT。外部唤醒信号的GPIO口
* @param[在]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)
/ /设置端口为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);/ /活性低。将default设置为输入高。
否则//活动高
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLDOWN, PID_GPIO, false);/ /活性高。将default设置为input low。
wkupct_register_callback (ext_wakeup_cb);
wkupct_enable_irq(1 < <销(uint32_t)(极性= = 0)?(1 < <销):(0),1,0);//引脚,有效低/高,1事件,解码器时间= 0ms

正如我上面列出的,有相同的#if语句“#if ((EXTERNAL_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);//即P2_2, P2_2活性低,1个事件,解除时间= 0ms
我的系统似乎醒来时,我的编码上面。(让我看看对话框中关于GPIO唤醒的一些示例项目。)

3.尽管ext_wakeup_enable()是专为完全嵌入式(或外部处理器主机?)设计的,但我认为,就像Lane提到的那样,arch_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)将在ext_wakeup_enable()函数中修改为GPIO_PORT_0, GPIO_PIN_2低活动事件。

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

谢谢你的大力支持。

最好的问候,
CD

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

嗨,CD,

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

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

由于MT_dialog

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

嗨太,

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

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

所以我必须编码追随,对吗?

# undefCFG_EXTERNAL_WAKEUP
注册系统唤醒时的回调函数:使用wkupct_register_callback ()
为唤醒启用IRQwkupct_enable_irq(0x40000, 0x40000, 1, 0);//即P2_2, P2_2活性低,1个事件,解除时间= 0ms

再次感谢,
CD

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

嗨,CD,

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

由于MT_dialog

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

嗨太,

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

非常感谢,
CD

主题锁定