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.

[参考译文] MSPM0G3507:无 CPU 中断的同步计时器

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1396196/mspm0g3507-sync-timers-without-cpu-interrupt

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

工具与软件:

你(们)好

我可以为我的用例提供建议吗?

我希望在没有 CPU 中断的情况下同步每个 TIMG 计数器。

因此我想使用通用事件路由(订阅者和发布者端口)作为同步信号。

要设置是否 CC0接收订阅事件、请生成 TIMG 计数器 reset (Load)。

但它不起作用。

我可以提供建议吗?

我要做的是:  

TIMG6 CC1加载事件-->事件路由 ID1 --> TIMG12 CC0输入源(IFCTL[0])--> CC0 比较事件(计数器= 1)--> CC0生成加载事件--> TIMG12计数器复位(加载)

我在 CCS 调试模式下检查了 TIMG6生成加载事件。

(如果连接通用路由、无法设置加载事件标志寄存器、可能我认为接收器清除标志会自动设置)

    // clock divider
    TIMG12->CLKDIV |= GPTIMER_CLKDIV_RATIO_DIV_BY_1; // div = /1, MCLK 80MHz
    // clock source
    TIMG12->CLKSEL |= GPTIMER_CLKSEL_BUSCLK_SEL_ENABLE; // TIMG6 bus clock is MCLK(80MHz). Please see Datasheet
    //clock 2nd prescaler
    TIMG12->COMMONREGS.CPS |= GPTIMER_CPS_PCNT_MASK & 0x00; // prescale /(8bit+1), dividing 1

    // counter register
    TIMG12->COUNTERREGS.CTRCTL = 0x00000000; // reset
    TIMG12->COUNTERREGS.CTRCTL |= GPTIMER_CTRCTL_CVAE_ZEROVAL; // when module enabling, countor value set to zero
    TIMG12->COUNTERREGS.CTRCTL |= GPTIMER_CTRCTL_CM_DOWN; // Count down mode
    TIMG12->COUNTERREGS.CTRCTL |= GPTIMER_CTRCTL_REPEAT_REPEAT_1; // Repeat mode
    TIMG12->COUNTERREGS.CTRCTL |= GPTIMER_CTRCTL_EN_DISABLED; // Timer counter disable

    // load counter register, using full 16-bit
    TIMG12->COUNTERREGS.LOAD |= 0x0000FFFF;

    // event
    // come from Channel ID1(TIMG6)
    //FSUB_0 port
    TIMG12->FSUB_0 |= (GPTIMER_FPUB_0_CHANID_MASK & 0x01); // connect channel ID1

//    TIMG12->COUNTERREGS.IFCTL_01[0] |= GPTIMER_IFCTL_01_ISEL_FSUB0; //input source = FUSB_0

    //setting of crosstriger
    TIMG12->COMMONREGS.CTTRIGCTL |= GPTIMER_CTTRIGCTL_EVTCTTRIGSEL_FSUB0; //trigger from FSUB0
    TIMG12->COMMONREGS.CTTRIGCTL |= GPTIMER_CTTRIGCTL_EVTCTEN_ENABLE; //input crosstrigger enable

    TIMG12->COUNTERREGS.TSEL |= GPTIMER_TSEL_TE_ENABLED; // trigger enable
    TIMG12->COUNTERREGS.TSEL |= GPTIMER_TSEL_ETSEL_TRIG_SUB0; // trigger from FSUB0

    //setting CC0 imput source
    TIMG12->COUNTERREGS.IFCTL_01[0] |= GPTIMER_IFCTL_01_ISEL_TRIG_INPUT; //input source = trigger

    //setting CC0
    TIMG12->COUNTERREGS.CC_01[0] |= (GPTIMER_CC_01_CCVAL_MASK & 0x1); // compare value
    TIMG12->COUNTERREGS.CCCTL_01[0] |= GPTIMER_CCCTL_01_COC_CAPTURE; // capture mode
    TIMG12->COUNTERREGS.CCCTL_01[0] |= GPTIMER_CCCTL_01_CCOND_CC_TRIG_RISE; //capture rising edge
    TIMG12->COUNTERREGS.OCTL_01[0] |= GPTIMER_OCTL_01_CCPO_LOAD; // output load event

    // Capture or Compare (CCP) setting
    TIMG12->COMMONREGS.CCPD |=  GPTIMER_CCPD_C0CCP1_OUTPUT; // TIMG12_CCP1 output
    TIMG12->COMMONREGS.ODIS &= ~(GPTIMER_ODIS_C0CCP1_MASK); // CCP1 is output, not forced Low

    TIMG12->COUNTERREGS.CC_01[1] |= (GPTIMER_CC_01_CCVAL_MASK & 135); // compare value

    TIMG12->COUNTERREGS.CCCTL_01[1] |= GPTIMER_CCCTL_01_COC_COMPARE; // Compare mode
    TIMG12->COUNTERREGS.OCTL_01[1] |= GPTIMER_OCTL_01_CCPIV_LOW; // initvalue = low output
    TIMG12->COUNTERREGS.OCTL_01[1] |= GPTIMER_OCTL_01_CCPOINV_INV; // output is inversion
    TIMG12->COUNTERREGS.OCTL_01[1] |= GPTIMER_OCTL_01_CCPO_FUNCVAL; // Output source = Signal generator value
    TIMG12->COUNTERREGS.CCACT_01[1] |= GPTIMER_CCACT_01_LACT_CCP_LOW; // Load event = set Low
    TIMG12->COUNTERREGS.CCACT_01[1] |= GPTIMER_CCACT_01_CDACT_CCP_HIGH; // Compare event = set high

    // enabling clock
    TIMG12->COMMONREGS.CCLKCTL |= GPTIMER_CCLKCTL_CLKEN_ENABLED; // clock enabled

//Before main roop
    TIMG6->COUNTERREGS.CTRCTL |= GPTIMER_CTRCTL_EN_ENABLED; // Timer counter enable
    TIMG12->COUNTERREGS.CTRCTL |= GPTIMER_CTRCTL_EN_ENABLED; // Timer counter enable

CC 比较值为0x1、因此如果有接收到一个事件将生成比较事件。

如果它按我认为的方式工作、则 TIMG12CC1输出周期必须与 TIMG6 PWM 相同。

(加载值为 TIMG12>TIMG6、因此 TIMG6在 TIMG12 PWM 优先级之前生成加载事件(=作为 TIMG12加载事件发送)。 因此每个引物将是相同的)

谢谢!

Gr

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

    您好、GR、

    我将研究这种情况、并尝试实现您对我的描述的功能。

    谢谢!

    Zoey

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

    您好、GR、

    只是想确保输出两个相同周期的 PWM、对吧? 如果它们需要上升和下降同步?μ s

    此致、

    Zoey

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

    Zoey、您好!

    感谢您的支持。

    您只想确保想要输出两个相同周期的 PWM、对吗? 他们是否需要上升和下降同步?

    是的、我需要2个相同优先级的 PWM。

    但我要设置每个 PWM 脉冲的延迟时间。

    TIMG6 CC1用于生成延迟时间。

    PWM 信号就是这样

    此致、

    Gr

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

    您好、GR、

    这似乎很有趣。

    下面是我的输入:

    Timer6 CC0 PWM 和 CC1 PWM 具有相同的周期、我们可以使用不同的占空比来生成延迟时间。 通过这种方式、我们可以使用 timer6 CC1 CC 事件来触发 timer12 CC0 PWM 加载。

    你怎么看? 如果可以、我明天可以演示示例。

    此致、

    Zoey

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

    Zoey、您好!

    感谢您的支持!

    [报价 userid="571916" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1396196/mspm0g3507-sync-timers-without-cpu-interrupt/5347120 #5347120"]Timer6 CC0 PWM 和 CC1 PWM 具有相同的周期、我们可以使用不同的占空比来设定延迟时间。 通过这种方式、我们可以使用 timer6 CC1 CC 事件来触发 timer12 CC0 PWM 加载。[/QUOT]

    这正是我要做的。

    Timer6 CC1使用设置的延迟时间、因此无需输出 PWM 信号。

    此致、

    Gr

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

    您好、GR、

    以下是我为实现此功能而编写的演示代码(使用了 SysConfig)。 希望它能对您有所帮助。

    e2e.ti.com/.../E2E_5F00_PWM_5F00_twoPeriodSync_5F00_G.zip

    结果如下:

    此致、

    Zoey

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

    Zoey、您好!

    感谢您参与该项目。

    但在我的羡慕,它可能不工作好,它不是延迟时间。

    我想是因为 SysConfig 和 SDK 版本不同。

    您能否共享寄存器值? 例如 CCS 调试/寄存器视图

    此致、

    Gr

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

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

    谢谢!