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.

[参考译文] PROCESSOR-SDK-AM64X:AM64 UART 触发电平问题

Guru**** 2540230 points
Other Parts Discussed in Thread: SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1237837/processor-sdk-am64x-am64-uart-trigger-level-problem

器件型号:PROCESSOR-SDK-AM64X
主题中讨论的其他器件:SysConfig

你好。

我正在使用 am64x、并正在尝试开发 UART 驱动程序。 幻灯片。

数据表中注明有针对 UART 的可编程触发器。 意思是可编程 FIFO 中断。
如果 FIFO 的字节数超过触发级别、则发生中断。

我正在尝试实施它。 我遇到了一些关于 UART/DMA/FIFO 模式的问题。  

在我的 SDK 中有两个 UART 示例。 两者都使用回调。

这里是技术参考手册->www.ti.com/.../spruim2f.pdf

uart_echo_low_delay_interrupt 示例  :

该示例使用用户管理的中断。

该示例在每次 char 到达时调用回调函数并作为 echo 写入。 无论 SysConfig 上的 TX 和 Rx 触发电平是多少。

这不是我所期望的。 技术文档指出、当 FIFO 中的字节超过触发级别时、将发生中断。

https://github.com/TexasInstruments/mcupsdk-core/blob/next/examples/drivers/uart/uart_echo_low_latency_interrupt/uart_echo_low_latency_interrupt.c

uart_echo_callback 示例:

本示例中有 UART_READ 函数的事务参数。 转换有触发电平变量的计数。  

与其他示例一样、此函数读取每个字节、但在 TX 触发时会打印回。

我假设 Rx 触发器不起作用、但 Tx 起作用。 因为每个字节都发生读取中断、但 仅在其高于打印触发级别时才会发生中断。  

https://github.com/TexasInstruments/mcupsdk-core/blob/next/examples/drivers/uart/uart_echo_callback/uart_echo_callback.c

在完成所有这些事情之后、我尝试 以自己的方式  :

我尝试自行设置相关寄存器。

SysConfig 驱动程序初始化所有 UART 后。 我尝试在以下链接上设置寄存器->  FIFO 触发设置

https://www.ti.com/document-viewer/lit/html/SPRUIM2F/GUID-F58F40A1-FDB6-437F-A7E9-786DE004143E#TITLE-SPRUID7INT_SPRUHI2_UART_00217

没有任何变化。  

在这三个示例中、我更改了 SysConfig Rx 和 TX 中断级别1、8、16、56;没有任何更改。

有一些我不能完全理解的部分。  

TRM 显示使用触发电平激活 DMA 模式。  
在 SysConfig 中、选择 DMA 后没有触发电平选项。 这就是为什么我虽然触发电平不能使用 DMA 的原因。 我需要设置中断。

什么是我的错误或我遗漏了什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mustafa:

    感谢您的提问。

    我会深入了解并回复给您。

    BR Vaibhav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    进行说明。  

    我在 ISR 函数上设置断点(在 Git 上被命名为 UART_CONTROLLEerIsr、但在我的 SDK 上被命名为 UART_masterIsr)

    -> https://github.com/TexasInstruments/mcupsdk-core/blob/next/source/drivers/uart/v0/uart_v0.c

    然后尝试发送和接收字符。 每个传入的 char 都会发生中断、但这不是注释所说的。

    感谢您的关注。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mustafa:

    我将 分步介绍 UART 回传回调的工作方式。

    请允许我多花4到5个小时。

    此致、

    瓦伊布哈夫

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mustafa:

    每当您输入一个字符时、它都会回显、 if 条件 声明: if (appPrms->ReadCount >0U)  8个字符时遇到8个字符。 因此、一旦 字符记录 Cnt 值达到8时、我们退出顶层 while 循环、从而结束应用。

    此致、

    瓦伊布哈夫

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您对更改 FIFO 触发电平的问题。 以下是针对该问题的权变措施。

    可通过调整宏来在代码中设置 RX FIFO 触发电平、如下所述:

    #define APP_UART_RECEIVE_BUFSIZE   (8U)
    此致、
    瓦伊布哈夫

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    当然,这是回调的工作方式的例子。  

    当 char 读取(243-244)时、ISR 函数会递增 ReadCount (256)。  ' while 循环 '检查是否读计数大于0并抓住它。  

     编程的触发电平为"1"时它的工作原理。 但是、如果我设置触发电平16该怎么办。

    我的问题是、即使设置了触发电平16、每个 char 也会发生中断。

    这是在 low_delay_callback 示例中由用户定义的 ISR 函数。

    在接收模式下、在 RX FIFO 达到其阈值之前不会产生中断。 一旦为低电平、只有当主机 CPU 处理了足够的字节以使 FIFO 水平低于阈值时、中断才可以取消置位。

    我假设 threshold 是我在 SysConfig 中设置为触发电平的值。

    我设置了触发级别16、但仍会接收每个字符。

    不应该是这样的:

    ->存储在 FIFO 中的第一个15个字符  

    ->当为16。 字符到达时、中断发生。

    ->我们收到全部16个字符。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的示例更类似于软件触发器。

    每个字符发生硬件中断。 我们仅在接收到8个字符时打印。

    但仍然得到1乘1。  

    我希望在收到8个字符时发生硬件中断。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mustafa:

    感谢您的答复。

    已经存在一个名为"uart_echo"的示例、它确保输入8个字符、然后中断发生。

    此外、我看到您担心的是为什么中断在每读取一个字符而不是一次读取8个字符时发生。

    此外,我会回复你,我会以 EOD 回复你。

    此致、

    瓦伊布哈夫

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否有更新?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mustafa:

    我只能在这里弄清楚、代码中有此行内容:

    appPrms->ReadCount >0U

    尽管将 RX 触发电平设置为 X、但这样会造成结果相差甚远。只要程序在缓冲区中看到任何字符、就会立即对其进行处理。

    它不会真的等待8个字符(一次全部)所需.

    BR Vaibhav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    每个传入的 char 都会触发中断内联 TRM 文档。 这就是为什么  if (appPrms->ReadCount >0U) 条件返回 TRUE。

    据了解、这是某种错误。 有没有任何方法可以报告它、所以他们可能会在下一个 SDK 版本中修复它。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mustafa:

    感谢您的指出。 我会在内部检查并回复给您。 我还将交叉检查该 SDK 示例。

    BR Vaibhav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否有更新?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mustafa:

    我也因此提出了 JIRA。 在我获得更新后、我会与您分享。

    BR Vaibhav