从UART延长睡眠醒来

⚠️
大家好. .谢谢光临论坛。令人兴奋的消息!我们现在在移动的过程中,我们的新论坛平台,将提供更好的功能和包含在主对话框的网站。所有文章和帐户已经被迁移。我们现在只接受交通新论坛,请发布任何新的线程//www.xmece.com/support。我们将修复bug /优化搜索和标签在接下来的日子里。
9新职位/ 0
最后发表
hamiddhosseini
离线
最后看到:8个月6天前
加入:2020-05-12上午
从UART延长睡眠醒来

亲爱的对话框支持团队,

我已经成功完成集成uartsdk的例子ble_app_peripheral。我能够发送和接收数据,有祝福的功能。

然而,我想把我的董事会在延长睡眠模式当UART不是忙,节约电能。换句话说,两件事应该能够醒来董事会在延长睡眠模式:

1 -BLE计时器数据包发送广告。

2 -UART Rx销

据我了解,为此应采取以下步骤:

1 -在睡觉之前我必须禁用uart和Rx销用于醒来。

2 -从这个销醒来的时候,我应该激活uart和开始侦听消息。(我明白,我可能会失去一些数据!)

我有点失去了关于如何正确配置扩展的睡眠模式和设置回调。你能提供给我一些指导在这方面吗?(由于硬件限制,我不能使用UART在四线模式,因此;我想使用sam Rx销的目的。)

问候,

哈米德

设备:
PM_Dialog
离线
最后看到:5天16小时前
工作人员
加入:2018-02-08 11:03
嗨哈米德,

嗨哈米德,

谢谢你的问题。我建议首先检查我们的睡眠模式的教程DA14531产品页面,为您提供方便的链接如下:

http://lpccs-docs.dialog-semiconductor.com/DA14531_Sleep_Mode + / index . html

此外,ble_app_sleepmode SDK的示例配置了DA14531在永恒的睡眠模式。为了唤醒它,您应该使用唤醒控制器。请检查app_button_enable()函数。

谢谢,PM_Dialog

hamiddhosseini
离线
最后看到:8个月6天前
加入:2020-05-12上午
你好,

你好,

谢谢你的回应。

我已经阅读本教程,但我找不到我的答案。

可以使用吗app_easy_timer在延长睡眠模式?换句话说,这个定时器唤醒董事会从延长睡眠?话虽这么说,董事会将熟睡的除非它需要醒了发送广告包或uart是忙碌的。

问候,

哈米德

PM_Dialog
离线
最后看到:5天16小时前
工作人员
加入:2018-02-08 11:03
嗨哈米德,

嗨哈米德,

对不起,也许我误解了你的问题。是的,你可以使用app_easy_timer(0为了唤醒定期使用这个API BLE定时器,所以它可以用在睡眠模式。

让我们假设你想要醒来,开始广告。这可以通过设置定时器如下所示:

cb_my_timeout app_easy_timer (100);

第一个参数指定计时器超时后100 * 10 = 1000毫秒= 1 s女士。这个时候回调cb_my_timerout()得到的。

谢谢,PM_Dialog

hamiddhosseini
离线
最后看到:8个月6天前
加入:2020-05-12上午
你好,

你好,

谢谢lot.That部分澄清这个问题对我来说。我有一个问题我doubtfull:

我想使用UART_Rx_PIN醒来和计时器。更清楚,我想要的方式醒来(定时器和提到销)。

据我了解,在回调我要醒来

  • 禁用中断醒来
  • 初始化的uart销了

然后我可以开始接收数据。后来我不得不

  • 禁用uart
  • 使中断醒来

回到正常的操作。

我正确吗?有可能改变使用销在这样操作吗?

问候,

哈米德

PM_Dialog
离线
最后看到:5天16小时前
工作人员
加入:2018-02-08 11:03
嗨哈米德,

嗨哈米德,

如果您想通过GPIO醒来触发(UART Rx),你应该配置销的唤醒控制器和寄存器。ble_app_sleepmode SDK的例子,该设备可以通过GPIO_BUTTON_PORT / _PIN醒来。请检查wkupct_enable_irq ()。在你的情况下,你应该配置UART Rx销。

请记住,当系统睡眠模式,关闭所有外围领域包括UART,因此不可能有UART芯片睡觉时大脑的活动。这意味着你将错过的第一个字符露营UART Rx销来唤醒它。

谢谢,PM_Dialog

hamiddhosseini
离线
最后看到:8个月6天前
加入:2020-05-12上午
到目前为止,我已经完成了

到目前为止我做了以下几点:

  • 定义的销和端口唤醒一样的我用UART2 Rx。
  • 定义一个functino禁用uart和启用醒来销如下:
    空白wkup_periph_init(){/ /停止uart uart_disable (UART2);/ /设置唤醒销GPIO_ConfigurePin (EXT_WKUP_GPIO_PORT、EXT_WKUP_GPIO_PIN INPUT_PULLUP, PID_GPIO,假);}
  • 改变了GPIO_reservations ()set_pad_functions ():
空白GPIO_reservations (void){/ *即保留P0_1为通用I / O目的:RESERVE_GPIO (DESCRIPTIVE_NAME, GPIO_PORT_0, GPIO_PIN_1 PID_GPIO);* / #如果定义(CFG_PRINTF_UART2) RESERVE_GPIO (UART2_TX、UART2_TX_PORT UART2_TX_PIN, PID_UART2_TX);# endif RESERVE_GPIO (UART2_RX UART2_RX_PORT、UART2_RX_PIN PID_UART2_RX);/ / RESERVE_GPIO (PUSH_BUTTON GPIO_BUTTON_PORT、GPIO_BUTTON_PIN PID_GPIO);#如果! (__DA14586__) RESERVE_GPIO定义(SPI_EN、SPI_EN_PORT SPI_EN_PIN, PID_SPI_EN);# endif} # endif空白set_pad_functions (void){/ *即P0_1设置为通用目的输出:GPIO_ConfigurePin (GPIO_PORT_0、GPIO_PIN_1、输出、PID_GPIO假);* / #如果定义(__DA14586__) / /不允许自发DA14586 SPI Flash唤醒GPIO_ConfigurePin (GPIO_PORT_2, GPIO_PIN_3、输出PID_GPIO真实);# / /其他不允许自发SPI Flash唤醒GPIO_ConfigurePin (SPI_EN_PORT, SPI_EN_PIN、输出PID_SPI_EN真实);# endif GPIO_ConfigurePin (EXT_WKUP_GPIO_PORT EXT_WKUP_GPIO_PIN、INPUT_PULLUP PID_GPIO,假);#如果定义(CFG_PRINTF_UART2) / /配置UART2 TX垫GPIO_ConfigurePin (UART2_TX_PORT、UART2_TX_PIN、输出、PID_UART2_TX假); #endif }
  • 添加以下行来user_app_adv_start ():
/ /设置延长睡眠期间没有OTP复制广告arch_set_extended_sleep(假);arch_ble_ext_wakeup_on ();/ /配置唤醒销wkup_periph_init ();app_wkup_pin_enable ();
  • 修改uart_ble_sleepmode的回调函数的例子:
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @brief按钮按下回调函数。在WKUPCT注册驱动程序。* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /静态空app_uart_trigered_cb (void){#如果! (__DA14531__)如果定义(GetBits16 (SYS_STAT_REG PER_IS_DOWN)) # endif {periph_init ();}/ /我想设置Rx和Tx针接收/ uart uart_startup_proccess (UART2);如果(arch_ble_ext_wakeup_get ()) {arch_set_sleep_mode (app_default_sleep_mode);arch_ble_force_wakeup ();arch_ble_ext_wakeup_off ();app_easy_wakeup ();}}/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @brief应用唤醒回调函数。在API消息注册效用。 **************************************************************************************** */ static void app_wakeup_cb(void) { uart_receive_intr_init(UART2); } /** **************************************************************************************** * @brief Sets UART as wakeup trigger **************************************************************************************** */ void app_wkup_pin_enable(void) { app_easy_wakeup_set(app_wakeup_cb); wkupct_register_callback(app_uart_trigered_cb); wkupct_enable_irq(WKUPCT_PIN_SELECT(EXT_WKUP_GPIO_PORT, EXT_WKUP_GPIO_PIN), // select pin (GPIO_BUTTON_PORT, GPIO_BUTTON_PIN) WKUPCT_PIN_POLARITY(EXT_WKUP_GPIO_PORT, EXT_WKUP_GPIO_PIN, WKUPCT_PIN_POLARITY_LOW), // polarity low 1, // 1 event 40); // debouncing time = 0 } void user_app_disable_button(void) { wkupct_disable_irq(); } void uart_startup_proccess(uart_t *uart){ //disabling the wkup interrupts user_app_disable_button(); //initializing the uart uart_periph_init(uart); uart_register_rx_cb(uart, uart_receive_intr_cb); }

然而,当我在调试模式下运行代码,没有改变在接待新的字节唤醒销和设备保持广告。你能给我一些建议关于这个问题的可能的原因?

问候,

哈米德

hamiddhosseini
离线
最后看到:8个月6天前
加入:2020-05-12上午
你好,

你好,

我想表明,我已经设法成功实现我的期望的架构。谢谢你的时间。

问候,

哈米德

PM_Dialog
离线
最后看到:5天16小时前
工作人员
加入:2018-02-08 11:03
嗨哈米德,

嗨哈米德,

高兴你解决你的问题,谢谢你让我们知道。根据app_wkup_pin_enable(),一个低脉冲信号触发唤醒控制器。

如果你有任何其他问题,请增加一个新论坛线程。

谢谢,PM_Dialog