This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
数据表对 UART 中的中断信令没有太多评价。
我们将使用 UDMA 和 UART 发送/接收64字节的块。 我们使用中断作为错误处理的一部分、以发出清除状态和重新启动通信的请求。 这可能发生在消息中间。
作为清理的一部分、我们首先阻止 DMA 在存储器和 UART FIFO 之间移动数据。 但是 FIFO 本身中已经存在的信息又会怎样呢?
当 UART 发送中断或接收到中断时、对 UART 的 FIFO 有何影响?
发送中断是否会清除 Tx FIFO?
接收中断是否会清除 Rx FIFO?
如果没有、清除 FIFO 的正确方法是什么?
您好、12月12日下午、
发送/接收中断不会导致 TX 或 RX FIFO 被清零。
对于 TX FIFO、建议的清空发送 FIFO 的方法是将线控寄存器(UARTLCRH)的位4 (FEN)清零(来源:器件数据表的第1312页)。 这可以通过 UARTFIFODisable() API 来实现。
对于 RX FIFO、刷新接收 FIFO 的方法是读取任何垃圾数据或复位外设实例(来源: https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/401599/1422732#1422732)
[引用用户="Ralph Jacobi"]
对于 TX FIFO、建议的清空发送 FIFO 的方法是将线控寄存器(UARTLCRH)的位4 (FEN)清零(来源:器件数据表的第1312页)。 这可以通过 UARTFIFODisable() API 来实现。
[/报价]
是否允许清除 Fen、然后立即设置 Fen? 或者是否需要插入一些等待状态? 目的是丢弃 Tx FIFO 的内容、但随后继续使用 FIFO。
[报价用户="12ve12pm"]通过清除 UARTCTL.UARTEN,是否可以清除/置位 FEN?[/QUERT]
我(通常)在这里"黑暗中"。 (具有此级别的以 MCU 为中心的详细信息)
拉尔夫说: “UARTFFIFODisable()。” 您是否已(扩展)将其更改为"禁用 UART?" 是否有差异-和/或... 它是否可利用?
您好、12月12日下午、
[引用 user="12ve12pm]]是否允许清除 Fen、然后立即设置 Fen? 或者是否需要插入一些等待状态? 目的是丢弃 Tx FIFO 的内容、但随后继续使用 FIFO。[/quot]
从我看到的内容来看、我认为这没有问题、尽管它似乎没有经过专门测试。 从数据表过程中、似乎需要一段时间才能再次使用 FIFO、但我看不到我们在任何地方测试了完成清空 FIFO 所需的任何种类的最短时间规格。 如果您能负担得起一些等待状态可能是一个好主意。
[报价用户="12ve12pm"]通过清除 UARTCTL.UARTEN,是否可以清除/置位 FEN?[/QUERT]
是的、这就是 TivaWare UARTFIFODisable 所做的。 数据表只是预先规定了在不禁用 UART 的情况下执行此操作、这意味着如果 TX 或 RX 过程正在进行、 但我想、在您的情况下、由于您是在休息后执行该操作、因此您不会发生这种情况、因此在不禁用整个 UART 外设的情况下清除该标志应该是安全的。
[引用 user="12ve12pm"]意外地发现 TM4C UART 是否有更详细的用户指南、类似于 TMS320的 SPRU?
遗憾的是、我们没有有关 UART 外设的此类文档。
[引用用户="Ralph Jacobi"]
从我看到的内容来看、我认为这没有问题、尽管它似乎没有经过专门测试。 从数据表过程中、似乎需要一段时间才能再次使用 FIFO、但我看不到我们在任何地方测试了完成清空 FIFO 所需的任何种类的最短时间规格。 如果您能负担得起一些等待状态可能是一个好主意。
[/报价]
感谢你的答复。
我知道没有经过测试的最短时间规格、但对于我们可能讨论的时间刻度有什么提示吗? 大约需要几个时钟周期? 微秒? 毫秒? 还不止这些? 大致的棒球场数字会非常有帮助。
[引用用户="Ralph Jacobi"]我将在 AM 中做更多的挖掘-看看我是否可以进一步支持该想法和/或将窗口缩小更多。
也许这里值得纪念— —“再一次”——供应商的拉尔夫远远超过 了正常的 高级论坛服务!
即使在这里已经有10年以上的时间-公司/我从未遇到 过"UART 外设"详细信息的"此级别"。 拉尔夫 、"没有闪烁!" (很容易通过/退出、 "放弃"-尤其是随着请求的扩展...)
如果"适应性管理努力"不能进一步扩大、 "拉尔夫的坚定努力和愿望"的结合必须得到赞扬、并且值得(非常)特别注意!
[引用用户="Ralph Jacobi]12时12分、
嗯、我不知道如何确定性地评估这样一个时序、但从1188页可以看出、重新编程控制寄存器所需的时间足够长、可以再次重新启用 UART。 我想不建议在 FIFO 刷新完成之前启用 UART。 因此、基于这一点、我要说我们处于时钟周期到微秒的范围内。 如果我可以进一步回退该想法和/或进一步缩小窗口、我将在 AM 中做更多的挖掘。
[/报价]
我假设您是指数据表--但我查阅了第1188页,它是 ADC 输入等效/电压基准页,与 UART 或时序特性无关。 我应该查看其他文档吗?
至于时钟周期/微秒范围、这是令人鼓舞的消息。 非常感谢您的帮助。
[引用 USER="CB1_MOBILE"]
Ralph Jacobi我将在 AM 中进行更多挖掘-看看我是否可以进一步支持该想法和/或进一步缩小窗口。
也许这里值得纪念— —“再一次”——供应商的拉尔夫远远超过 了正常的 高级论坛服务!
[/报价]
许多绿盒很快就会获得大奖。 :-)
[引用 USER="CB1_MOBILE"]
即使在这里已经有10年以上的时间-公司/我从未遇到 过"UART 外设"详细信息的"此级别"。
[/报价]
通常、我不会深入探讨这一级别的外设详细信息。 通信运行得非常好----只要通信的两侧都能通电,并且永远不会遇到错误。 但是、如您所知、我们必须稳健耐用、并且具有良好的恢复/清理/重新同步序列。 到目前为止,我尝试过的一切都不是很好,看起来兔子洞已经导致了一个迷宫般的曲折通道,充满了陷阱和死角。 UART、其 FIFO、DMA、数据表的详细信息、driverlib、我自己的代码以及其他任何"gotchas!" 我跑进去了、我的头开始爆炸。
当遇到错误(以中断信号表示)时、我将尝试按以下行执行操作:
取消正在进行的与有问题的 UART 相关的任何 DMA Tx/Rx 操作
清理 UART 状态--包括:
-在进行中的字符之后停止任何 Tx/Rx 活动
-清除 FIFO
-确定 UART、FIFO、DMA 及其它任何设备是否处于已知状态
-通过重试最后一条消息重新启动通信
-递增一些错误计数器
[引用 USER="CB1_MOBILE"]
拉尔夫 、"没有闪烁!" (很容易通过/退出、 "放弃"-尤其是随着请求的扩展...)
如果"适应性管理努力"不能进一步扩大、 "拉尔夫的坚定努力和愿望"的结合必须得到赞扬、并且值得(非常)特别注意!
[/报价]
我非常感谢 Ralph 的帮助。 也感谢您的认可。
(我们公司的)使用"来自多个来源的 ARM MCU"可能会让您对(近)"死海"卷轴有更深入的了解?
依靠"一个且只有一个"MCU 信息源(甚至一个与供应商的 Ralph 同样有动力且能够做到)可能不会暴露 "其他有价值的方法/解决方案"-由(高度)重叠领域中的人员进行改进!
的确可能有(一些)差异-但我要指出,我们对 "许多相关来源"的搜索/阅读/审查提供或激发见解-可能无法从(任何)"一个和一个" 来源获得。
拉尔夫
公司/我认为-结果并非"总是且仅限于"-(单独)值得信赖! 您的"反应深度"(已有)和"与他人协商"的意愿-表明了卓越的奉献精神和持续的努力。
简直太棒了...
在没有"亵渎"(再次)的情况下、我(轻轻)建议海报可以通过检查 "相关他人"的努力/方法来"获得见解"。 当然,有分歧--答案不大可能显示为"剪切/粘贴"--但发现这种 "技术和机制"在"多次"帮助了我们目前的公司。 (并为我的共同创立做出了贡献-将过去的技术公司公开-从而"方法证明!")
[引用 USER="CB1_MOBILE"]
(我们公司的)使用"来自多个来源的 ARM MCU"可能会让您对(近)"死海"卷轴有更深入的了解?
依靠"一个且只有一个"MCU 信息源(甚至一个与供应商的 Ralph 同样有动力且能够做到)可能不会暴露 "其他有价值的方法/解决方案"-由(高度)重叠领域中的人员进行改进!
的确可能有(一些)差异-但我要指出,我们对 "许多相关来源"的搜索/阅读/审查提供或激发见解-可能无法从(任何)"一个和一个" 来源获得。
[/报价]
这是一个有趣的建议。 实际上、TM4C (123和129)代表了我在 TI 和 ARM 方面的首次体验。 以前在非 ARM 芯片上与其他供应商有过经验。 现在已经有一年了,所以我已经克服了一些相当困难的障碍。 因此、我最近遇到的问题和我在这里提出的问题远小于 n00b、并且更加深入和详细。 当然、这些是最难回答的问题。
我公司(经证实)的结果表明 、"这种扩大的搜索" 通常证明(超出)"有趣"。 虽然这种(相关供应商)方法并不(尤其是)直观、但充分利用许多人(而不是少数人)的头脑风暴能力确实对您有利。 很多人都"错过了"-这里-真遗憾!
这里有一个"恐怖点"(可能)。 如果(假设)另一个 ARM MCU "更好地提供"、您会怎么做、甚至"您是否做出反应"、这正是您需要的? 那么呢? (请原谅我)-这是否不意味着、"更彻底地回顾 MCU 功能"-尤其是那些"深入探索"的(您的 UART、此处)-应该在 更 早的时间内被"识别/搜索/探测"(以确保最佳选择)?
在没有(适当的)解决方案(此处)的情况下、您仍然可以 从"更广泛的搜索"中收集想法、解决方法(甚至可能是"极好的解决方案")。 很明显-没有任何公司会"锁定"""伟大而明智的想法和/或实施! 您(可能)能够 将这种(或那些)方法"摔跤"到 您当前的 MCU 和系统中-这里。 (有一个希望...)
[引用 USER="CB1_MOBILE"]
我公司(经证实)的结果表明 、"这种扩大的搜索" 通常证明(超出)"有趣"。 虽然这种(相关供应商)方法并不(尤其是)直观、但充分利用许多人(而不是少数人)的头脑风暴能力确实对您有利。 很多人都"错过了"-这里-真遗憾!
[/报价]
我同意。 从各种可能的来源学习有很多需要说的。 从某些人那里、我们可以了解要做的事情。 从其他人那里、可以了解不该做什么! 这同样有价值!
[引用 USER="CB1_MOBILE"]
这里有一个"恐怖点"(可能)。 如果(假设)另一个 ARM MCU "更好地提供"、您会怎么做、甚至"您是否做出反应"、这正是您需要的? 那么呢? (请原谅我)-这是否不意味着、"更彻底地回顾 MCU 功能"-尤其是那些"深入探索"的(您的 UART、此处)-应该在 更 早的时间内被"识别/搜索/探测"(以确保最佳选择)?
[/报价]
是的、这里有"恐怖点"、但我有这样的看法:切换 MCU 是一项痛苦而昂贵的工作! 即使我确实找到了另一个提供最完美 UART 的 MCU、或者找到最完美的"在此处插入您的愿望列表"、切换到该 MCU 也不可避免地需要回到方形一、再次攀登陡峭的学习曲线、 这意味着您将遇到难以解决的新问题。 人们很容易想到围栏的另一边的草地是绿色的,但我们现在来到这里的原因是,无论我们来自哪里,这种草地都是绿色的。
我们在研究 MCU 和 MCU 供应商时深入探讨了许多不同的标准、技术标准和其他标准。 我们从比您可以摇棒的更多位置购买开发套件、我们安装了更多 IDE 和开发人员工具、比您想了解的要多、我们运行了测试、我们执行了各种操作。 我们有充分的理由选择 TM4C、我完全支持该决策。 不可能了解世界上每个 MCU 的每个细节、也不可能深入探究、只需选择 MCU 即可。 这是分析造成的瘫痪。 一天结束时,必须做应有的努力,然后必须作出决定,处理出现的任何问题。
[引用 USER="CB1_MOBILE"]
在没有(适当的)解决方案(此处)的情况下、您仍然可以 从"更广泛的搜索"中收集想法、解决方法(甚至可能是"极好的解决方案")。 很明显-没有任何公司会"锁定"""伟大而明智的想法和/或实施! 您(可能)能够 将这种(或那些)方法"摔跤"到 您当前的 MCU 和系统中-这里。 (有一个希望...)
[/报价]
非常有可能。
我们正在进行一些实验... 我将再次发布我们的体验。
您好、12月12日下午、
虽然我无法找到任何进一步的时序信息、但我确实遇到了以下代码片段、我认为您可以利用这些代码片段:
// //等待 UART FIFO 为空,然后等待移位器获取 //输出端口的字节。 // while (!(HWREG (UART0_BASE + UART_O_FR)& UART_FR_TXFE)) { }
如果您还想确保 UART 处于已知状态、您可能还对以下内容的扩展感兴趣:
// //等待 FIFO 为空且 UART 不忙。 // while ((HWREG (ui32Base + UART_O_FR)&(UART_FR_TXFE | UART_FR_BUSY))!= UART_FR_TXFE) { }
希望这对您的努力有所帮助!