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.

[参考译文] TMS320F28P650DK:改善锁步并使用 LCM

Guru**** 2798555 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1603832/tms320f28p650dk-implmenting-lockstep-and-using-lcm

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

所以我试图学习锁步比较模块并在 LAUNCHXL - F28P65X 板上实施它。但我不能为此获得任何资源或预期值。

如果有任何文档或资源、请提供帮助

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

    您好、

    您是否尝试过以下文件夹中的示例:

    {C2000Ware_directory}\libraries\diagnostic\f28p65x\examples\test_application

    它演示了如何使用 STL_LCM 函数。

    此处提供了有关此示例的一些文档:

    https://dev.ti.com/tirex/content/C2000Ware_5_00_00_00/libraries/diagnostic/f280015x/docs/html/sta/index.html

    谢谢

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

    嗨、Prartan、

    我浏览了您提供的文档、但它只提供了自检说明。我想理解的是、由于我们只能在 CPU2 中实现锁步、并且冗余内核具有 DMA2、那么 DMA 如何以 2 个周期的延迟执行相同的指令。 我想更深入地了解它的作用。 是否有任何关于如何实现锁步的相关文档?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想了解一下、因为我们只能在 CPU2 中实现锁步、冗余内核的是 DMA2、那么 DMA 如何以 2 个周期的延迟执行相同的指令。

    我认为这里有一些误解。

    CPU2 与影子 CPU2 处于锁步状态、CPU2 与 DMA2 不处于锁步状态。 DMA2 有自己的影子 DMA、它使用该影子 DMA 锁定步进。

    我强烈建议您从参考手册“锁步“一章开始、阅读一些与此类似的 E2E 主题 —   https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1389812/tms320f28p650dh-what-is-included-in-cpu2-ie-primary-module-and-shadow-cpu-of-cpu2-used-for-lockstep  

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

    嗨、

    因此、我阅读了技术手册、只是为了澄清我的理解以演示锁步工作、我需要在任何 driverlib 工程中添加 LCM.c 和 LCM.h、我可以使用 GPIO 输入按钮使用比较器误差强制测试 、该按钮 会设置 LCM_CONTROL.CMPx_ERR_FORCE 位、进而触发 NMI 并写入我自己的 ISR、并读取 LCM_STATUS 以确定由于 CMPx_FORCE_ERR 位而触发。

    这是正确的吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“618941" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1603832/tms320f28p650dk-implmenting-lockstep-and-using-lcm/6195794 ]我可以使用使用 GPIO 输入按钮执行比较器错误强制测试

    不确定您的意思- “使用 GPIO 输入按钮“?  

    是的、您可以使用 LCM.c 和 LCM.h driverlib API 来运行测试。

    LCM 测试的演示是 c2000Ware 自检应用程序的一部分、我之前已经指出过、您是否尝试过这些测试? - {C2000Ware_directory}\libraries\diagnostic\f28p65x\examples\test_application

    [引述 userid=“559325" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1603832/tms320f28p650dk-implmenting-lockstep-and-using-lcm/6180372

    您是否尝试过以下文件夹中的示例:

    {C2000Ware_directory}\libraries\diagnostic\f28p65x\examples\test_application

    它演示了如何使用 STL_LCM 函数。

    [/报价]

    谢谢

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

    是的、我阅读了该示例、但在该示例中、即使在添加后、我也无法生成 NMI

    INTERRUPT_REGISTER (INT_NMInmiISR);

    我去尝试了“Comparator Error Force Test“、如果通过该测试、会触发 NMI 错误?

    因此、如文档中所述、我锁定了 LSEN 配置->然后在中启用了比较器 CPU2 代码 。 所有基本函数都被正确调用。

      EALLOW;
      HWREG (CPUSYS_BASE + SYSCTL_O_CPUSYSLOCK2)|= SYSCTL_CPUSYSLOCK2_LSEN;
      EDIS;
      LCM_enableLockstepCompare (LCM_CPU2_BASE);
    清除这些标志 、然后将其称为比较器错误强制测试功能
    LCM_runComp1ErrorForceTest (LCM_CPU2_BASE);
    (这是在没有调试器的情况下完成的,我已输入中断向量表)  

      对于 (I = 3U;I < 224U;I++)
      {
        HWREG (PIEVECTTABLE_BASE +(2U * I))=
          (uint32_t) Interrupt_DefaultHandler;
      }

      //
      // NMI 和 ITRAP 获取自己的处理程序。
      //
      HWREG (PIEVECTTABLE_BASE +((INT_NMI >> 16U)* 2U))=
        (uint32_t) Interrupt_nmiHandler;
      HWREG (PIEVECTTABLE_BASE +((INT_INQUIRED >> 16U)* 2U))=
        (uint32_t) Interrupt_illegalOperationHandler;

      EDIS;
    }
    这应该触发 NMI 权限?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“618941" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1603832/tms320f28p650dk-implmenting-lockstep-and-using-lcm/6198047

    我去尝试了“Comparator Error Force Test“、如果通过该测试、会触发 NMI 错误?

    [/报价]

    是的、如果未连接调试器、您应该会看到 NMI 被触发。

    自检应用程序还具有比较错误强制测试检查功能 附加 要进行自检、请检查自检应用程序。

    谢谢

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

    你好、

    因此、读取自检应用程序并参考它使用了文件 sta_main.c 和 sta_testd 签署了以下行:

     //已启用 LCM
     HWREG (CPUSYS_BASE + SYSCTL_O_CPUSYSLOCK2)|= SYSCTL_CPUSYSLOCK2_LSEN;
    //已启用比较
    HWREG (LCM_CPU2_BASE + LCM_O_CONTROL)|= LCM_CONTROL_CMPEN;
    //已清除 gflag
    HWREG (sysstat_base + SYSCTL_O_LCM_ERR_FLG_CLR)=
    SYSCTL_LCM_ERR_FLG_CLR_GERR | SYSCTL_LCM_ERR_FLG_CLR_CPU;

      EALLOW;
      HWREG (LCM_CPU2_BASE + LCM_O_CONTROL)|= LCM_CONTROL_CMP1_ERR_FORCE;
      EDIS;
     仍然没有触发 NMI
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、

    因此、读取自检应用程序并参考它使用了文件 sta_main.c 和 sta_testd 签署了以下行:

      DINT;
      interrupt_initModule()
      Interrupt_initVectorTable()
      //在启用 NMI 之前清除所有 NMI 标志
      
      EALLOW;
      HWREGH (NMI_BASE + NMI_O_FLGCLR)= 0xFFFF
      HWREGH (NMI_BASE + NMI_O_CFG)|= NMI_CFG_NMIE;
      EDIS;

      //
      //初始化矢量表和寄存器 NMI 处理程序
      //
      INTERRUPT_REGISTER (INT_NMI、&nmiISR);

      //
      //启用中断
      //
      EINT;
      ERTM;
     
    //已启用 LCM
     HWREG (CPUSYS_BASE + SYSCTL_O_CPUSYSLOCK2)|= SYSCTL_CPUSYSLOCK2_LSEN;
    //已启用比较
    HWREG (LCM_CPU2_BASE + LCM_O_CONTROL)|= LCM_CONTROL_CMPEN;
    //已清除 gflag
    HWREG (sysstat_base + SYSCTL_O_LCM_ERR_FLG_CLR)=
    SYSCTL_LCM_ERR_FLG_CLR_GERR | SYSCTL_LCM_ERR_FLG_CLR_CPU;

      EALLOW;
      HWREG (LCM_CPU2_BASE + LCM_O_CONTROL)|= LCM_CONTROL_CMP1_ERR_FORCE;
      EDIS;
     仍然没有触发 NMI。