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.

[参考译文] MSPM0L1306:如何使用强制输出功能(18.2.5.3)?

Guru**** 2422790 points
Other Parts Discussed in Thread: MSPM0G3507

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1325805/mspm0l1306-how-to-use-the-function-of-forced-output-18-2-5-3

器件型号:MSPM0L1306
主题中讨论的其他器件:MSPM0G3507

我将 TIMG4/PWM 通道0/初始值设置为高电平、我希望在 PWM 输出完成后、PWM 输出保持低电平。

我尝试使强制输出启用、但很遗憾、在系统配置中找不到此功能。

我尝试 直接设置 TIMG4的寄存器、但找不到正确的寄存器名称。

TIMG4_CCACT_01[0]或 TIMG4_CCACT_01都是错误的。

您能否告诉我如何知道 MSPM0 L 系列 技术参考手册中的正确寄存器名称? (问题1)

我刚刚从以下部分找到了有关 CCACT 寄存器的信息、但我不知道如何对应特定的 TIMx。

例如、如果我们要使用 TIMG4的这两个寄存器、 它们的正确名称是什么?  (问题2)

我使用以下两行代码来实现所需的功能、 这是推荐的方法吗?   (问题3)

            DL_TimerG_stopCounter(PWM_1_INST);
            DL_TimerG_setCaptureCompareOutCtl(PWM_1_INST, DL_TIMER_CC_OCTL_INIT_VAL_LOW,
            DL_TIMER_CC_OCTL_INV_OUT_DISABLED, DL_TIMER_CC_OCTL_SRC_FUNCVAL,
            DL_TIMERG_CAPTURE_COMPARE_0_INDEX);

非常感谢。

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

    您好、 Kelly、

    我希望 PWM 输出完成后,PWM 输出保持低电平。[/quot]

    PWM_0_INST 的零或 加载中断中的停止计数器、取决于低电平或高电平。

    DL_TimerG_stopCounter(PWM_0_INST);

    您能否让我知道如何从 MSPM0 L 系列 技术参考手册中知道正确的寄存器名称? (问题1)
    例如、如果我们要使用这两个 TIMG4寄存器、 他们的正确姓名是什么?  (问题2)

    这些问题是相同的、以下是从 TRM 到 IDE 查找正确寄存器的步骤、例如 CCS:

    示例代码: timx_timer_mode_pwm_edge_sleep_lp_MSPM0G3507_nortos_ticlang

    1. PWM_0_INST 为 TIMG0、 TIMG0为 GPTIME_Regs 类型。

    typedef struct {
           uint32_t RESERVED0[256];
      __IO uint32_t FSUB_0;                            /* !< (@ 0x00000400) Subsciber Port 0 */
      __IO uint32_t FSUB_1;                            /* !< (@ 0x00000404) Subscriber Port 1 */
           uint32_t RESERVED1[15];
      __IO uint32_t FPUB_0;                            /* !< (@ 0x00000444) Publisher Port 0 */
      __IO uint32_t FPUB_1;                            /* !< (@ 0x00000448) Publisher Port 1 */
           uint32_t RESERVED2[237];
      GPTIMER_GPRCM_Regs  GPRCM;                             /* !< (@ 0x00000800) */
           uint32_t RESERVED3[506];
      __IO uint32_t CLKDIV;                            /* !< (@ 0x00001000) Clock Divider */
           uint32_t RESERVED4;
      __IO uint32_t CLKSEL;                            /* !< (@ 0x00001008) Clock Select for Ultra Low Power peripherals */
           uint32_t RESERVED5[3];
      __IO uint32_t PDBGCTL;                           /* !< (@ 0x00001018) Peripheral Debug Control */
           uint32_t RESERVED6;
      GPTIMER_CPU_INT_Regs  CPU_INT;                           /* !< (@ 0x00001020) */
           uint32_t RESERVED7;
      GPTIMER_GEN_EVENT0_Regs  GEN_EVENT0;                        /* !< (@ 0x00001050) */
           uint32_t RESERVED8;
      GPTIMER_GEN_EVENT1_Regs  GEN_EVENT1;                        /* !< (@ 0x00001080) */
           uint32_t RESERVED9[13];
      __IO uint32_t EVT_MODE;                          /* !< (@ 0x000010E0) Event Mode */
           uint32_t RESERVED10[6];
      __I  uint32_t DESC;                              /* !< (@ 0x000010FC) Module Description */
      GPTIMER_COMMONREGS_Regs  COMMONREGS;                        /* !< (@ 0x00001100) */
           uint32_t RESERVED11[438];
      GPTIMER_COUNTERREGS_Regs  COUNTERREGS;                       /* !< (@ 0x00001800) */
    } GPTIMER_Regs;

    2.在 GPTIME_Regs 的结构中、如果要查找 CCACT_01 (TRM)、应该位于:

    GPTIMER_COUNTERREGS_Regs  COUNTERREGS;                       /* !< (@ 0x00001800) */

    3. COUNTERREGS 是 GPTIME_COUNTERREGS_Regs 类型,定义为:

    typedef struct {
      __IO uint32_t CTR;                               /* !< (@ 0x00001800) Counter Register */
      __IO uint32_t CTRCTL;                            /* !< (@ 0x00001804) Counter Control Register */
      __IO uint32_t LOAD;                              /* !< (@ 0x00001808) Load Register */
           uint32_t RESERVED0;
      __IO uint32_t CC_01[2];                          /* !< (@ 0x00001810) Capture or Compare Register 0/1 */
      __IO uint32_t CC_23[2];                          /* !< (@ 0x00001818) Capture or Compare Register 2/3 */
      __IO uint32_t CC_45[2];                          /* !< (@ 0x00001820) The CC_45 register are a registers which can be
                                                          used as compare to the current CTR to create an events CC4U, CC4D,
                                                          CC5U and CC5D. */
           uint32_t RESERVED1[2];
      __IO uint32_t CCCTL_01[2];                       /* !< (@ 0x00001830) Capture or Compare Control Registers 0/1 */
      __IO uint32_t CCCTL_23[2];                       /* !< (@ 0x00001838) Capture or Compare Control Registers 2/3 */
      __IO uint32_t CCCTL_45[2];                       /* !< (@ 0x00001840) Capture or Compare Control Registers 4/5 */
           uint32_t RESERVED2[2];
      __IO uint32_t OCTL_01[2];                        /* !< (@ 0x00001850) CCP Output Control Registers 0/1 */
      __IO uint32_t OCTL_23[2];                        /* !< (@ 0x00001858) CCP Output Control Registers 2/3 */
           uint32_t RESERVED3[4];
      __IO uint32_t CCACT_01[2];                       /* !< (@ 0x00001870) Capture or Compare Action Registers 0/1 */
      __IO uint32_t CCACT_23[2];                       /* !< (@ 0x00001878) Capture or Compare Action Registers 2/3 */
      __IO uint32_t IFCTL_01[2];                       /* !< (@ 0x00001880) Input Filter Control Register 0/1 */
      __IO uint32_t IFCTL_23[2];                       /* !< (@ 0x00001888) Input Filter Control Register 2/3 */
           uint32_t RESERVED4[4];
      __IO uint32_t PL;                                /* !< (@ 0x000018A0) Phase Load Register */
      __IO uint32_t DBCTL;                             /* !< (@ 0x000018A4) Dead Band insertion control register */
           uint32_t RESERVED5[2];
      __IO uint32_t TSEL;                              /* !< (@ 0x000018B0) Trigger Select Register */
      __I  uint32_t RC;                                /* !< (@ 0x000018B4) Repeat counter Register */
      __IO uint32_t RCLD;                              /* !< (@ 0x000018B8) Repeat counter load Register */
      __I  uint32_t QDIR;                              /* !< (@ 0x000018BC) QEI Count Direction Register */
           uint32_t RESERVED6[4];
      __IO uint32_t FCTL;                              /* !< (@ 0x000018D0) Fault Control Register */
      __IO uint32_t FIFCTL;                            /* !< (@ 0x000018D4) Fault input Filter control register */
    } GPTIMER_COUNTERREGS_Regs;

    4.您可以 在 GPTIME_COUNTERREGS_Regs 的结构中找到 CCACT_01 。

    ----------------

    查找寄存器的一种更简单的方法:进入调试模式并使用"Register"窗口、可以在软件上更详细地显示层次结构:

    此致、

    赫利克

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

    您好、 

    非常感谢您的支持。

    我曾尝试使用"TIMG4_CCACT_01"、似乎无效。

    非常感谢。

    Br

    凯利

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

    我在这里没有我所有的材料、但我很确定它看起来会是这样的:

    > TIMG4->COUNTERREGS.CCACT_01[0]|= GPTIME_CCACT_01_SWFRCACT_CCP_LOW;//强制 cC0为低电平

    如果看起来类似、也可以使用 Driverlib 执行此操作、如下所示:

    > DL_Timer_overrideCCPOut (TIMG4、DL_TIMER_FORCE_OUT_LOW 、DL_TIMER_FORCE_Cmpl_OUT_DISABLED、0);//强制 CC0为低电平(但不是 CC0N)

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

    Bruce、您好!

     非常感谢。

    它的确有效。

    Br

    凯利