嗨,对话当DA14681在扩展睡眠模式下,可以通过UART唤醒,接收中断并从转发器接收数据字节?以及如何设置它?
你好古乡,
UART硬件在扩展睡眠模式下关闭,因此您无法使用它来唤醒系统。
但是,有一个解决方法,您必须非常谨慎,并且不是正式推荐的解决方法。
您可以在睡眠前将UART PIN映射到外部唤醒的GPIO,并将其用作唤醒触发器,然后将PIN映射回UART以接收UART的数据。
但是,您必须非常谨慎地管理以下事项:波特拉特,去抖和唤醒延迟。
最好的,LC.
嗨,LC.can you give me a demo code to learn it?
此方法用于下面参考的无附属项目。看看user_prepare_sleep()函数作为起点。
https://support.dialog-seminiondionder.com/connectivity/reference-design/smartbond-codeless-serial-link.
嗨,LC.该文件对我显示了“限制”。可以给我下载它的许可吗?my email:414095539@qq.com.
It is due to the license agreement needs to be accepted before downloading file. Please accept the license and you should be able to download the files on this support portal.
嗨,LC.I have accepted the license agreement and submited it , but it didn't reply me and still I can't get access to download the file.
您是否可以在您的个人资料中提供有效的地址和其他详细信息。我们需要一些有效的信息来提供对门户上的内容的访问。
嗨LC,I have updated my profile . Please check it again.
古兴,
您应该能够立即下载内容。
嗨LC,现在它可以通过UART RX引脚从扩展睡眠模式唤醒。但有时它将在系统唤醒后输入“HW_UART_INT_BUSY_DETECTICT”中断。虽然我可以使用“hw_uart_transmit_fifo_empty(uart)”退出“hw_uart_int_busy_detected”中断,但我发现波兰特是不正确的,导致了错误的字符传输。如何解决这个问题呢?
所以首先,您将在进入睡眠模式之前将UART RX引脚配置为GPIO,并且您将在此引脚上启用唤醒中断,其中1个事件计数。为了唤醒您发送@字符的系统,可以将引脚拉低,以获得足够的时钟周期。
唤醒后,您可以启用UART。您的实现是否执行此操作,仍然是您看到HW_UART_INT_BUSY_DETCETCTION中断。请确认。
嗨,LC.是的,我可以将UART RX引脚配置为GPIO唤醒引脚,可以唤醒系统。现在它在大多数情况下工作得很好。但我没有只发送@字符。因为有时只有一个@字符是不够的时钟周期才能唤醒。但是当我发送一个长字符串(超过20个字节@字符,Baudrate 38400)唤醒系统时,它更容易发生“HW_UART_INT_BUSY_DETECTICT”中断,似乎波特丽是错误的。配置的代码如下所示://////// //////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////void console_uart_leave_from_sleepmode(void){hw_wkup_set_pin_state(uart_rx_port,uart_rx_pin,false);hw_gpio_set_pin_function(uart_rx_port,uart_rx_pin,hw_gpio_mode_input_pullup,HW_GPIO_FUNC_UART_RX);// RX pin enableconsole_uart_init();UART_RX_INT_ENABLE(HW_UART1,TRUE);}void console_uart_prepare_for_sleepmode(void){
hw_wkup_init(NULL);hw_wkup_reset_counter();hw_wkup_set_debounce_time(0);hw_wkup_set_counter_threshold(1);
hw_gpio_set_pin_function(hw_gpio_port_4,hw_gpio_pin_7,hw_gpio_mode_input_pullup,hw_gpio_func_gpio);hw_wkup_set_pin_state(hw_gpio_port_4,hw_gpio_pin_7,true); //配置Rx引脚作为唤醒引脚hw_wkup_set_pin_trigger(hw_gpio_port_4,hw_gpio_pin_7,hw_wkup_pin_state_low);hw_wkup_register_interrupt (wkup_handler configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY);
hw_gpio_set_pin_function(uart_rx_port,uart_rx_pin,hw_gpio_mode_input,hw_gpio_func_gpio); // rx引脚禁用UART_RX_INT_ENABLE(HW_UART1,FALSE);uart_clock_disable();}
你好古乡,
UART硬件在扩展睡眠模式下关闭,因此您无法使用它来唤醒系统。
但是,有一个解决方法,您必须非常谨慎,并且不是正式推荐的解决方法。
您可以在睡眠前将UART PIN映射到外部唤醒的GPIO,并将其用作唤醒触发器,然后将PIN映射回UART以接收UART的数据。
但是,您必须非常谨慎地管理以下事项:波特拉特,去抖和唤醒延迟。
最好的,
LC.
嗨,LC.
can you give me a demo code to learn it?
你好古乡,
此方法用于下面参考的无附属项目。看看user_prepare_sleep()函数作为起点。
https://support.dialog-seminiondionder.com/connectivity/reference-design/smartbond-codeless-serial-link.
最好的,
LC.
嗨,LC.
该文件对我显示了“限制”。可以给我下载它的许可吗?
my email:414095539@qq.com.
你好古乡,
It is due to the license agreement needs to be accepted before downloading file. Please accept the license and you should be able to download the files on this support portal.
最好的,
LC.
嗨,LC.
I have accepted the license agreement and submited it , but it didn't reply me and still I can't get access to download the file.
你好古乡,
您是否可以在您的个人资料中提供有效的地址和其他详细信息。我们需要一些有效的信息来提供对门户上的内容的访问。
最好的,
LC.
嗨LC,
I have updated my profile . Please check it again.
古兴,
您应该能够立即下载内容。
最好的,
LC.
嗨LC,
现在它可以通过UART RX引脚从扩展睡眠模式唤醒。但有时它将在系统唤醒后输入“HW_UART_INT_BUSY_DETECTICT”中断。虽然我可以使用“hw_uart_transmit_fifo_empty(uart)”退出“hw_uart_int_busy_detected”中断,但我发现波兰特是不正确的,导致了错误的字符传输。如何解决这个问题呢?
你好古乡,
所以首先,您将在进入睡眠模式之前将UART RX引脚配置为GPIO,并且您将在此引脚上启用唤醒中断,其中1个事件计数。为了唤醒您发送@字符的系统,可以将引脚拉低,以获得足够的时钟周期。
唤醒后,您可以启用UART。您的实现是否执行此操作,仍然是您看到HW_UART_INT_BUSY_DETCETCTION中断。请确认。
最好的,
LC.
嗨,LC.
是的,我可以将UART RX引脚配置为GPIO唤醒引脚,可以唤醒系统。现在它在大多数情况下工作得很好。但我没有只发送@字符。因为有时只有一个@字符是不够的时钟周期才能唤醒。但是当我发送一个长字符串(超过20个字节@字符,Baudrate 38400)唤醒系统时,它更容易发生“HW_UART_INT_BUSY_DETECTICT”中断,似乎波特丽是错误的。
配置的代码如下所示:
//////// //////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
void console_uart_leave_from_sleepmode(void)
{
hw_wkup_set_pin_state(uart_rx_port,uart_rx_pin,false);
hw_gpio_set_pin_function(uart_rx_port,uart_rx_pin,hw_gpio_mode_input_pullup,
HW_GPIO_FUNC_UART_RX);// RX pin enable
console_uart_init();
UART_RX_INT_ENABLE(HW_UART1,TRUE);
}
void console_uart_prepare_for_sleepmode(void)
{
hw_wkup_init(NULL);
hw_wkup_reset_counter();
hw_wkup_set_debounce_time(0);
hw_wkup_set_counter_threshold(1);
hw_gpio_set_pin_function(hw_gpio_port_4,hw_gpio_pin_7,hw_gpio_mode_input_pullup,hw_gpio_func_gpio);
hw_wkup_set_pin_state(hw_gpio_port_4,hw_gpio_pin_7,true); //配置Rx引脚作为唤醒引脚
hw_wkup_set_pin_trigger(hw_gpio_port_4,hw_gpio_pin_7,hw_wkup_pin_state_low);
hw_wkup_register_interrupt (wkup_handler configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY);
hw_gpio_set_pin_function(uart_rx_port,uart_rx_pin,hw_gpio_mode_input,
hw_gpio_func_gpio); // rx引脚禁用
UART_RX_INT_ENABLE(HW_UART1,FALSE);
uart_clock_disable();
}