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.

[参考译文] RM46L852:如何使用 IF2CMD 位域(CAN)

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1208888/rm46l852-how-to-use-the-if2cmd-bitfield-can

器件型号:RM46L852
主题中讨论的其他器件:HALCOGENTMS570LC4357

我在尝试了解  IF2CMD 寄存器;更确切地说是 消息编号 来实现。

我不知道在哪里找到如何解码文档中此字段中的值。

例如、为了初始化一个消息框、HalCoGen 使用:  

canREG2->IF2CMD  = (uint8) 0xF8U;

为了更新 ID、HalCoGen 使用  

node->IF2CMD = 0xA0U;

这些位的完整描述是什么?
如何配置 If2CMD 寄存器来修改 IF2ARB 位以启用 ISR?

此致、
加布里埃尔

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

    尊敬的 Gabriel:

    已开始处理您的问题、很快将提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    尊敬的 Gabriel:

    我将概述 CAN 消息接收的传输和 CMD 寄存器用途、您可以通过 TRM 了解更多详细信息。

    CAN 中的报文 RAM 由报文对象组成、在使 CAN 开始运行前需要对这些报文对象进行配置。

    例如、您可以看到下面的图片。

    CAN1的报文对象1和2分别通过相应的 CAN ID 进行发送和接收配置。

    同样、 CAN2的报文对象1和2通过相应的 CAN ID 分别配置为发送和接收。

    上述配置表示123 ID 消息将从 CAN1消息 RAM 的消息对象1发送、并传输到 CAN2消息 RAM 的消息对象2。

    同样、456 ID 消息将从 CAN2消息 RAM 的消息对象1发送并被发送到 CAN1消息 RAM 的消息对象2。

    接口寄存器组控制 CPU 对报文 RAM 的读写访问。 有三个接口寄存器 IF1、IF2和 IF3。 这意味着 CPU 不能直接访问消息 RAM 的消息对象、而是通过 IF 寄存器进行访问。 例如、如果 CPU 希望从 CAN1发送123条 ID 消息、则该消息将写入 IF 寄存器、然后从 IF 寄存器写入该消息将被移至 CAN1消息 RAM 的消息对象1。 同样、如果 CPU 想要读取 CAN1消息 RAM 的消息对象2中出现的消息、则它将要求先将消息 RAM 移动到 IF 寄存器、然后从 IF 寄存器中读取该消息将移动到应用缓冲区。

    此处、进出报文 RAM 与 IF 寄存器的数据传输由 CMD 寄存器中的报文编号发起。

    现在、请记住上述信息并  在 can.c 中验证 canTransmit 和 canGetData 函数的代码、这样您就能更好地理解它。

    另请参阅第27.2.3、27.2.4、27.2.5、27.4.2.2、27.5和27.6节以便更好地理解。

    --

    谢谢。此致、
    Jagadish。

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

    尊敬的 Jagasish:

    感谢您的回答。


    我了解 IF2和 IF1在 CAN 配置中的作用。
    我不明白 CMD 背后的含义。
    您能告诉我在文档中的什么位置 看到"消息编号"定义吗?

    例如, node->IF2CMD = 0xA0U; 意味着什么?

    另请参阅第27.2.3、27.2.4、27.2.5、27.4.2.2、27.5和27.6节以便更好地理解。

    [/报价]

    我不明白您为什么在讨论 CAN 时参考我的 SPI 文档。


    您是否在谈论 技术参考手册 SPNU514C?  

    感谢你的帮助。

    此致、
    加布里埃尔

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

    尊敬的 Gabriel:

    TRM 中显示的 IF1/IF2命令寄存器进一步分为4个部分(保留、CMD、STAT 和 NO)、如下所示

    例如,什么 node->IF2CMD = 0xA0U 意思?

    因此、如果我们写入 IF2CMD 意味着我们将写入命令寄存器的16到23位。 我们将通过写入0xA0来设置第23位和第21位。

    WR_RD=1表示选择写入操作、即 传输方向是从 IF1/IF2寄存器组到由报文编号(位[7:0])寻址的报文对象。

    ARB =1和写入方向意味着: 仲裁位(标识符+ Dir + Xtd + MsgVal)将从 IF1/IF2寄存器组传输到由报文编号(位[7:0])寻址的报文对象。

    您是不是在谈论 技术参考手册 SPNU514C?  [/报价]

    抱歉、我的缺点不是 RM46 TRM、我指的部分来自 TMS570LC4357 TRM。

    --

    谢谢。此致、
    Jagadish。

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

    好的、我想我明白了。


    与其他结构成员(如node->ESnode->ARB)相反,  node->IF2CMD 实际上并不代表 IF2CMD registerIt.
    仅代表它的一部分:[16:23]

    这就是为什么 node->IF2CMD = 0xA0U做会产生等效的做(0xA0 << 16)的原因。

    如果是正确的、我将关闭此问题。

    非常感谢您的帮助、Jagadish。


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

    尊敬的 Gabriel:

    它仅代表其中的一部分:[16:23]

    你是对的。

    这就是为什么这样做 node->IF2CMD = 0xA0U会产生等同于做的效果(0xA0 << 16 )。

    是的。

    --

    谢谢。此致、
    Jagadish。

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

    好的。 再次感谢您的帮助。