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.

[参考译文] CCS/TMS320F28377S:中断(如 ADC、PWM 等)是否会中断 EMIF 读取或写入序列?

Guru**** 2609955 points
Other Parts Discussed in Thread: TMS320F28377S, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/685593/ccs-tms320f28377s-does-interrupts-such-as-adc-pwm-etc-interrupts-interrupt-the-emif-read-or-write-sequence

器件型号:TMS320F28377S
主题中讨论的其他器件: C2000WARE

工具/软件:Code Composer Studio

您好!

我使用 TMS320F28377S 处理器进行项目工作。 我已在异步模式(16位)中使用 EMIF 接口将此 DSP 配置为 FPGA。

我已将 EMIF 配置为与 FPGA 同步。

READ_SETUP_TIME 4 (50nsec)

WRITE_SETUP_TIME 4 (50nsec)

READ_STROBE 时间4 (50nsec)

WRITE_STROBE 时间4 (50nsec)

 READ_HOLD_TIME 7 (80nsec)

WRITE_HOLD_TIME 7 (80nsec)。

TA (周转时间) 3 (40nsec)

最大等待计数80h

但是、当我在从 FPGA 读取数据大小(126KB)时看到0xFFFF 介于两者之间 时、每次读取的速率为170 * 16位。

例如、每次读取可花费0.6-0.7 μ s (16位)、对于  126KB = 38.7usec、可达到0.7 μ s。  

我怀疑、来自处理器的中断可能导致读取操作或 EMIF 读取错误。

请查找以下数据。 0xFFFF 是未知数据。

请向我推荐一种可能的解决方案或调试方法来进行跟踪。

谢谢、此致

Chandra

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

    Chandra、

    当 CPU 使用一个循环从 EMIF 读取数据块时、一个 CPU 中断当然可以中断 CPU。  您可以通过切换 ISR 内部的 GPIO 引脚来配置此行为、以查看它们是否与 EMIF 读取一致。

    如果 EMIF 块是中断、您有两种保护其读取的通用方法:

    1. 在读取 EMIF 数据时禁用中断(可能不需要)、或
    2. 使用 DMA 或 CLA 来执行读取(推荐)

    C2000Ware 中提供了 EMIF_dc_*示例,您可以参考这些示例来设置 DMA 或 CLA 传输。

    Tommy

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

    嗨、Tommy、

    感谢您的快速响应。 最好使用 DMA。 目前、我正在阅读要在项目中使用的 DMA 方法。 您能不能建议我思考以下问题、以便更好地了解具有中断的 EMIF。

    我想、单个 EMIF 读取(单个读取调用操作、即 Setup、选通和保持)不能被中断。 如果是这样、在循环中使用 EMIF 读取数据块时、CPU 中断可以中断读取、然后 CPU 可以停止临时读取操作、处理中断并恢复 EMIF 读取。 基于此、如果 EMIF 读取可以在没有任何障碍物的情况下完成读取块。

    如果上述内容不正确、请更正。

    谢谢

    Chandra

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

    Chandra、

    是的、单个 EMIF 异步操作是原子操作。   当一个 CPU 读取指令被发出时、它将在数据从 EMIF 返回前暂停。

    因此、在读取循环的情况下、当产生中断时、CPU 将被挂起、直到活动的 EMIF 读取操作完成、然后它将切换上下文来处理中断。  在处理中断后、CPU 将在 EMIF 读取后恢复执行。

    Tommy

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

    嗨、Tommy、

    感谢您的更新和确认。

    根据最后一个共享信息、CPU 将进行上下文切换以处理 EMIF 读取的中断。

    因此、在这种情况下、不会因为中断而导致数据损坏。 在这种情况下、为什么我们应该在循环中读取 EMIF 时阻止中断。

    请就此澄清一下。

    此致

    Chandra

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

    我的印象是、你已经确定问题是中断了 CPU 读取循环。

    FPGA 仿真的是真正的异步存储器接口吗?在该接口上、一个存储器字根据 EMIF 呈现的地址放置在总线上? 如果遵循此协议、则 CPU 读取循环不应存在任何中断问题。 只有在有一些自定义实施时、我才会遇到问题。

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


    感谢您的回答。
    我的假设是中断 CPU 读取循环。 为了确认我在读取期间阻止了中断、我能够读取包含任何错误数据的所有数据块。 在这种情况下、我认为中断可能是一个问题。 但是、当我分析该问题以了解详情时、我已经弄糊涂了中断是如何导致这种情况的。 因此、它会对我来说进入死锁状态。 由于这个原因、我已经计划了 e2e。 根据项目限制、我不应使用 DMA 或 CLA。

    我已经与 FPGA 开发人员确认了真正的异步存储器接口、他们确认在接收到读取请求之前、不能在总线上放置数据。 我已经通过 CS (芯片选择)引脚根据 CPU-EMIF 设置高电平和低电平状态进行了确认。
    在执行读取操作时、我们观察到额外的38 nsec-50 nsec 选通信号周期。
    Hope Extended Wait 可以处理这个问题。

    我遵循了 TI 和 FPGA 开发人员团队提供的时序计算。 请在下面找到详细信息(这是自定义实现吗?)

    EMxCLK = 10nsec

    EMIF 配置为:
    异步配置(ASYNC_CS2_CR)、
    选择 Strobe = 0 (正常模式)
    已启用扩展等待、
    异步总线宽度= 1
    EM_WAIT 极性= 1、

    参数值(ns)
    设置50
    选通脉冲50
    按住80

    R_Setup/W_Setup = Setup * fEM1CLK -1
    50ns * 100MHz -1 = 5-1 = 4
    R_strobe/W_strobe =选通* fEM1CLK -1
    50ns * 100MHz -1 = 5-1 = 4
    R_HOLD/W_HOLD =保持** fEM1CLK -1
    80ns * 100MHz -1 = 7

    希望这些信息能提供一些明确的信息。 任何建议都非常值得注意。


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

    Chandra、

    您能不能澄清一下"在执行读取操作时、我们观察到额外的38 nsec-50 nsec 选通信号周期"是什么意思?

    EM_WAIT 函数通常不用于响应时间不确定的器件。  我假设您的 FPGA 具有固定的周期时间行为。  是否可以增加选通周期以满足 FPGA 响应时间?

    您的 EMxOE 信号是否具有预期的有效持续时间?  最好确认 EMIF 确实在100MHz 下运行。

    C2000Ware 中还有一个 EMIF 配置工具、您可以使用该工具来仔细检查寄存器设置:

    \ti\c2000\C2000Ware_XXXX\boards\TIDesigns\F28379D_EMIF_DC\C2000-EMIF_ConfigurationTool.xlsx

    我还建议您在示波器上查看 FPGA 读取、以确认引脚上的数据是否正常。

    Tommy

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

    嗨、Tommy、

    感谢您提供的信息和工具。

    我已使用(Excel 文件用于计算 EMIF 值)工具更新设置、选通和保持时序。 请在下面找到观察结果。

    根据 FPGA、  

    写入建立时间、写入选通时间、读取建立时间、读取选通时间为50nsec。

    写入保持时间、读取保持时间为80nsec。

    请在下面找到详细信息:

    其中、写入和读取保持时间将超过位字段限制(R_HOLD、W_HOLD 为3位范围0-7)。 因此、我选择了将 W_HOLD 和 R_HOLD 值设置为7h。 这低于预期。 TA 也是如此。

    但是、我将使用以下计算来计算设置、选通、保持和 TA 时序

    R_Setup/W_Setup = Setup * fEM1CLK -1

    50ns * 100MHz -1 = 5-1 = 4

    R_strobe/W_strobe = 选通* fEM1CLK -1

    50ns * 100MHz -1 = 5-1 = 4

    R_HOLD/W_HOLD =保持* fEM1CLK -1

    80ns * 100MHz -1 = 7

    其中   fEM1CLK 为 100MHz。

    请使用小于计算值的值来建议影响。 请建议我另一位解决此问题的人吗?

    我已捕获 FPGA 读写时序、请在下面找到详细信息。 标记为蓝色的是"在选通时间结束前额外增加38-50ns "。 这意味着 FPGA 已经提供了额外的选通时间。

    遗憾的是、我们无法更改 FPGA 时序(限制)。

    此时序是否会影响数据丢失? 建议我解决这个时间过长的问题。 任何建议都非常值得注意。

    如果需要任何信息、请告知我。

    谢谢

    Chandra  

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

    Chandra、

    除非 FPGA 对识别背靠背操作有响应时间限制、否则 TA 不会为您提供太多帮助。

    您可以使用较大的选通脉冲值吗?  数据预计在选通信号周期结束时有效、选通信号寄存器字段为6位宽、因此数据总线有效的延迟时间最多为(63+1)个周期。  根据您的波形、这应该已经足够了。

    我无法判断您的哪个信号是 FPGA 输入或 FPGA 输出、因此请帮助澄清、如果增大频闪灯功能不有用。

    Tommy

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

    嗨、Tommy、

    我们已经解决了这个问题。 有关 FPGA-EMIF 没有问题。 它是内部错误、我们已清除。
    非常感谢您的帮助和建议。

    此致
    Chandra