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.

[参考译文] F29H850TU:适用于 CPU3 的 F29H85x PWM 和 GPIO 配置

Guru**** 2796425 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1620237/f29h850tu-f29h85x-pwm-and-gpio-configuration-for-cpu3

器件型号: F29H850TU
主题: SysConfig 中讨论的其他器件

您好:

我们将使用双核 C2000 芯片(具有 CPU1 和 CPU3)。 使用配置 PWM 和 GPIO 时、我们在 CPU3 上无法正常工作c29x3.syscfg。 相同的设置在 CPU1 上都可以正常工作。 我们认为我们缺少一些基本的东西。  

哪些功能不起作用:

CPU3 上的 PWM 输出:

  • 目标: 从分配给 CPU3 并配置为的 ePWM 模块(如 EPWM4、EPWM5、EPWM6)获取 PWM 信号c29x3.syscfg
  • 我们做了什么: 我们EPWMxRegs.TBCTLEPWMxRegs.CMPAEPWMxRegs.AQCTLA使用 sysconfig 或直接寄存器写入正确设置 CPU3 的所有 EPWM 寄存器(如,,)。 当我们进行调试时、PWM 计数器 (TBCTR) 运行良好。
  • 问题: 引脚上没有发出 PWM 信号。 引脚要么卡在高电平/低电平、要么完全无效。
  • 在 CPU1 上运行: 如果我们c29x1.syscfg对 CPU1 使用中完全相同的设置、则 PWM 信号从引脚发出而不会出现任何问题。 这告诉我们 PWM 设置本身是正确的、但当 CPU3 尝试控制它时出现了错误。

2. CPU3 上的 GPIO 控制:

  • 目标: 通过 CPU3 控制特定 GPIO 引脚(例如打开/关闭 LED)。
  • 我们做了什么: 我们知道 GPIO 通常由 CPU1 在双核 C2000 上设置,所以我们使用c29x1.syscfg. 我们选择了 GPIO 引脚、并将“Core Select“设置为“CPU3"。“。 然后,在我们的 CPU3 代码中,我们尝试用更改引脚状态GPIO_writePin()
  • 问题: GPIO 引脚不会更改状态或响应 CPU3 的命令。
  • 在 CPU1 上运行: 如果我们将“Core Select“设置为“CPU1"c29x1.syscfg,“,则、则 CPU1 可以完全控制 GPIO 引脚。 这意味着我们的 GPIO 设置是可以的、但即使已分配 GPIO、CPU3 也无法控制 GPIO。
  • 此外、我们不能使用 CPU3 CORE main.c 中的 GPIO_writePin 等内置函数 由于是“unstated identifier“、编译器弹出错误



    在 CPU1 main.c 中如下所示:

    内部 main (void)
    {  
      设备初始化 ();
      BOARD_INIT ();


      SSU_configBootAddress (SSU_CPU3、CPU3_RESET_VECTOR、SSU_LINK2);
      SSU_configNmiAddress (SSU_CPU3、CPU3_NMI_VECTOR、SSU_LINK2);
      SSU_controlCPUReset (SSU_CPU3、SSU_CORE_RESET_DEACTIVE);
      while (SysCtl_isCPU3Reset ()== 0x1U);
     
      ESTOP0;
      ENINT;
      INTERRUPT_enableGlobal();
      
      IPC_SYNC (IPC_CPU1_L_CPU3_R_CH0、IPC_FLAG31);
      // v_morode_TestSendCommand ();
     
      while (1)
      {
    test1++;
      }
    }

    CPU3 main.c:

    内部 main (void)
      设备初始化 ();
      BOARD_INIT ();

      ENINT;
      INTERRUPT_enableGlobal();

      IPC_SYNC (IPC_CPU3_L_CPU1_R_CH0、IPC_FLAG31);
      // v_morode_TestSendCommand ();
      V_ADC_StartConversions();

      while (1)
      {
        ++test3;
      }
    }

    最后、test1 和 test3 变量不断增加、这意味着两个 CPU 都在通过 IPC 保持功能后进入 while true  
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您能给我发送一个.syscfg 文件吗?您在该文件中尝试将所有权转移到 CPU3。 我想回顾一下 ePWM 和 GPIO 传输内容。  

    此致、
    Aj Favela.  

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

    您好、

    我将分享该部分的屏幕截图。 如果你想要其他的东西,请问?


    这是 CPU1 的 syscfg。
    CPU3 的 syscfg 上没有 GPIO 配置。

    有趣的是、我检查了  led_ex1_blinky_cpu1_cpu3_multi、它在我的工程中具有相同的设置、使用该示例、一切都正常工作。

    唯一的线索是、我使用的是 CPU3 中的内置函数会导致“未声明的标识符“错误。

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

    您好、

    您能否确认在 CPU3 main.c 文件中添加了#include “board.h"?“? 这可能是 GPIO_writePin 被标记为未声明的原因  

    此外、是否可以在 CPU3 main.c 中检查 board_init () 函数以获取 GPIO_setDirectionMode () 函数? 如果它不存在、是否可以在 board_init ();函数之后将它添加到 CPU3 main.c 文件中? 我认为问题可能是,虽然您在 CPU1 中正确配置了 GPIO ,但您没有配置方向模式,因为它只能由控制器内核写入(在本例中为 CPU3)。

    对于 ePWM、您是否可以 向 CPU1 和 CPU3 syscfg 文件添加所需的 EPWM 实例。 在 CPU1 中、无需配置除所需的正确 GPIO 实例之外的任何设置。 在 CPU3 中、请根据需要配置这些 EPWM 实例。 这样、CPU1 将设置正确的引脚多路复用器、而 CPU3 会使用正确的配置覆盖寄存器。

    此致、
    Aj Favela.  

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

    你好,我发现了问题。 system.xml 文件错误。 因此、没有链接 CPU1 和 CPU3。 在我改变后,问题解决了。
    谢谢你。

    顺便说一下、board.h 文件也包含在 CPU3 中。

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

    您好、

    我很高兴您的问题已得到解决! 因此、我现在将结束这一主题。

    此致、
    Aj Favela.