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.

[参考译文] TMS320F28379D:关于 CAN 模块的 IF3寄存器集

Guru**** 2610975 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020162/tms320f28379d-about-the-if3-register-set-of-can-module

器件型号:TMS320F28379D

您好!

1、如何使用 IF3寄存器集?

2 μ s 当我、IF1寄存器集从报文对象中设置一些值时、我设置 CAN_IF3OBS 寄存器和 CAN_IF3UPD 寄存器。

    但我看不到来自 CCS "寄存器"中 IF3寄存器集的任何值。

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="488408" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020162/tms320f28379d-about-the-if3-register-set-of-can-module ]1、如何使用 IF3寄存器集?

    IF3的功能与 IF1/IF2相似、但它只能用于接收、并且一旦配置、IF3寄存器集的更新在接收数据时自动进行。 有关更多详细信息、请参阅 TRM。

    [引用 userid="488408" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020162/tms320f28379d-about-the-if3-register-set-of-can-module ]2、当我通过 IF1寄存器集从报文对象设置某个值时,[/引用]

    我不明白为什么你需要让 IF1参与进来。

    [引用 userid="488408" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020162/tms320f28379d-about-the-if3-register-set-of-can-module "]然后我设置 CAN_IF3OBS 寄存器和 CAN_IF3UPD 寄存器。

    您是指配置 IF3OBS 和 IF3UPD 寄存器。  

    [引用 userid="488408" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020162/tms320f28379d-about-the-if3-register-set-of-can-module "]但我无法从 CCS "寄存器"中的 IF3寄存器集中看到任何值。[/quot]

    我很难说出原因。 确保您期望看到的帧实际上已在总线上传输。 检查您是否能够使用 IF1或 IF2读取帧。 更新到 CCS 的最新版本。 较旧版本在正确显示某些寄存器时会出现一些问题。

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

    您好!

    [引用 userid="10172" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020162/tms320f28379d-about-the-if3-register-set-of-can-module/3770756 #3770756"]
    2 μ s 当我、 IF1寄存器置位报文对象的某个值时、

    我不明白为什么你需要让 IF1参与进来。

    [/报价]

    也就是说、我将首先从 IF1寄存器组中配置消息对象。 然后、我可以观察 IF3寄存器组中的消息对象。 这就是我应该配置 CAN_IF3OBS 寄存器和 CAN_IF3UPD 寄存器的原因。  我想确认这种方法是否正确。

    谢谢!

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

    您好!

      我的测试程序是:

     //////////////////////////////// IFX 寄存器测试////////////////////////////////////////////////////////
       uint32 IF1_RDATA=0、IF2_RDATA=0、IF3_RDATA=0;
       uint32 IF4_RDATA=0、IF5_RDATA=0、IF6_RDATA=0;

       HWREGH (CANA_base + CAN_O_IF1CMD + 2) = 0x930000 >> 16;
       HWREGH (CANA_BASE + CAN_O_IF1DATA)    = 0x13579BDE;
       HWREGH (CANA_BASE + CAN_O_IF1DATA + 2)= 0x13579BDE >> 16;
       HWREGH (CANA_base + CAN_O_IF1DATB)    = 0x5A6B7C8D;
       HWREGH (CANA_base + CAN_O_IF1DATB + 2)= 0x5A6B7C8D >> 16;
       HWREGH (CANA_base + CAN_O_IF1MCTL)    = 0xE88;
       HWREGH (CANA_base + CAN_O_IF1CMD)     = 0x1;

       while (HWREGH (CANA_base + CAN_O_IF1CMD)& CAN_IF1CMD_BUSY)
       {
       }
       HWREGH (CANA_base + CAN_O_IF3OBS)    = 0x1F;
       HWREGH (CANA_base + CAN_O_IF3UPD)    = 0xFFFFFFFF;
       HWREGH (CANA_base + CAN_O_IF3UPD + 2)= 0xFFFFFFFF >> 16;
       while (HWREGH (CANA_base + CAN_O_IF3OBS)& CAN_IF3OBS_IF3SC)
       {
       }
       while (HWREGH (CANA_base + CAN_O_IF3OBS)& CAN_IF3OBS_IF3SDA)
       {
       }
       while (HWREGH (CANA_base + CAN_O_IF3OBS)& CAN_IF3OBS_IF3SDB)
       {
       }
       IF1_RDATA = HWREGB (CANA_base + CAN_O_IF3DATA);//使用 HWREGB
       IF2_RDATA = HWREGB (CANA_base + CAN_O_IF3MCTL);
       IF3_RDATA = HWREGB (CANA_base + CAN_O_IF3DATB);
       IF4_RDATA = HWREGH (CANA_base + CAN_O_IF3DATA);//使用 HWREGH
       IF5_RDATA = HWREGH (CANA_base + CAN_O_IF3MCTL);
       IF6_RDATA = HWREGH (CANA_base + CAN_O_IF3DATB);      

    ////////////////////////////////////////////////////////////////////// 测试完成////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

       结果如下所示。

     出什么问题了吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="488408" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020162/tms320f28379d-about-the-if3-register-set-of-can-module/3771197 #3771197"]I 应首先从 IF1寄存器集配置消息对象。 然后、我可以观察 IF3寄存器组中的消息对象。 这就是我应该配置 CAN_IF3OBS 寄存器和 CAN_IF3UPD 寄存器的原因。  我想确认此方法是否正确。

    是的、您需要先使用 IF1/IF2来配置报文对象。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    • 为什么不写入消息对象1的 ARB 区域(MSGID)? 该报文对象中将如何接收报文?  
    • 您只配置报文对象1、但 IF3UPD = 0xFFFFFFFF。 没有什么问题、但我想知道您是否也希望在其他邮箱中使用数据。  
    • 要访问寄存器的低16位或高16位、请使用 HWREGH。 例如、  

    HWREGH (ui32Base + CAN_O_IF1ARB)= 0;    //降低16位

    HWREGH (ui32Base + CAN_O_IF1ARB + 2)= 0;//高16位

    在处理 CAN 等字节外设时、必须添加2来访问高16位。

    • 对于所有32位访问、请使用 HWREG_BP。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

      以上程序段仅用于测试。 这就是为什么"为什么不写入消息对象1的 ARB 区域(MSGID)?" 和"您只配置报文对象1、但 IF3UPD = 0xFFFFFFFF。"   我只想测试如何从 IF3获取消息。

     我已向您确认该计划部分是正确的。 但我不知道为什么我无法从 IF3获取消息。

       谢谢!

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

    程序段正确。 您尚未使用 ARB 字段配置消息对象。 如果没有 MSGID、您将如何接收帧? 您首先需要确认所需的数据是在第一个位置收到的、然后再通过 IF3寄存器进行读取。

    以下是我的第一次答复:

     确保您期望看到的帧实际上已在总线上传输。 检查您是否能够使用 IF1或 IF2读取帧。

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

    您好!

      我需要再次与您确认。  当我需要使用 IF3寄存器集时、我是否必须确保能够实际接收到消息?   不是只通过 IF1/IF2寄存器组向报文对象写入报文?

      谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="488408" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020162/tms320f28379d-about-the-if3-register-set-of-can-module/3774265 #3774265">当我需要使用 IF3寄存器集时、是否必须确保能够实际接收消息?  [/报价]

    是的。