嗨,对话框中,
我目前在一个项目中使用这两种uart。
我创建了两个任务,它们持续调用ad_uart_read,超时时间为1000ms,以填充缓冲区。
一切都在正常工作,直到我启用Extended_sleep。
从那时起,我正在运行到函数ad_uart_signal_event_read调用的硬故障处理程序。
到目前为止我一直在努力
- 当我完成此时,使用PM_STay_alive和PM_RESUME_SLEEP通信。我还实现了一种方法,该方法等待两个任务停止调用AD_UART_RED以保存在进入睡眠时没有读取操作。同样的结果。
- 在每次读写操作之前打开和关闭UART。同样的结果。
-禁用一个任务的测试目的,如果我禁用uart1-使用任务问题消失。
我已经读到DA14580有两个不同实现的驱动程序的uart1和uart2,这对我的DA14680重要吗?
您有任何建议帮助我解决这个问题吗?
关键词:
设备:
你好韩国乐团,
使用pm_stay_alive有什么特殊原因吗?由于存在UART活动,设备将不会进入睡眠模式。你能解释一下你从哪里得到的硬件故障吗?PC和LR在哪个位置?.此外,我强烈建议您看一下第12.3.1章的UART适配器示例UM-B-044用户手册:DA1468x软件平台参考(HTML)来自我们的支持门户。
谢谢,PM_Dialog
嗨pm_dialog,
我使用了pm_stay_alive,因为我认为问题将会睡觉,而UART RX正在进行中。没有pm_stay_alive和pm_resume_sleep问题仍然存在。
请查看我所附的图像,您可以看到PC指向ad_uart_signal_event_read()在行OS_EVENT_SIGNAL_FROM_ISR(cd->device->bus_data->event_read);.
对于PC它是地址0x800cf1c和LR它是0x8009841(函数:static 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)
空白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_write_async和ad_uart_read之前和之后使用ad_uart_bus_acquire和ad_uart_bus_release不会改变任何东西。
你好韩国乐团,
根据数据表,UART2用一个16字节深度的FIFO实现硬件流控制,所以你不能将它配置为软件UART。UART1支持软件实现。这意味着你不能通过UART1唤醒,因为它不支持RTS/CTS。通常,由于设备进入睡眠状态,您不能使用UART1。如果你禁用睡眠模式,你可以让我知道,如果你得到相同的错误,当你试图阅读超过UART1?如果您能够提供任何类型的配置或正在使用的任何代码片段,这将非常有帮助。
谢谢,PM_Dialog
嗨pm_dialog,
如果我禁用睡眠模式,一切都运行正常。
我不需要睡眠模式中的UART。这意味着我不关心睡眠模式下的数据,但不幸的是设备崩溃了。
正如我所说的,除了变量名之外,您可以复制我上面的文章中的代码用于UART1和2。这是唯一一段产生错误的代码。
如果我取消注释启动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)
你有什么主意吗?
你好再次,
如果我的UART设备仍然在DA处于睡眠模式时仍然向我发送数据,可能会出现问题?
我不能强迫他们停止发送数据,我想念他们也不是坏事。
看到附加的最小化固件,我用来测试这个。
固件正在开发Devkit,因为在SleepMode中没有UART设备向DA发送数据。
你好韩国乐团,
正如之前提到的,你不能通过UART1醒来,因为它不支持RTS/CTS。这就是为什么如果你关闭睡眠模式,一切都运行良好。如果设备进入睡眠模式,那么所有外设(包括UART块)都将通电,并且在设备醒来后不会有UART活动。如果您正在使用适配器,如果您有挂起的UART事务,DA1460将处于活动模式,而当UART事务结束时,设备将进入睡眠模式。因此,如果芯片处于睡眠模式,就不可能有UART事务。
谢谢,PM_Dialog
嗨pm_dialog,
我明白这一点。我不需要一觉醒来就收到那些信息。问题仍然是,设备由于某些原因硬件故障,因为UART想要触发一个“空”读事件,就像我之前写的那样。
问候
你好韩国乐团,
你能澄清你的意思是“因为UART想要发射一个“空”读事件,正如我之前写的”?如果你使用睡眠模式,你应该配置RTC/CTS引脚,以便唤醒。另外,请看看UART_BUS()注释。_auto_flow_control应该定义为1。如果您能够探测UART信号并提供一些屏幕截图,将会非常有帮助。
谢谢,PM_Dialog