UART硬盘进入延长睡眠

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

嗨对话框,

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

从那时起,我正在运行到函数ad_uart_signal_event_read调用的硬故障处理程序。
到目前为止,我试过
- 当我完成此时,使用PM_STay_alive和PM_RESUME_SLEEP通信。我还实现了一种方法,该方法等待两个任务停止调用AD_UART_RED以保存在进入睡眠时没有读取操作。同样的结果。
- 在每次读写操作之前打开和关闭UART。同样的结果。
- 禁用一个任务进行测试,如果我禁用UART1使用任务,则问题消失。

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

您有任何建议帮助我解决这个问题吗?

设备:
PM_DIALOG.
离线
最后一次露面:7小时52分钟前
职员
加入: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.
离线
最后一次露面:3个月3周前
加入: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))。
这是我的简化任务,导致硬盘重新执行:

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中只有UART1和UART2的读任务读取时

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

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

嗨JTL,

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

谢谢,PM_DIALOG.

JTL.
离线
最后一次露面:3个月3周前
加入: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.
离线
最后一次露面:3个月3周前
加入:2018-06-15 13:14
再次问好,

再次问好,

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

请参阅随附的最小化固件,我用于测试此功能。
固件正在开发Devkit,因为在SleepMode中没有UART设备向DA发送数据。

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

嗨JTL,

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

谢谢,PM_DIALOG.

JTL.
离线
最后一次露面:3个月3周前
加入:2018-06-15 13:14
嗨pm_dialog,

嗨pm_dialog,

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

问候

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

嗨JTL,

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

谢谢,PM_DIALOG.