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.

[参考译文] TL16C752D:当接收 FIFO 变为空时、接收中断清除方式

Guru**** 2392095 points
Other Parts Discussed in Thread: TL16C752D

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/873382/tl16c752d-receive-interrupt-clear-way-when-receive-fifo-becomes-empty

器件型号:TL16C752D

大家好、

我的客户将 UART 器件从 TL16C752B (EOL)更改为 TL16C752D、现在正在使用其系统评估 TL16C752D。 他们发现 TL16C752D 存在以下问题。

对于 TL16C752B、当在 LSR 寄存器中接收 FIFO 变为空时、接收中断被清除。
但是、对于 TL16C752D、当接收 FIFO 在 LSR 寄存器变为空时、接收中断不会被清除、并且从 RHR 寄存器读取的过程会停止。

Q1:要在 TL16C752D 的 LSR 寄存器中清除接收 FIFO 为空时的接收中断、它们该怎么做?

当使用 TL16C752D 接收 FIFO 变为空时、他们再次尝试 RHR 寄存器读取过程、但在某些情况下接收中断被清除、在某些情况下也未被清除。

当在 LSR 寄存器检测到接收 FIFO 为空时、如果 TL16C752D 等待10ms (延迟10ms)、则接收中断被清除。
Q2:上述操作是否符合 TL16C752D 的规格?
谢谢你。

此致、

Koshi Ninomiya

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

    您好、Ninomiya-San、

    我们将对此进行调查、下周初将再次与您进行讨论。

    此致、

    最大

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

    尊敬的 Max-San:

    我期待您的检查结果。
    我收到了客户提供的附加信息、如下所示。
    谢谢你。

    此致、

    Koshi Ninomiyae2e.ti.com/.../TL16C752D.xlsx

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

    您好、Ninomiya-San、

    感谢您分享额外信息。 此处描述的程序流程看起来不错。 由于器件已感知到 RX 超时、中断似乎处于活动状态。 这由 IIR 中的值0xCC 表示。 这也反映在设置为在 RX FIFO 中显示错误的 LSR[7]中。 该中断通过读取 RHR 来清除。 奇怪的是、当读取完成时、中断不会清除。

    在读取 RHR 后、如果 RX FIFO 已为空、您可以共享寄存器的内容吗?

    我看到、在您共享的代码图的开头、程序会检查 RX 超时中断。 这部分代码如何处理此中断? 您描述的测试中是否使用了该部分?

    我不会期望延迟(尤其是长达10ms)以允许中断自动清除。 在此期间是否可能复位器件? 电源电压波动或控制器看门狗超时?

    能否指定波形1和波形2之间的测试差? 使用软件读取 RHR 不会清除中断–但通过 UART 控制器读取 RHR 会清除中断?

    此致、

    Eric

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

    您好、Eric - San、

    在读取 RHR 后、如果 RX FIFO 已为空、您可以共享寄存器的内容吗?
     答:读取 RHR 后寄存器的内容与之前发布的 Excel 文件中写入的内容相同。
        IER        0x05
        IIR         0xCC
        LCR      0x1F
        MCR     0x0B
        LSR       0x60
        MSR     0xB0
        SPR      0x00
       此时 RHR 寄存器的内容为"0x06"。
       似乎正确接收到原始通信数据0x06 0x0D 0x0A (ACK +线路馈送代码)、但无论 RHR 寄存器被读取的次数是多少、中断都不会在0x06释放。

    我看到、在您共享的代码图的开头、程序会检查 RX 超时中断。 这部分代码如何处理此中断? 您描述的测试中是否使用了该部分?
     答: 检测到 RX 超时时时的中断处理方法通常如下(检测到 RHR 中断时的处理方法相同)
         对于 LOOP (RX FIFO 大小){
      读取 LSR
    if (LSR 的 BIT0为0){
                读取 RHR・・・・①
                 中断;
               }
               读取 RHR・・・・②
             }

       波形1是、
       在中断处理中执行进程之前、在调试器断点处停止。
       这是步骤①中的处理在步骤执行中执行时的波形。

       
       -如果是 TL16C752B、  STEP ①未被写入、那么当所有接收数据被读取时、似乎接收中断被清除。
       -对于 TL16C752D、  添加了步骤①以解决此问题。  在中断未被清除的情况下 、执行第①步以退出中断处理、并重复中断。

    我不会期望延迟(尤其是长达10ms)以允许中断自动清除。 在此期间是否可能复位器件? 电源电压波动或控制器看门狗超时?
     答: 关于10ms 延迟、在最初确定它是传输中断还是接收中断之前、当他们在任务的传输过程中使用延迟对其进行测试时、它会起作用。 在这段时间内、可以确认没有功率波动或控制器复位、但是由于发送 FIFO /空中断时序的移位、到控制器寄存器的访问时序或顺序可能发生了变化。

    能否指定波形1和波形2之间的测试差? 使用软件读取 RHR 不会清除中断–但通过 UART 控制器读取 RHR 会清除中断?
     A:波形1是由软件执行上述步骤①过程时的波形。
       他们通过重复中断处理过程多次读取 RHR。
       但 IRQ 未被清除。

       使用 CPU 的 ICE 调试器生成波形2、这是读取 UART 控制器地址时的波形
       (由存储器映射 I/O 方法访问)。
      在这种情况下、IRQ 被清除。

    谢谢你。

    此致、

    Koshi Ninomiya

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

    您好、Ninomiya-San、

    感谢您的耐心和澄清、这是一个奇怪的问题。  

    我误解了寄存器值的时序。 感谢您的解释。 要进行确认、是否在执行步骤(2)后出现列出的状态?

    使用 TL16C752B 与16C752D 时、如果在不执行步骤(1 )的情况下运行相同的代码、则会导致 TL16C752D 中出现问题、而不是 TL16C752B。 是这样吗?

    3.当 CPU 的 ICE 调试器直接访问时、会听到器件的行为会有所不同、这是很奇怪的。 是否有方法来确认两个读取过程是相同的? 也许调试器在提示不同行为之前有更多步骤。

    重复读取 RHR 时、即使 FIFO 显示为空、也会继续接收相同的值"0x06"。 是这样吗?

    5.从哪个引脚测量 IRQ? 这是 RXRDY 引脚的状态吗? 如果没有、RXRDY 在读取具有空 FIFO 的 RHR 后是否保持低电平?

    此致、

    Eric

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

    您好、Eric - San、

    1.是的、在执行步骤(2)后、在下一步(1)中读取寄存器值。

    2.是的。

    ICE 调试器的读取过程尚未阐明。 他们还想知道 ICE 调试器的读数不同之处、因此他们需要并行进行研究。

    4.很抱歉,此信息不能确定。
      当使用 ICE 调试器对步骤(1)的执行部分执行源代码级调试时、变量的内容仅与此类似。
      实际上、RHR 寄存器的内容可能无法正确反映、也可能取决于堆栈存储器的状态。
      当他们再次检查它时、变量的内容看起来像0x00。
      使用 ICE 调试器进行读取时、释放中断时可以同时读取的值也是0x00。

    5.波形的 IRQ 上次未直接查看 TL16C752D 的引脚。
      TL16C752D INTA 输出进入 FPGA、并且通过 FPGA 的 IRQ 输出(低电平有效)被输入到 CPU、这是因为夹子更容易挤压、所以他们在那里看到了它。

      这次、他们检查了 TL16C752D 的 INTA 引脚和 RXRDYA 引脚的状态、并附加了波形。
       -随附的文件图1是发生 RX FIFO 中断时的情况。 INTA 和 RXRDYA 同时激活。

       -图2显示了在前一步(2)中读取的 RHR (它不是空的、但实际上包含接收到的数据)。
        此时 RXRDYA 被清零。 INTA 保持高电平。

       -图3显示了 ICE 调试器读取包含 RHR 在内的地址。
        当由 ICE 调试器读取时、INTA 变为低电平。

    谢谢你。

    此致、

    Koshi Ninomiya

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

    您好、Eric - San、

    我期待你对1至5的答复。

    客户还有以下其他问题、

    问题6:
    在 CHA 上接收到信号且/ RXRDYA 和 INTA 置位后、读取 RHR 将使/ RXRDYA 和 INTA 无效。
      对于 TL16C752D、取消置位/RXRDYA 和取消置位 INTA 的时序非常不同。
     -->请检查下面附加的实际测量波形
      e2e.ti.com/.../TL16C752D-Waveforms-at-RHR-Read.xlsx
    TL16C752D 中上述两个信号的失效条件是否常见?
    还是在 TL16C752D 内部逻辑上有所不同?
    如果它们在逻辑上不同、请告诉我们每个失效条件。

    问题7:  
    查看图2。 TL16C752D 数据表的常规读取时序、它显示/ CS 处于活动状态时的/ IOR 条件和/ IOR 处于活动状态时的/ CS 条件。
    作为读取操作、如果/CS 首先激活、满足 t6s 后将置位/IOR、并且当 t7w 满足时将首先取消置位/CS、则 TL16C752D 中的操作将会出现问题、是否不会出现?

    谢谢你。

    此致、

    Koshi Ninomiya

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

    嘿、Koshi-San、

    Eric 目前不在办公室、因此我将担任这一 e2e 职位。

    "Q6:
    在 CHA 上接收到信号且/ RXRDYA 和 INTA 置位后、读取 RHR 将使/ RXRDYA 和 INTA 无效。
      对于 TL16C752D、取消置位/RXRDYA 和取消置位 INTA 的时序非常不同。
     -->请检查下面附加的实际测量波形
      RHR Read.xlsx 上的 TL16C752D 波形
    TL16C752D 中上述两个信号的失效条件是否常见
    还是 在 TL16C752D 内部逻辑上有所不同
    如果它们在逻辑上不同、请告诉我们每个断言条件。"

    当您在 DMA1模式下读取 RHR 并将其清空时、应将 RXRDY 置为有效。 RXRDY 失效的另一种情况是 RX 线上发生错误。

    INT 可以根据您启用的 INT 来取消置位。 在您的原始帖子中、看起来像读取 IIR 表示发生了 RX 超时。 假设没有发生其他中断、那么我希望 INT 使其无效。 (这似乎不属于您的情况)。

    如果 INT 和 RXRDY 有不同的断言触发器、则断言时序可能与 INT 和 RXRDY 不同。 该器件主要是数字逻辑器件、因此在某些形式的和/或多路复用器中、INT 还可能需要一些额外的时间来更改逻辑状态、因为它会经过更多的逻辑门。

    我可能需要使用该器件的内部 EVM 来查看我是否可以使 INT 和 RXRDY 同时取消置位、或者它实际上是否像您的波形那样不同步发生。

    "Q7:  
    查看图2。 TL16C752D 数据表的常规读取时序、它显示/ CS 处于活动状态时的/ IOR 条件和/ IOR 处于活动状态时的/ CS 条件。
    作为一个读取操作、如果/CS 首先激活、/IOR 在 t6s 被满足时被置为有效、并且在 t7w 被满足时/CS 被置为无效、 那么 TL16C752D 中的操作将会出现问题、不会出现吗?"

    在内部、器件使用"and"逻辑来查看 CS 和 IOR 在执行读取前是否均为低电平。 哪个先变为低电平、然后变为高电平不重要(要读取所需的全部内容、两条线路都为低电平)。 您甚至可以在整个时间内将 CSA 保持为低电平、如果您只想关注通道 A、则只需切换 IOR/IOW

    ----------------------------

    我想看看我是否可以在工作台上重现客户的问题。

    您能否向我提供客户的:

    • 时钟速度:
    • 波特率:
    • VCC:
    • 寄存器写入流程(写入 IER、然后写入 LCR、然后写入等...)
    • 有关如何检查 何时需要读取 RHR 的高级程序

    对于 LOOP (RX FIFO 大小){
      读取 LSR
    if (LSR 的 BIT0为0){
                读取 RHR・・・・①
                 中断;
               }
               读取 RHR・・・・②
             }

    这是您之前发布的内容。 我想知道他们是在寻找 INT/RXRDYA/还是只看 LSR

    谢谢、

    -Bobby

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

    您好、Bobbi-San、

    "Q6:
     > 如果 INT 和 RXRDY 有不同的断言触发器、则它们的断言时间可能与 INT 和 RXRDY 不同。 该器件主要是数字逻辑器件、因此在某些形式的和/或多路复用器中、INT 还可能需要一些额外的时间来更改逻辑状态、因为它会经过更多的逻辑门

     --> 在 INT 和 RXRDY 都失效的情况下,是否有可能只有 RXRDY 失效?

    客户的:

    • 时钟速度:14.7456MHz
    • 波特率: 19200bps、数据8位、奇偶校验、停止位2位、连续无
    • VCC:3.3V
    • 寄存器写入流程(写入 IER、然后写入 LCR、然后写入等...)

        *关于对寄存器的写入流程,当接收 FIFO 中出现问题时,数据是只读的,不会被写入。 但是、启动时初始处理的写入流程如下。

      写入 IER:0x00

      写入 FCR:0x00

      写入 MCR:0x00

      写入 MCR:0x00

      写入 IER:0x00

      读取 LCR

      写入 LCR:获取或介于 LCR 读取结果和0x80之间(设置 LCR[7]=1)

      写入 DLL:0x30

      写入 DLH:0x00

      读取 LCR

      写入 LCR:获取 LCR 读取结果和0x7F 之间的值(设置 LCR[7]=0)

      写入 FCR:0xFF

      写入 LCR:0x1F

      写入 MCR:0x08

      写入 IER:0x05

       

      读取 MCR

      写入 MCR:获取或介于 MCR 读取结果和0x03 (写入0x0B)之间

      *通过上面的写入流程,启动时的写入处理完成。
      *直到此时处理时,调试器读取的寄存器值如下:
       

      RHR:0x00

      IER:0x05

      IIR:0xC1

      LCR:0x1F

      MCR:0x0B

      LSR:0x60

      MSR:0xB0

      SPR:0x00

       

    • 有关如何检查 何时需要读取 RHR 的高级程序

      关于从 RHR 读取接收到的数据的过程、
      中断处理从链接到 INTA 的中断信号开始、
      按照以下步骤访问 RHR。
      第一。 领导 IIR
      2。 如果 IIR 的 BIT0-3值为0x4或0xC、则启动"接收处理"
      3号。 此"接收处理"是我们之前联系过的以下处理。
      也就是说、

      对于 LOOP (RX FIFO 大小){
           读取 LSR
           if (LSR 的 BIT0为0){
                      读取 RHR・・・・①
                       中断;
                           }
                   读取 RHR・・・・②
                        }

      补编。
       -通过处理 for 循环中接收到的字节数的②来读取 RHR。
       如果所有接收到的数据都被读取、在处理 μ ②时 RXRDY 位将被取消
       -如果接收到的数据变为空、在 μ ①中执行处理后、退出循环以完成接收中断处理
       在我们的情况下,由于 INTA 未被释放,IIR 寄存器的值为0xCC,因此,在这之后,请不停地重复步骤#1至#3。

      谢谢你。

      此致、

      Koshi Ninomiya

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

    嘿、Koshi-San、

    "在 INT 和 RXRDY 均应失效的条件下、是否有可能只有 RXRDY 失效?"

    不能、编程/置位寄存器无法使 RXRDY 仅在两者均无效时失效。 在外部、您可以将两个信号馈入与门、但不能从软件的角度。

    至于您的其他信息、我将了解我是否可以在明天将代码组合在一起、尝试复制您看到的内容。 如果在明天离开之前遇到任何问题、我将发布更新。

    谢谢、

    -Bobby

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

    嘿、Koshi-San、

    我当前已设置初始化代码、但我需要其他信息。

    您要发送哪些数据? 例如(0xAA、0xAV、0x1F… 字节60)我假设您连续发送60个字节。

    我看到您在器件中启用了回送模式、您是通过 TXA 写入 THR?还是有单独的处理器将数据发送到 RXA?

    谢谢、

    -Bobby

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

    您好、Bobbi-San、

    根据客户、
    还有另一个处理器向 RXA 发送数据。

    如果一个字节的接收中断发生、则会发生这种现象。
    例如、在测试中、从使用单独电缆连接的通信软件中、仅发送一个字符、如"1"或"A"(ASCII 代码0x31或0x61)。

    即使在实际应用的操作中、一次连续接收的数据也小于60字节。
    0x06 0x0D 0x0A (ACK、CR、LF)等。

    关于 THA、
    在测试中、如果 RXA 在将数据写入 THR 之前接收到数据、则会发生一种现象、因此不会传输任何数据。
    (实际应用每10分钟发送59字节数据。)

    谢谢你。

    此致、

    Koshi Ninomiya