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.

[参考译文] TMS320F28069:CLAsin 计算错误

Guru**** 2563960 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/916921/tms320f28069-clasin-calculation-error

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

您好!

我的客户正在使用 CLA 计算 sin 并得到以下波形:

CLA 代码为:

C28x 代码为:

将角度写入 fCpuToCla1_PvCtrl、然后软件触发 CLATASK1、在 CLATASK 中、使用 CLAsin 计算 sin、并将值发送到 fCl1ToCpu_TestCla1、然后在 C28x 代码中、我们读取计算值。

2PI 分为384个点、因此我们用384个数据绘制图片、我们可以看到有些数据显然是错误的。

我们尝试在读取 sin 值之前在 C28x 代码中添加更多"nop"、但它没有帮助。

如果我们在 CLA 代码中添加更多"nop"、如下所示:

波形变为这样:仍然存在一些误差(红线由 CLA 计算、绿线由 C28x 计算)

我们使用的是 cla0_math_library_fpu32.lib。

可能出了什么问题?

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

    霍华德,我正在研究这个问题,并将在本周结束前报告。  

    此致

    Lori

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

    Howard、

    我对 F28004x 上的 CLA 数学库进行了快速测试(我没有可用的28069)。  我从 C2000Ware 中获取了 CLA sin 示例。  将输入更改为2pi/386点。  将每个点馈送到 CLA 并绘制结果图。  我在图中看不到这个问题。

    问题是否始终位于同一位置?  如果是、他们能否看到此时将什么值馈送到 CLAsin、然后仅检查该值?  单步执行 CLA 代码可能会提供线索。

    这是否是缓冲器的边沿情况?  

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

    问题是否始终位于同一位置?

    是的、如果我们保持代码不变。 如果我们如前面所述添加更多的“nop”,它将是不同的位置。

     如果是、他们能否看到此时将什么值馈送到 CLAsin、然后仅检查该值?  

    我们已经检查了输入角度信号,所有信号都是正确的。

    单步执行 CLA 代码可能会提供线索。

    这是我们可以尝试的最后一步。

    这是否是缓冲器的边沿情况?

    我们如何检查它是否是缓冲区问题?

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

    Howard、

    客户应尝试调试此问题。  我认为这不是 CLA 函数本身的问题、但可能是围绕它的代码中的某个内容或系统中的交互。  

    由于对于一个指定代码段来说、它始终是同一个位置、所以客户可以在处理该值之前设置一个观察点来暂停处理器(即使用之前的值)、然后单步执行代码以查看发生了什么错误。   这也是检查它是否是一个缓冲区问题的方法-当我这么说时、我的意思可能是一个循环缓冲区一个值短、因此以一个奇怪的值为例、绘制了一个图形。   

    此致

    Lori

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

    Lori、

    使用完全相同的代码、如果我们不进行单步调试并运行代码、我们将得到以下波形:错误发生在285号-290号(384个点中)

    如果我们执行单步调试、则会在10-12点出现错误。

    目前、我们以10点开始执行步骤:

    反汇编如下:

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

    您好 Howard、

    这似乎很奇怪。  问题似乎与时序相关、因为使用 NOP 移动代码会更改、但不会修复行为。   

    当问题显示为单步执行时、您是否能够判断计算中出现了什么问题?  

    我建议尝试通过简化系统的工作来缩小问题范围。  这将有助于查看它是否真的是 CLA 问题或系统中的其他问题。   系统中还有什么其他变化?  C28x 是否正在等待来自 CLA 的中断? 还是轮询值?  在我的简单测试用例中、C28x 只是等待 RUN 位清零、然后读取该值。   

    为了安全起见、请检查他们是否使用最新的 CLA 数学库和编译器工具。

    -洛里

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

    Lori、

    我们能否在反汇编代码中看到任何错误、  

    我找不到"MCCNDD"和"UNCF"的含义。

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

    [引用用户="Howard Zou"]我找不到"MCCNDD"和"UNCF"的含义。

    CLA 指令集记录在器件 TRM 中。  

    • MCCNDD 是呼叫条件延迟和
    • UNCf 是指无条件的标志修改

    [引用用户="Howard Zou"]我们是否能在反汇编代码 中看到任何错误,[/引用]

    我没有发现任何问题、但是使用最新的编译器工具将有助于确保这是正确的。  编译器将检查流水线冲突。  

    此致

    Lori