亲爱的对话框,
我想把我们的应用程序(DA14680-01 SDK 1.0.8.1050.1)延长睡眠。为此我把extended_sleep演示应用程序移植到我们的董事会(发光二极管LED垫,不是GPIOs,所以我把它们放在TIMER2 / PWM)。我们将使用uart,所以我试着打印调试信息从vTimerCallback UART2(),将调用hw_uart_reinit periph_init () ()。(我定义为输出CONFIG_CUSTOM_PRINT和写了_write()函数调用hw_uart_wrute_buffer ();我也试图利用ad_uart)。我还添加了pm_set_wakeup_mode(真正的)等待XTAL16M来解决。董事会外部32.768 khz和16兆赫晶体。
然而,董事会行为变化,这取决于它是如何重置。如果是重置JLink (reboot_device。sh或“监控器复位”从gdb), XTAL16M运行所有的时间(我们用示波器检查),led留在和UART输出工作。
但是如果是重置固件,或者使用重置按钮,或通过电池,把它放回去XTAL16M停止和led在睡眠中去;发光二极管仍然工作当董事会是醒着的。如果我尝试使用UART醒来后,CPU挂起和XTAL16M保持运行。
我将感激如果你能告诉我们如何使用uart延长睡眠。情况有点很难调试,我还没有找到一种方法将调试器附加而无需重置SoC。
下面是我们periph_init()和写()函数。
非常感谢你的关注,
瓦迪姆,MatchX。
静态孔隙periph_init(空白)
{
/ *
*设置外围GPIOs
* /
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的初始化
* /
/ * 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 & 1 ul);
/ *配置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);
返回兰;
}
嗨matchx,
关于这一事实你还看到XTAL16运行通过Jlink如果你重置,这是因为Jlink本身,只要你有68 x董事会JTAG附加设备不会关闭电源域和XTAL16将继续操作,即使你已经宣布,该设备将进入睡眠。关于如何使用UART,介绍了适配器在这种情况下,而不是直接使用低水平的司机。所以请看看嗯- b - 044 da1468x软件平台参考。pdf 8段解释的架构睡觉和睡觉时如何使用适配器,也请看看11款司机和适配器,这explians适配器方案详细和你还可以找到一个例子如何使用UART。
由于MT_dialog
嗨太,谢谢你的回复。
我已经尝试ad_uart,如我上面所提到的。
我调查了一些越来越惊讶地发现printf(),杀死了这个系统,但只有在起床之后。更令人惊讶的是,snprintf() +写()很好地工作。
(我使用嵌入式ARM工具链5 _4 - 2017 q1我自己编译,原因是对话框的二进制文件不运行在Archlinux由于libncurses版本冲突。)
谢谢你的帮助,
瓦迪姆,MatchX。