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.

[参考译文] CAN_IF2MSK 寄存器未在 CCS 寄存器窗口中显示正确的 F2838x 值

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

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/990758/can_if2msk-register-not-showing-proper-values-for-f2838x-in-ccs-register-window

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

我正在配置接收邮箱、如下所示 :

  • 消息 ID: 0x00000003
  • 消息 ID 掩码: 0x00000007
  • 消息类型:扩展

对于 F2837xD、寄存器窗口显示 CAN_IF2MSK 寄存器的正确值。 请参阅以下屏幕截图。

但 F2838x、寄存器窗口显示 CAN_IF2MSK 寄存器的正确值。 请参阅以下屏幕截图。

随附的 F2838x 和 F2837xD 图像来自 CCS 10.1。

帖子中建议之后、我也使用 CCS 10.2检查了寄存器值。 但 F2838x CAN_IF2Msk 寄存器的值仍然与图像中所示的值相同。

您能否检查并告知我此行为?

谢谢、

Dhanashree

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

    Dhanashree、您好!

    您能否 通过内联 C 代码确认 CAN_IF2MSK 寄存器的值?  只是想知道这是否也为您提供与寄存器视图显示的值相同的值。

    谢谢、

    Joseph

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

    您好、Joseph、

    您能告诉我如何 通过内联 C 代码确认 CAN_IF2MSK 寄存器的值吗?

    谢谢、

    Dhanashree

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

    Dhanashree、您好!

    您可以指定临时变量和赋值、并仅监视该变量的值(例如- tempvar)

        tempvar = HWREGH (base + CAN_O_IF2MSK);

    这只是为了确认您在寄存器视图中看到的内容与实际变量值一致。

    此致、

    Joseph

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

    您好、Joseph、

    很抱歉耽误你的答复。

    是的、变量也显示相同的值。

    附加表达式和寄存器窗口的屏幕截图。  

     

    谢谢、

    Dhanashree

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

    Dhanashree、您好!

    感谢您运行内联代码。  在每次 CAN 事务之后、所有 CAN 属性和数据都会在消息 RAM 中更新。  您需要将消息 RAM 的内容传输到 IFx 寄存器、然后轮询/检查它们的值。  我猜是消息 RAM 和 IFx 寄存器之间的传输没有发生。  driverlib 中有一个用于管理此传输的函数,称为 CAN_transferMessage()。  请尝试运行此函数、并查看是否可以读取 IF2MSK 寄存器的正确值。

    此致、

    Joseph

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

    您好、Joseph、

    是的,在使用  CAN_transferMessage()之后 ,IF2MSK 寄存器正确更新。
    但以下是我的疑问:

    为什么只有 CAN_IF2MSK 取决于 CAN_transferMessage()和其他 IF2寄存器(CAN_IF2MCTL、CAN_IF2ARB、CAN_IF2DATA、CAN_IF2DATB)正在正常更新而不使用 CAN_transferMessage()?

    谢谢、

    Dhanashree

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

    Dhanashree、您好!

    好的问题、但我猜之前的操作可能不使用 CAN_transferMessage 函数、而是直接写入寄存器 IF2CMD、并且掩码位(位22)尚未设置、因此未更新 IF2MSK 的内容。

    此致、

    Joseph

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

    您好、Joseph、

    关于代码中使用的函数,我只需使用 CAN_setupMessageObject()在初始化函数中设置邮箱,然后 使用 CAN_readMessageWithID()在主函数中连续读取消息。

    下面是设置报文对象后为 CAN_IF1CMD 寄存器附加的屏幕截图。

    问题1如何在两者之间更新这些值?

     

    现在, CAN_transferMessage()在 CAN_readMessageWithID()之前用于从消息 RAM 中读取 IF2MSK 值。

    每当 使用 CAN_transferMessage()时,就会发现 IF2ARB 寄存器值根据接收到的消息而更新,如下图所示。

    但是, 当给定自由运行时,CAN_readMessageWithID()无法读取传递变量中的值以运行。 请参考附加的图像,其中表达式窗口中的数据和 ID 不会根据传递给 CAN_readMessageWithID()的变量进行更新。

    令人惊讶的是,当我们使用  Step into 进入 CAN_readMessageWithID()和 CAN_readMessage()函数时,它会起作用。

     当给定自由运行并且代码中未使用 CAN_transferMessage()时,CAN_readMessageWithID()能够正确读取传递变量中的值以运行。 请参阅随附的图像,其中表达式窗口中的数据和 ID 根据传递给 CAN_readWithMessageID()的变量进行更新。

    问题2: 您能告诉我们这种行为背后的原因吗? 使用 CAN_transferMessage()后是否需要提供延迟?

    谢谢、

    Dhanashree

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

    Dhanashree、您好!

    如果您检查函数 CAN_readMessageWithID、它会调用函数 CAN_readMessage、如果您仔细查看 CAN_readMessage 函数、它基本上会写入 CAN_IF2CMD 寄存 器、但它不会将屏蔽位(位22)置位、因此消息 RAM 中的屏蔽数据不会传输到 CAN_IF2MSK。

    CAN_transferMessage 函数可以灵活地设置所有位- MASK、ARB、CONTROL、CLRINTPND、DATA_A、 和 DATA_B -标记传输到相应的 IFx 寄存器。

    这不是增加延迟的问题。  这两个函数不会向 CAN_IFxCMD 写入相同的信息。  希望这澄清了您观察到的内容。

    此致、

    Joseph

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

    您好、Joseph、

    从上面可以看出 、CAN_readMessage 函 数基本上是写入 CAN_IF2CMD 寄存器、它没有设置屏蔽位、因此消息 RAM 中的屏蔽数据不会传输到 CAN_IF2MSK。

    是否有任何具体原因不在     CAN_readMessage 函数中设置 CAN_IF2CMD 寄存器的 MASK 位?

    我花了很多时间来调试、为什么只有 CAN_IF2MSK 寄存 器不能按照消息 RAM 在 CCS 寄存器窗口中反映正确的值。 将来有人可能会面临类似的问题。  

    您能否考虑在    下一个 C2000Ware 版本的 CAN_readMessage 函数中设置 CAN_IF2CMD 寄存器的 MASK 位、以便 IF2Mask 寄存器在从邮箱读取数据时根据消息 RAM 反映正确的值?

    谢谢、

    Dhanashree

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

    Dhanashree、您好!

    好的地方。  最后、我将与我们的软件团队一起了解调用 CAN_readMessage 函数时、掩码信息是否也可以传输到 IFX 寄存器。

    此致、

    Joseph