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

13个员额/0个新员额
最后一篇文章
小巷
离线
最后一次见到:1个月20小时前
加入:2015-07-14 14:21
DSPS使用GPIO控制其扩展的睡眠和唤醒。

嗨,对话

有一些问题,我是使用DSPS 3.150.2设备项目来进行数据传输。da4580_config.h被设置为:
#定义CFG\u EXT\u睡眠
# 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_对话框
离线
最后一次见到:2个月3周前
工作人员
加入:2015-06-08 34
你好,

你好,

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

谢谢你的对话

小巷
离线
最后一次见到:1个月20小时前
加入:2015-07-14 14:21
嗨,对话框中,

嗨,对话框中,
已阅读UM-B-051文件的10.7节,并按其设置程序。但是DA14580仍然处于睡眠状态
这是我在地检睡觉前的代码
应用程序设置扩展睡眠();
app_ble_ext_wakeup_on();
ext_wakeup_enable(UART1_CTS_端口,UART1_CTS_引脚,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\u CTRL\u REG,RET\u SYSRAM,1);//关闭系统RAM=>所有数据都将丢失
函数“ext_wakeup_enable ()":
无效外部唤醒启用(uint32端口、uint32引脚、uint8极性)
{
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);
如果(极性==0)//低电平有效
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLUP, PID_GPIO, false);/ /活性低。设置默认为输入高。
Else //激活高
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLDOWN, PID_GPIO, false);/ /活性高。设置默认为低输入。

wkupct_寄存器_回调(ext_wakeup_cb);

wkupct\u启用\u irq(1<

小巷
离线
最后一次见到:1个月20小时前
加入:2015-07-14 14:21
(无主题)
MT_对话框
离线
最后一次见到:2个月3周前
工作人员
加入:2015-06-08 34
你好,

你好,

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

谢谢你的对话

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

非常感谢,我发现了问题,已经解决。如下所示:
在函数" 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-disabled 1-enabled。
我使用P2_3端口来唤醒,但在函数“ext_wakeup_enable()”中,行是wkupct_enable_irq(1<

光盘
离线
最后一次见到:3年10个月前
加入:2015-11-18 02:51
谢谢Lane和MT_dialog,

谢谢Lane和MT_dialog,

我也遇到了同样的问题。莱恩应该是对的。以下功能在SDK 5.0.3(以及SDK 3.x.x)似乎有一个问题…


无效外部唤醒启用(uint32端口、uint32引脚、uint8极性)
{
rwip_env。ext_wakeup_enable = 2;
#如果DEVELOPMENT_DEBUG
RESERVE_GPIO(EXT_WAKEUP_GPIO, (GPIO_PORT) port, (GPIO_PIN) pin, PID_GPIO);
# endif
如果(极性==0)//低电平有效
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLUP, PID_GPIO, false);/ /活性低。设置默认为输入高。
Else //激活高
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLDOWN, PID_GPIO, false);/ /活性高。设置默认为低输入。

wkupct_寄存器_回调(ext_wakeup_cb);

wkupct_enable_irq(1 < <销(uint32_t)(极性= = 0)?(1 < <销):(0),1,0);//引脚,主动低/高,1事件,去噪时间= 0ms
}

如果我们像这样调用此函数:
ext_唤醒_启用(GPIO_端口_2,GPIO_引脚_3,0)
此方法调用wkupct_启用_irq()函数与错误参数最后
Wkupct_enable_irq()函数需要如下参数:

/**
****************************************************************************************
* @brief启用唤醒IRQ。
*
*@param[in]sel_引脚选择启用的输入。位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]事件\u num唤醒中断前的事件数。最多255。
* @param[in] deb_time恢复时间。马克斯0 x3f。
*
* @return无效
****************************************************************************************
*/
无效wkupct启用irq(uint32选择引脚、uint32 pol引脚、uint16事件数、uint16删除时间)

如果有解决这个问题的好办法,请告诉我。

提前感谢您的支持。

最好的问候,
光盘

MT_对话框
离线
最后一次见到:2个月3周前
工作人员
加入:2015-06-08 34
嗨,CD,

嗨,CD,

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

谢谢你的对话

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

嗨,MT_dialog,

谢谢你的快速回复。

对不起,我弄糊涂了……请让我确认一下。。。。

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

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

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

-da1458x_配置_高级.h-

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

-拱门-

210 #如果定义(CFG_EXTERNAL_WAKEUP)
211#定义外部#唤醒1
212#其他
213#定义外部#唤醒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无效外部唤醒cb(无效);
392 # endif

-主拱门c-
静态inline void arch_goto_sleep (sleep_mode_t current_sleep_mode)
{
sleep_mode = current_sleep_mode;
ble_turn_radio_off ();
//关掉收音机,看看我们是否能进入深度睡眠
睡眠模式=可验证睡眠模式(睡眠模式);
//授予对应用程序的访问权限,以检查我们是否可以进入睡眠状态
应用程序睡眠准备程序(睡眠模式和睡眠模式)//SDK对一致性的改进是否应该更改此项?
//根据当前睡眠模式关闭外围设备
arch_turn_peripherals_off (sleep_mode);
#如果(使用功率优化)
fine_hit = false;
# endif
//为应用程序特定的任务在睡觉前
app_sleep_entry_proc (sleep_mode);
#如果((外部唤醒)&(!BLE_APP_PRESENT))//外部唤醒,仅在外部处理器设计
ext_wakeup_enable(GPIO_端口_2,GPIO_引脚_2,0);
# endif
//最后一次整理钟表,然后睡觉
拱形开关、时钟、转到睡眠(睡眠模式);
}

- arch_system.c
#if ((EXTERNAL_WAKEUP) && (!BLE_APP_PRESENT)) //只在完整的嵌入式设计
/**
****************************************************************************************
启用外部唤醒GPIO中断。
*@param[in]GPIO_端口。外部唤醒信号的GPIO端口
* @param[在]GPIO_PIN。外部唤醒信号的GPIO管脚
*@param[in]极性。外部唤醒中断的极性。0=低激活。1=高激活
*@返回无效。
****************************************************************************************
*/
无效外部唤醒启用(uint32端口、uint32引脚、uint8极性)
{
rwip_env。ext_wakeup_enable = 2;
if(开发/调试)
RESERVE_GPIO(EXT_WAKEUP_GPIO, (GPIO_PORT) port, (GPIO_PIN) pin, PID_GPIO);
如果(极性==0)//低电平有效
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLUP, PID_GPIO, false);/ /活性低。设置默认为输入高。
Else //激活高
GPIO_ConfigurePin((GPIO_PORT) port, (GPIO_PIN) pin, INPUT_PULLDOWN, PID_GPIO, false);/ /活性高。设置默认为低输入。
wkupct_寄存器_回调(ext_wakeup_cb);
wkupct_enable_irq(1 < <销(uint32_t)(极性= = 0)?(1 < <销):(0),1,0);//引脚,主动低/高,1事件,去噪时间= 0ms
}

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

#未定义CFG_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
当我编写上述代码时,我的系统似乎苏醒了。(让我看看Dialog中关于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_对话框
离线
最后一次见到:2个月3周前
工作人员
加入:2015-06-08 34
嗨,CD,

嗨,CD,

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

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

谢谢你的对话

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

嗨太,

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

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

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

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

再次感谢,
光盘

MT_对话框
离线
最后一次见到:2个月3周前
工作人员
加入:2015-06-08 34
嗨,CD,

嗨,CD,

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

谢谢你的对话

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

嗨太,

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

谢谢,
光盘

主题锁定