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.
工具与软件:
MATHACL ATAN2的设置包括一个 NUMITER 值、用于说明需要多少次迭代。 但是、在参考手册的第5.4.2节中、它只说明了需要写入 CTL、OP1和 OP2、然后从 RES1读取结果。 这是 MathIQ 源文件中实现的过程。 在读取 RES1之前、是否无需等待迭代完成? 参考手册描述了 NUMITER 需要更长的时间才能计算出较高的值、但并未说明如何在示例中实现该值、并且指出没有状态位(大概包括 BUSY 位)。
您好、Alan:
我现在正在查看我们的文档、特别是 MSPM0 G 系列 TRM、位于第5.4.2节、我看到该函数的说明包括 CTL。 NUMITER 字段用于计算反正切的迭代次数。
在同一文档的表5-5中、我还看到了 CTL。 NUMITER 用于指示该操作的迭代次数。 我们在这里看到的是同一个文档、还是我遗漏了什么?
看看 SDK 中的 MATHACL 示例、可以 看到我们没有演示 ATAN2函数、但我们演示了其他 TRIG 函数、并包括一个等待状态的函数。 需清除的 BUSY 位。 ATAN2运算应以类似的方式执行。
迪伦
对不起,我解释自己很差。
TRM 5.4.2结尾的文本如下:
没有提到在步骤3和步骤4之间可能需要等待的情况。
当我提到一个例子时,我应该更清楚-我正在查看 mathIQ 库的源代码,特别是函数_IQNatan2 (),其中执行了以下行:
再次重申、我假设配置操作数和读取结果之间需要等待。
(现在我再次看看、我看到触发操作数在 TRM 中列为 OP2、但在上面第286行的注释中列为 OP1。 您能解释一下吗?)
鉴于 TRM 配置部分或 mathIQ 代码中没有提到等待、NUMITER 对时序有何影响、我如何确保等待足够长?
啊、我明白你的意思了。
我将寻找一些内部文档、看看这是否只是 TRM 和 mathIQ 库中的一个空白部分。 从逻辑上讲、如果函数需要更多的迭代、那么应该需要更长的时间。
我应该能够在明天一天结束之前找到更多有关这方面的信息、因此请期待收到回复。
迪伦
感谢您的参与。 仅在 TRM 的以下文本中提到了使用 Busy to Wait:
然而、这与 mathIQ 库并不一致、也不能真正指示应如何使用 RES1/RES2来检查结果(除非您只应检查寄存器是否发生更改、这似乎有点模糊)。
该片段也与 mathIQ 库中的触发顺序相矛盾,所以,如果你能够对它进行评论,那将会很有帮助。
您好、Alan:
很抱歉这里的响应延迟了。 我在我们的内部文档中找到了更清晰的信息。
因此、MATHACL 外设的确切行为是、当您尝试在结果准备就绪之前读取结果寄存器时、数据总线将停止、直到准备就绪。 那么应该发生的情况是、在操作完成之前、您只能在函数中读取寄存器。 实际上、这会导致器件等待直到结果准备就绪、而代码未明确表示这样做。 这也意味着源代码正在等待正确的数据可用、即使源代码似乎没有这样做。
对我来说、这是一个文档问题、我将在 TRM 中提交一个 TT 来更好地解释这一点、因为我可以公开发现的任何地方都没有解释这种行为、当然、我们的许多客户也会想知道如何从数学加速器获得正确的结果。
如果您有更多未解决的问题、或者我是否可以帮助您解决任何其他问题、请告诉我。
迪伦
我刚刚意识到、仍然存在编写操作数的顺序的问题。 TRM 指出 OP2是启动计算的触发器、但 mathIQ 库代码(和注释)将 OP1称为触发器。 您能解释一下吗?
很抱歉、我第一次错过了那个。
检查我们的器件规格后、看起来 OP1似乎被列为触发器、如 MathIQ 库代码中所示。
这是我要列出的另一个待更新的 TRM 错误。 感谢您指出这一点、如果您还有其他问题、敬请告知。