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.

[参考译文] TDA4VM:TDA4VM:使用 MCU_timer0生成 PWM、加电需要20秒

Guru**** 2524460 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1106478/tda4vm-tda4vm-use-mcu_timer0-to-generate-pwm-and-it-takes-20-seconds-since-power-up

器件型号:

专家:

   我们使用 MCU_TIMER0来生成 PWM。

该程序位于 SD 卡上、并在 MCU2_0上运行。

  至少需要20秒才能看到 PWM 波。

  有哪些原因以及如何改进?

我的 SDK 是  ti-processor-sdk-rtos-j721e-evm-08_00_00_12。

代码:


int32_t TIMEROutput (uint32_t baseAddr)
int32_t regVal
TIMERReset (baseAddr);

HW_WR_REG32 (baseAddr + TIMER_TIOCP_CFG、0xAUL);

/*选择自动回放模式。timer_TCLR[1] AR 0x1 */
regVal = TimerWaitForWrite (timer_write_post_TCLRbaseAddr);
if (CSL_Pass == regVal)
regVal = HW_RD_REG32 (baseAddr + TIMER_TCLR);
regVal &=(~(timer_TCLR_AR_MASK));
regVal |=((TIMER_TCLR_AR_value_1)<<(TIMER_TCLR_AR_SHIFT));
HW_WR_REG32 (baseAddr + TIMER_TCLR、regVal);
/*设置预分频定时器值.TIMER_TCLR[4-2] PTV 0x2 */
regVal = TimerWaitForWrite (timer_write_post_TCLRbaseAddr);
if (CSL_Pass == regVal)
regVal = HW_RD_REG32 (baseAddr + TIMER_TCLR);
regVal &=(~(timer_TCLR_PTV_MASK));
regVal |=(2uL <<(TIMER_TCLR_PTV_SHIFT));
HW_WR_REG32 (baseAddr + TIMER_TCLR、regVal);
/*启用前置分频器.TIMER_TCLR[5] 0x1 *
regVal = TimerWaitForWrite (timer_write_post_TCLRbaseAddr);
if (CSL_Pass == regVal)
regVal = HW_RD_REG32 (baseAddr + TIMER_TCLR);
regVal &=(~(timer_TSICR_LOADD_MASK));
regVal |=(1uL <<(TIMER_TSICR_LOADD_SHIFT));
HW_WR_REG32 (baseAddr + TIMER_TCLR、regVal);
/*选择触发输出模式。TIMER_TCLR[11-10] TRG 0x-*/
regVal = TimerWaitForWrite (timer_write_post_TCLRbaseAddr);
if (CSL_Pass == regVal)
regVal = HW_RD_REG32 (baseAddr + TIMER_TCLR);
regVal &=(~(timer_TCLR_TRG_MASK));
regVal |=((TIMER_TCLR_TRG_TRG_VALUE 0x2)<<(TIMER_TCLR_TRG_SHIFT));
HW_WR_REG32 (baseAddr + TIMER_TCLR、regVal);
/*选择脉冲或切换调制 PWM 模式。 Timer_TCLR[12] PT 0x-*/
regVal = TimerWaitForWrite (timer_write_post_TCLRbaseAddr);
if (CSL_Pass == regVal)
regVal = HW_RD_REG32 (baseAddr + TIMER_TCLR);
regVal |=(TIMER_TCLR_PT_MASK);
HW_WR_REG32 (baseAddr + TIMER_TCLR、regVal);
/*选择 TIMER[19-0]或 MCU_TIMER[9-0] TIMER_TCLR[14] GPO_CFG 0x0 */
器件引脚上的/* PWM 输出*/
针对定时器[19-0]或者在引脚上的*/、/* TIMER_IO[7-0]
针对 MCU_timer[9-0]的/* MCU_TIMER_IO[9-0]。 *
regVal = TimerWaitForWrite (timer_write_post_TCLRbaseAddr);
if (CSL_Pass == regVal)
regVal = HW_RD_REG32 (baseAddr + TIMER_TCLR);
regVal &=(~(timer_TCLR_GPO_CFG_MASK));
HW_WR_REG32 (baseAddr + TIMER_TCLR、regVal);
/*配置 PWM 输出引脚默认值。 Timer_TCLR[7] SCPWM 0x-*/
/*加载计时器加载值。 Timer_TLDR 0x-*/
HW_WR_REG32 (baseAddr + TIMER_TLDR、0xFFFFUL-250uL);
/*加载定时器比较值。 Timer_TAR 0x-*/
HW_WR_REG32 (baseAddr + TIMER_TMAR、0xFFFFUL-125UL);
/*启用比较。 Timer_TCLR[6] CE 0x1 */
regVal = TimerWaitForWrite (timer_write_post_TCLRbaseAddr);
if (CSL_Pass == regVal)
regVal = HW_RD_REG32 (baseAddr + TIMER_TCLR);
regVal |=(TIMER_TCLR_CE_MASK);
HW_WR_REG32 (baseAddr + TIMER_TCLR、regVal);
/*启动计时器。 Timer_TCLR[0] ST 0x1 */
regVal = TimerWaitForWrite (timer_write_post_TCLRbaseAddr);
if (CSL_Pass == regVal)
regVal = HW_RD_REG32 (baseAddr + TIMER_TCLR);
regVal |=(TIMER_TCLR_ST_MASK);
HW_WR_REG32 (baseAddr + TIMER_TCLR、regVal);
返回 regVal
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否尝试检查、哪种操作需要花费大部分时间?

    此致、
    Parth