跳过主要内容

同时为TX和RX使用UART适配器。

DA14580

2年前

发布的UnicycleBloke230点 3回复
0的问题

我是使用Dialog SDK的新手,一直在阅读有关适配器的文章。我可以看到一个简单的解决方案,在单个线程上下文中对挂起的写进行排队并使用ad_uart_write()处理它们,这样就不会阻塞其他线程。我不太确定阅读……

是否可以同时调用ad_uart_read()和ad_uart_write()(从不同的线程)而不相互干扰?我想到了一个UART RX线程,它简单地读取一个块或超时,将RX数据传递给应用程序,并重复。我想这可能会对保持RX启用有强大的影响,但它仅用于调试目的。

2年前

PM_Dialog

嗨UnicycleBloke,

因为您使用的是适配器,所以不能同时从不同的线程调用ad_uart_read()和ad_uart_write()。这是适配器的概念。请注意,适配器是lld(低级驱动程序)之上的附加层,并不是作为单独的任务实现的。因此,要么直接使用UART lld(在hw_uart.h文件中描述),要么直接使用UART适配器(在ad_uart.h文件中描述),而不干预UART lld。我们建议使用适配器来访问硬件外设,因为不仅提供对外设的访问,还确保当前正在访问它的其他任务暂停操作,直到外设再次被释放。因此,您不必担心另一个任务在同一时间尝试访问相同的外围设备。我强烈建议您查看第12.3.1章的UART适配器示例UM-B-044用户手册:DA1468x软件平台参考(HTML)从我们的支持门户。

谢谢,PM_Dialog

2年前

UnicycleBloke 230点

谢谢你的回复。老实说,我更喜欢自己编写裸机驱动(这是我对北欧,STM32, EFM32和其他部分所做的),但我对对话部分太不熟悉了,目前不能这样做,我主要关心的是正确管理电源。在我看来,非常奇怪的是,UART被适配器强制成为半双工设备:这似乎是不可取的。

我将浏览一下这个例子。

谢谢。

接受答案!

2年前

PM_Dialog

嗨UnicycleBloke,

正如在前面的文章中已经提到的,我们强烈建议使用适配器访问硬件外设。如果您不喜欢使用适配器,第二个选项是使用LLD。这是我们可以提供支持的两种选择。在您的情况下,如果您想实现自己的驱动程序,我们将无法提供任何支持。是的,请浏览一下如何使用UART适配器的推荐示例。

谢谢,PM_Dialog