延长睡眠与UART

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
3个帖子/ 0个新
最后发表
matchx
离线
最后看到:三年前,三周前
加入:2016-10-18 51
延长睡眠与UART

亲爱的对话框,

我正在尝试将我们的应用程序(DA14680-01, SDK 1.0.8.1050.1)置于延长睡眠状态。为此,我采取extended_sleep演示应用程序,并将其移植到我们的板(在LED板上有LED,而不是gpio,所以我把它们放在TIMER2/PWM上)。我们将使用UARTs,因此我尝试从vTimerCallback()打印UART2上的调试消息,并在外围init()中调用hw_uart_reinit()。(对于输出,我定义了CONFIG_CUSTOM_PRINT并编写了一个_write()函数调用hw_uart_wrute_buffer();我还尝试使用ad_uart)。我还添加了pm_set_wakeup_mode(true)来等待XTAL16M解决。该板有外部32.768kHz和16MHz晶体。

然而,板的行为会改变,这取决于它是如何重置的。如果它从JLink复位(通过reboot_device.sh或从gdb通过“monitor reset”),XTAL16M一直在运行(我们用示波器检查),led保持亮,UART输出工作。

但如果它是通过固件重置,或使用重置按钮,或通过取出电池再放回去,XTAL16M停止和led熄灭在睡眠期间;当板是清醒时,led仍然工作。如果我在醒来后尝试使用UART, CPU将挂起,而XTAL16M将继续运行。

如果你能告诉我们如何在长时间睡眠的情况下使用uart,我会很感激的。这种情况有点难于调试,因为我还没有找到一种方法在不重置SoC的情况下附加调试器。

下面是我们的外围init()和write()函数。

非常感谢您的关注,
瓦迪姆,MatchX。


静态孔隙periph_init(空白)

/*
*设置周边gpio
*/
hw_uart_reinit (HW_UART2 &uart_cfg);
hw_gpio_set_pin_function (HW_GPIO_PORT_4 HW_GPIO_PIN_5 HW_GPIO_MODE_OUTPUT,
HW_GPIO_FUNC_UART2_TX);
hw_gpio_set_pin_function (HW_GPIO_PORT_4 HW_GPIO_PIN_4 HW_GPIO_MODE_OUTPUT,
HW_GPIO_FUNC_UART2_RX);
/*
*启动外设
*/
/*
* GPIO的初始化
*/
/*为LED输出配置GPIO*/
Timer2_config t2cfg = {
.pwm3_start = 0,
.pwm3_end = 0 xffff,
.pwm4_start = 0,
.pwm4_end = 0 xffff,
};
hw_timer2_init (&t2cfg);
hw_timer2_enable ();
hw_led_set_led2_src (HW_LED_SRC2_PWM3);
hw_led_set_led3_src (HW_LED_SRC3_PWM4);
hw_led_enable_led2(ulLEDState & 1UL);
/*为按钮配置GPIO。*/
hw_gpio_set_pin_function(HW_GPIO_PORT_3, HW_GPIO_PIN_3, HW_GPIO_MODE_INPUT, HW_GPIO_FUNC_GPIO);
/ / printf (" init \ r \ n ");

Int _write(Int fd, char *ptr, Int len)

hw_uart_write_buffer (HW_UART2 ptr, len);
返回兰;

设备:
MT_dialog
离线
最后看到:4个月2天前
工作人员
加入:2015-06-08 34
嗨matchx,

嗨matchx,

关于这一事实你还看到XTAL16运行通过Jlink如果你重置,这是因为Jlink本身,只要你有68 x董事会JTAG附加设备不会关闭电源域和XTAL16将继续操作,即使你已经宣布,该设备将进入睡眠。关于如何使用UART,在这种情况下引入了适配器,而不是直接使用低级驱动程序。所以请看一下UM-B-044-DA1468x软件平台参考。pdf在第8段解释了休眠的架构和适配器如何在休眠时使用,也请看一下第11段驱动程序和适配器,它更详细地解释了适配器方案,您还可以在那里找到如何使用UART的示例。

由于MT_dialog

matchx
离线
最后看到:三年前,三周前
加入:2016-10-18 51
MT你好,谢谢你的回复。

MT你好,谢谢你的回复。

我已经尝试了ad_uart,如上所述。

我进一步调查了一下,惊讶地发现是printf()杀死了系统,但只是在唤醒之后。更令人惊讶的是,snprintf() + write()工作得非常好。

(我使用的嵌入式ARM工具链5_4-2017q1是我自己编译的,原因是由于libcurses版本冲突,Dialog的二进制文件不能在Archlinux上运行。)

谢谢你的帮助,
瓦迪姆,MatchX。