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.

[参考译文] TMS320F28335:SFO 函数导致由于计算0/0而出现浮点异常

Guru**** 1832870 points
Other Parts Discussed in Thread: TMS320F28335, C2000WARE, SM320F28335-HT
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1272439/tms320f28335-sfo-function-causing-floating-point-exception-due-to-computing-0-0

器件型号:TMS320F28335
主题中讨论的其他器件: C2000WARESM320F28335-HT

我在 105 MHz 上将 TMS320F28335与 HRPWM 配合使用。

我将 ePWM 块4和5用于高分辨率 PWM、并选择使用其他未使用的 ePWM 块2来执行 SFO。 当我第一次 在循环中调用 SFO_MepDis_V5 (2)、直到它返回非零时、该函数正确地将 MEP_ScaleFactor [2]设置为74。 但在那之后, 在循环中再次调用 SFO_MepDIS_V5(2)直到它返回非零会导致浮点异常,因为 SFO_MepDIS_V5()例程尝试使用 FS $DIV 将0除以0。 我已经设置了一个断点、FS $DIV 的传入输入寄存器值 显然都为0。

我已将 EPWM2设置保持为默认值、但 TBCTL 设置不同于为 ePWM 块4和5所用的设置。 我还将启用 EPWM2的外设时钟。 除此之外、我不会初始化任何内容(因为它应该是一个未使用的 PWM)。

我缺少什么吗? 我想只要 PWM 模块不使用 HRPWM,我就可以随意地调用 SFO_MepDiss_V5 ()。

谢谢

乔尔

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

    我需要说明的是、我使用的是 SFO 库的 V5B。

    我只是尝试回到 V5,没有出现这个问题--我可以随意重复调用 SFO_MepDiss_V5()对任何频道。

    我还尝试了在 V5B 库中按原样运行 TI SFO 示例、但我 多次调用 SFO_MepDiss_V5 ()(从示例中复制/粘贴)、我看到了相同的行为。 换句话说,如果您 对任何通道多次调用 SFO_MepDis_V5 (),即使 TI 示例项目也会与库的 V5B 一同失败。

    所以基本上,我可以知道库的 V5B 中的 SFO_MepDis_V5()不能正常工作。 不仅如此、它还提供了浮点异常、非常可恶的操作。

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

    大家好、Joel、  

    您当前正在使用哪个版本的 C2000Ware? 要确认的是、您所参考的 TI 示例是 HRPWM_SFO_v5示例还是不同的 SFO 示例?  我还会尝试在硬件上运行示例、看看它是否会造成相同的问题。

    此致、

    艾里森

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

    尊敬的 Allison:

    我使用的是 C2000Ware 5.0.0.0和 ti-CGT-C2000_22.6.0.LTS。

    我运行的示例是 HRPWM_SFO_v5。 我只需修改代码以运行以下循环两次、而不是一次。

        for(i=1;i<PWM_CH;i++)
        {
            //
            // Enable HRPWM logic for channel prior to calibration
            //
            (*ePWM[i]).HRCNFG.bit.EDGMODE = 1;
            
            while ( SFO_MepDis_V5(i) == SFO_INCOMPLETE );
            {
                //
                // returns "0" when cal. incomplete for channel
                //
            }
        }
    
    

    第一次计算后,MEP_ScaleFactor[]数组值的计数为50左右。 第二次之后、每次输入都是32767个。 在我的实际应用程序(不直接使用 C2000Ware,而是使用从它衍生出来的代码)中,我 启用了浮点异常,最终每个 MEP_ScaleFactor [] 条目获得32768,同时沿途还有异常。

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

    大家好、Joel、  

    我在 TI 示例中重复了循环、能够看到~32767 MEP_ScaleFactor []数组和跳转到 MEP 错误、如所述。  我能否问  您是否需要连续多次调用 MEP DISABLE 循环? 您的程序中出现的0/0 FP 错误是否与示例中的结果不同? 如果您还可以提供更多关于器件应用和对 HRPWM 的需求 的信息-您是否尝试过 SFO_MepEn 来看看它是否会在您的程序中产生相同的错误? 我还联系了 SFO 图书馆专家、收集更多有关 SFO 图书馆特定内容的信息、因为您没有在程序中看到其他版本的问题、所以可能会导致您看到的问题。  

    此致、

    艾里森

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

    尊敬的 Allison:

    感谢您对此进行研究。

    我们的 应用是一个温度非常高(175°C)的伺服控制器、PWM 频率为96kHz、需要大约14个有效位的 D/A。 在高温下、我们 将 CPU 频率限制在大约100 MHz。 除此之外、96 kHz 的分辨率远不及 HRPWM 的14位。

    实际上、我的应用并不会重复调用 MEP DISABLE 循环;它在后台大约每秒调用一次、正如 TI 文献中所建议的那样。 根据文献我的理解、如果 PWM 通道未使用 HRPWM、校准 MEP 比例因子的最有效方法是偶尔使用该通道调用 MEP 禁用例程。  这种方法还将支持的 HRPWM 最小和最大占空比保持在其最大范围内。 但是、在实施时、我看到了0 / 0和 FP 异常。 因此、为了帮助缩小范围并消除中断处理程序等问题、我使用了一个非常基本的程序、在我的启动代码中简单地调用两次内容。 这证明了我们的应用程序的中断等与该问题无关。

    我怀疑我看到的行为(0/0采用32768 MEP 比例因子)与 TI 应用的32767 MEP 比例因子的根本原因相同。 我不确定根本原因是什么、因为我无法访问 SFO 库的 C 源代码、但我的猜测是、根据 堆栈和其他寄存器上发生的其他情况、 可能会细微地发生不同的"坏"情况。

    使用 SFO_MepEn 库可能是一种选择、但根据其已记录的限制(占空比范围减慢且减小幅度更大)、它不是我们的起始解决方案。 仅根据 TI 文献、我们应用的自然选择是 SFO_MepDis 而不是 SFO_MepEn 。

    我将面临的另一个挑战是、我们必须认证此申请以用于飞行的 DO-178C DAL A。 这意味着所有源代码都需要为安全起见而众所周知和认证。 SOF 库在这里带来了挑战。 显然、可生成 FP 异常的代码是不可认证的。 有时、我需要联系您(TI)以获得有关我们如何理解代码布局和意图以便进行验证的支持。

    谢谢

    乔尔

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

    Joel、

    非常感谢您的详细 回答。 是的,你会希望你 SFO_MepDis ()比 SFO_MepEn ()更快速的优化。 请注意:175°C 也超出此器件的规格、请谨慎使用。 我当前没有对库源的访问权限、但我正在等待回传它是否能够被访问。 我知道您需要熟悉库源代码、无论您是否拥有飞行安全 认证、我们都会在下周早些时候与您联系。 我将继续调查此问题、并在此处尝试验证 V5B 库是否是导致此问题的部分原因、并不断向您更新我的发现。

    此致、

    艾里森

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

    尊敬的 Allison:

     实际上、我们将在飞行中使用 SM320F28335-HT、我认为该器件支持高达150或210摄氏度的结温、具体取决于封装。 但是、对于实验室开发、我们使用标准 TMS320F28335。

    谢谢

    乔尔

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

    大家好、Joel、

    很高兴听到您计划使用 HT 版本、感谢您对此的澄清-只是想再次检查以确保无误。 我也验证了 V5版本中的另一个示例具有类似的程序、并发现它正常工作、但是输出了 V5B 的 MEP 错误。 还在等待听到 SFO 库源访问的消息、以便我能够更好地了解该问题、但我一定会在下周早些时候向您通报这方面的最新情况。 感谢您的耐心、Joel。

    此致、

    艾里森

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

    大家好、Joel、

    再次感谢您的耐心等待。  SFO 库 源访问权限为 TI 专有、因此 遗憾的是、我们无法支持该请求以对其进行审查。 为了解决 POST 的即时问题、建议您将 V5库用于程序。 我知道还有针对应用的安全认证查询;为此、您还可以 利用 CCS 中找到的反汇编工具。 如果有其他需要我帮助的地方、请告诉我。

    此致、

    艾里森

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

    尊敬的 Allison:

    我有几个跟进问题/评论。

    1. TI 会针对 V5B 库中的 SFO_MepDis ()函数不能按广播工作这一事实添加勘误表吗?

    2. SPRUI07指出:"TI 提供一个 C 可调用库、其中包含两个 SFO 函数、这些函数利用此硬件并确定最佳 MEP_ScaleFactor。 因此、MEP 控制和诊断寄存器保留供 TI 使用。" 在上面、您会说:"SFO 库 源访问为 TI 专有、因此 我们很遗憾无法支持对其进行审查的请求。"  因此、TI 不提供所涉及寄存器的详细信息、也不提供对使用这些寄存器的源代码的访问。 我认为这 意味着 HRPWM 不能在安全关键型应用中使用、因为 证明被调用的函数能够正常运行(实际上、它们不在库的至少一个版本中)将是非常不可能的。 TI 能否通过保密协议或类似协议在离线情况下与我们合作、为我们提供必要信息的访问权限? 否则、TI 的立场很可能意味着 我们不得不选择不同的解决方案。

    谢谢

    乔尔

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

    大家好、Joel、  

    感谢您的提问和评论。 关于您的第一个问题、这些以软件为中心的错误  类型通常并不是我们在 器件勘误表中包含的内容类型。 相反、我正在研究这种与 SFO 软件相关的信息的正常使用情况。 第二点、该 F2833x 器件未针对任何安全关键型应用进行预先认证、因此我们无法保证它能够满足安全认证流程的要求。  我一定会 咨询其他专家、并确定我们是否还有其他支持可以为您提供、感谢您耐心等待我们进行深入研究。  我还需要注意的是、虽然 F28335仍然是始终保持活跃的 TI  器件、但我也强烈建议您研究更新的一代 C2000器件、这些器件支持更多外设、具有增强的特性、具有现有的 安全认证和支持、 且成本较低(例如、F2807x 或 F2837xS)。  

    此致、

    艾里森

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

    尊敬的 Allison:

    我不知道是否有高温 F2837xS 器件可用。 请告诉我。

    谢谢

    乔尔

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

    大家好、Joel、

    抱歉、我错误设定了 适用于飞行应用的建议器件的工作温度范围。 您认为 F28335-HT 是唯一适合您的 操作环境中175°C+温度的可用器件。 我 意识到了与此相关的问题、并且出于安全目的需要访问源。  关于 NDA 下的发布、我们考虑了一些因素、但现在我们 在内部访问源代码时也遇到了一些问题 、因为这是一个旧器件、原始源是 几年 前在 与当今使用的基础设施完全不同的基础设施上开发的。 我正在 积极地研究这一问题 、明天或在收到另一位正在旅行的人的回复后、我将再次向您通报最新情况。

    此致、

    艾里森  

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

    大家好、Joel、

    再次感谢您的耐心等待。 为了更新您的信息、我们没有 访问 SFO 库的较旧 V5版本的权限。 我们确实有最新的 SFO 库 v8源代码;但是、我 不知道 v8库与旧版器件兼容。 我将 对此进行检查、以确保我们已探索所有选项、并将在下周早些时候与您联系、以便我确认。 如果您在此 期间还有其他问题或评论、敬请告知。

    此致、

    艾里森

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

    大家好、Joel、

    非常感谢您的等待。  我们已经获得了 SFO V5来源、并正在内部讨论如何与您分享。 我将在收到您的反馈时向您提供最新信息、但请告诉我您的终端是否也有此方面的更新。  

    此致、

    艾里森

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

    大家好、Joel、

    只是 继续跟进以确认 是否仍要访问 SFO 库 V5源代码、因为该线程已经安静了一段时间。 我们可以通过安全软件为您提供访问权限的流程、但在我进一步说明打包流程之前、我想确认这仍然是您需要的。 我还联系了 FAE 联系人、看看他是否知道要推动获取源访问、但我没有听到、因此我想我会 在这里发帖。 请告诉我、这是否仍是您希望走的道路、或者我是否可以提供其他帮助。

    谢谢。此致、

    艾里森  

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

    尊敬的 Allison:

    是的;我们仍然需要访问 SFO 库 V5源。 很抱歉、当时很安静、但我对这次讨论没有太多帮助、因为我只是处于等待模式。

    谢谢

    乔尔

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

    感谢您的回复、Joel。 听起来不错! 我将继续该过程。 如果您愿意、我们也可以通过电子邮件继续。

    此致、

    艾里森

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

    大家好、Joel、

    刚刚通过电子邮件进行了联系。 如果收到邮件有问题、请告诉我。

    此致、

    艾里森