UART硬盘进入延长睡眠

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
9个帖子/ 0个新
最后一篇
JTL.
离线
最后一次露面:三个月三个星期前
加入:2018-06-15 13:14
UART硬盘进入延长睡眠

嗨对话框,

我目前正在使用两个UART进行项目。
我创建了两个任务,这些任务是连续调用AD_UART_RED,超时为1000ms才能填充缓冲区。
所有工作正常,直到我启用extended_sleep。

从那时起,我就遇到了由ad_uart_signal_event_read函数调用的硬错误处理程序。
到目前为止,我试过
-使用pm_stay_alive与UART设备通信和pm_resume_sleep当我完成这个。我还实现了一个方法,等待两个任务停止调用ad_uart_read保存没有读取操作正在进行时,进入睡眠。相同的结果。
-打开和关闭uart之前,每个读和写操作。相同的结果。
- 禁用一个任务进行测试,如果我禁用UART1使用任务,则问题消失。

我读到DA14580有两个不同实现的UART1和UART2的驱动程序,这对我的DA14680这么做吗?

你有什么建议能帮我解决这个问题吗?

设备:
PM_DIALOG.
离线
最后一次露面:18小时5分钟前
职员
加入:2018-02-08 11:03
嗨JTL,

嗨JTL,

使用pm_stay_alive是否有具体原因?由于有UART活动,设备不会进入睡眠模式。你能澄清你在哪里得到硬变形吗?哪个位置是PC和LR?。此外,我强烈建议您看看第12.3.1章的UART适配器示例UM-B-044用户手册:DA1468x软件平台参考(HTML)从我们的支持门户。

谢谢,PM_DIALOG.

JTL.
离线
最后一次露面:三个月三个星期前
加入:2018-06-15 13:14
嗨PM_Dialog,

嗨PM_Dialog,

我使用pm_stay_alive,因为我认为问题将在UART Rx进行时休眠。如果没有pm_stay_alive和pm_resume_sleep,问题将继续存在。
请查看我的附加图像,您可以看到ad_uart_signal_event_read()的pc点在行os_event_signal_from_isr(cd-> device-> bus_data-> event_read);。
对于PC,它是地址0x800cf1c和lr它的0x8009841(函数:静态void hw_uart_fire_callback(uart_data * ud))。
以下是导致Hardfault的简化任务:

UART_BUS(UART1,UARTEX,HW_UART_BAUDRATE_9600,HW_UART_DATABITS_8,HW_UART_PARITY_NONE,
hw_uart_stopbits_1,0,0,hw_dma_channel_1,hw_dma_channel_0,0,0)

void rx_task(void * params)
{
uart_dev = ad_uart_open (uartex);
uint8_t buf [1];
而(1){
int r = ad_uart_read(UART_DEV,BUF,1,OS_MS_2_TICKS(1000));
if(r!= 1){
//没有收到任何东西
继续;
}
//如果接收到任何东西,把它放在缓冲区中
}
}

我读过UART示例,我写过当我从UART1和UART2中读取时出现问题,但当我用几乎相同的UART1和UART2的读取任务仅从UART2中读取时就不存在问题

编辑:使用AD_UART_BUS_ACQUIRE和AD_UART_BUS_REASEEASE,每个AD_UART_WRITE_ASYNC和AD_UART_READ未更改任何内容。

附件:
PM_DIALOG.
离线
最后一次露面:18小时5分钟前
职员
加入:2018-02-08 11:03
嗨JTL,

嗨JTL,

根据数据表,UART2使用16个字节深度的FIFO实现硬件流控制,因此您无法将其配置为软件UART。UART1支持软件实现。这意味着您无法通过UART1唤醒,因为它不支持RTS / CTS。通常,由于您的设备进入睡眠,因此您无法使用UART1。如果禁用睡眠模式,如果您尝试读取UART1时,请告诉我,请告诉我吗?如果您能够提供任何类型的配置或使用的任何代码片段,那将是非常有帮助的。

谢谢,PM_DIALOG.

JTL.
离线
最后一次露面:三个月三个星期前
加入:2018-06-15 13:14
嗨PM_Dialog,

嗨PM_Dialog,

如果我关闭睡眠模式,一切运行正常。
我不需要UART处于睡眠模式。这意味着我不在乎在睡眠模式下丢失数据,但不幸的是,设备崩溃了。
正如我所说,除了变量名称之外,您可以在上面的上面的POST中复制代码。这实际上是产生错误的唯一代码。
如果我取消启动rx_task的注释,它就不会崩溃。我的平台-设备如下所示:

UART_BUS(UART1,UARTEX,HW_UART_BAUDRATE_9600,HW_UART_DATABITS_8,HW_UART_PARITY_NONE,
hw_uart_stopbits_1,0,0,hw_dma_channel_1,hw_dma_channel_0,0,0)

UART_BUS(UART2,UARTEY,HW_UART_BAUDRATE_9600,HW_UART_DATABITS_8,HW_UART_PARITY_NONE,
HW_UART_STOPBITS_1,0,1,HW_DMA_CHANNEL_3,HW_DMA_CHANNEL_2,0,0)

你有什么想法吗?

JTL.
离线
最后一次露面:三个月三个星期前
加入:2018-06-15 13:14
再次问好,

再次问好,

如果我的UART设备在DA处于睡眠模式时仍向我发送数据,会不会有问题?
我不能强迫他们停止发送数据,而且我想念他们也不错。

请参阅随附的最小化固件,我用于测试此功能。
固件正在devkit上工作,因为在睡眠模式下没有UART设备向DA发送数据。

附件:
PM_DIALOG.
离线
最后一次露面:18小时5分钟前
职员
加入:2018-02-08 11:03
嗨JTL,

嗨JTL,

正如在上一篇文章中提到的那样,您无法通过UART1唤醒,因为它不支持RTS / CTS。这就是为什么如果禁用睡眠模式,一切都运行正常。如果设备进入睡眠模式,则所有外围设备(包括UART块)都是供电的,并且由于设备唤醒,因此您不会有UART活动。如果您使用的适配器,如果您有待处理的UART事务,DA1460将处于活动模式,并且当UART事务结束时,设备将转到睡眠模式。因此,如果芯片处于睡眠模式,则无法具有UART事务。

谢谢,PM_DIALOG.

JTL.
离线
最后一次露面:三个月三个星期前
加入:2018-06-15 13:14
嗨PM_Dialog,

嗨PM_Dialog,

我明白了这一点。我不需要醒来并获得这些消息。问题仍然是,由于某些原因,设备硬化了,因为UART希望在我之前写的“空”读取事件。

问候

PM_DIALOG.
离线
最后一次露面:18小时5分钟前
职员
加入:2018-02-08 11:03
嗨JTL,

嗨JTL,

你能澄清你的意思是“因为UART想要在我之前写的”空“读事件”?如果您使用的是睡眠模式,则应配置RTC / CTS引脚,以便唤醒。此外,请看看UART_BUS()评论。_auto_flow_control应该定义为1.如果能够探测UART信号并提供一些屏幕截图,则会非常有帮助。

谢谢,PM_DIALOG.