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:使用 MCU_timer0生成 PWM,启动后需要20秒

Guru**** 2524550 points


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

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

部件号:TDA4VM

专家:

   我们使用 MCU_TIMER0生成 PWM,由 PAD E22输出。

该程序位于 SD 卡上,并在 MCU1_0上运行。 我们通过 SBL 启动核心。

要查看 PWM 波形,需要20秒以上。

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

代码:


   TIMERReset (baseAddr);

   HW_WR_REG32 (0x40F08100UL,0x1UL);

   HW_WR_REG32 (基准地址+ TIMER _TIOCP_CFG,0xAUL);

   /*选择自动回放模式。                  Timer_TCLR[1] AR 0x-         */
   RegVal = IcuE_timerWaitForWrite (timer_write_post_TCLR,baseAddr);
   IF (CSL_PASS =正则值)
   {
       RegVal = HW_RD_REG32 (基准地址+ TIMER TCLR);
       regVal &=(~(timer_TCLR_AR_mask));
       regVal |=((timer_TCLR_AR_AR_VALUE)<<(timer_TCLR_AR_SHIFT);
       HW_WR_REG32 (基准地址+ TIMER TCLR,正则值);
   }
   /*设置预调节计时器值。                    Timer_TCLR[4-2] PTV 0x-  */
   RegVal = IcuE_timerWaitForWrite (timer_write_post_TCLR,baseAddr);
   IF (CSL_PASS =正则值)
   {
       RegVal = HW_RD_REG32 (基准地址+ TIMER TCLR);
       regVal &=(~(timer_TCLR_PTV_mask));
       regVal |=(2uL <<(timer_TCLR_PTI_SHIFT));
       HW_WR_REG32 (基准地址+ TIMER TCLR,正则值);
   }
   /*启用预校准器。                            TIMER TCLR[5]前置0x1    */
   RegVal = IcuE_timerWaitForWrite (timer_write_post_TCLR,baseAddr);
   IF (CSL_PASS =正则值)
   {
       RegVal = HW_RD_REG32 (基准地址+ TIMER TCLR);
       regVal &=(~(timer_TSICR_ended_mask));
       regVal |=(1uL <<(timer_TSICR_ended_shift));
       HW_WR_REG32 (基准地址+ TIMER TCLR,正则值);
   }
   /*选择触发输出模式。              Timer_TCLR[11-10] TRG 0x-    */
   RegVal = IcuE_timerWaitForWrite (timer_write_post_TCLR,baseAddr);
   IF (CSL_PASS =正则值)
   {
       RegVal = HW_RD_REG32 (基准地址+ TIMER TCLR);
       regVal &=(~(timer_TCLR_TRG_mask));
       正则值|=((TIMER TCLR_TRG_TRG_VALUE _0x2)<<(TIMER TCLR_TRG_SHIFT);
       HW_WR_REG32 (基准地址+ TIMER TCLR,正则值);
   }
   /*选择脉冲或切换调制 PWM 模式。 Timer_TCLR[12] PT 0x-     */
   RegVal = IcuE_timerWaitForWrite (timer_write_post_TCLR,baseAddr);
   IF (CSL_PASS =正则值)
   {
       RegVal = HW_RD_REG32 (基准地址+ TIMER TCLR);
       regVal |=(timer_TCLR_PT_mask);
       HW_WR_REG32 (基准地址+ TIMER TCLR,正则值);
   }
   /*选择 TIMER [19-0]或 MCU_TIMER [9-0]    TIMER TCLR[14] GPO_CFG 0x0   */
   设备引脚处的/* PWM 输出                                             */
   对于 TIMER [19-0]或在引脚                              */处的/* TIMER IO[7-0]
   对于 MCI_TIMER [9-0],为/* MCI_TIMER IO[9-0]。                                  *
   RegVal = IcuE_timerWaitForWrite (timer_write_post_TCLR,baseAddr);
   IF (CSL_PASS =正则值)
   {
       RegVal = HW_RD_REG32 (基准地址+ TIMER TCLR);
       regVal &=(~(timer_TCLR_GPO_CFG 掩码));
       HW_WR_REG32 (基准地址+ TIMER TCLR,正则值);
   }
    HW_WR_REG32 (0x40F04280UL,0UL);
   /*配置 PWM 输出引脚默认值。  Timer_TCLR[7] SCPWM 0x-      */
   
   /*加载计时器加载值。                       Timer_TLDR 0x-           *
   HW_WR_REG32 (基准地址+ TIMER TLDR,0xFFFFUL-10000UL);
   /*加载计时器比较值。                    Timer_TMAR 0x-           */
   HW_WR_REG32 (基准地址+ TIMER TMAR,0xFFFFUL-3000UL);
   /*启用比较。                          Timer_TCLR[6] CE 0x1         */
   RegVal = IcuE_timerWaitForWrite (timer_write_post_TCLR,baseAddr);
   IF (CSL_PASS =正则值)
   {
       RegVal = HW_RD_REG32 (基准地址+ TIMER TCLR);
       regVal |=(timer_TCLR_CE_mask);
       HW_WR_REG32 (基准地址+ TIMER TCLR,正则值);
   }
   /*启动计时器。                             Timer_TCLR[0] ST 0x1     */
   RegVal = IcuE_timerWaitForWrite (timer_write_post_TCLR,baseAddr);
   IF (CSL_PASS =正则值)
   {
       RegVal = HW_RD_REG32 (基准地址+ TIMER TCLR);
       regVal |=(timer_TCLR_ST_mask);
       HW_WR_REG32 (基准地址+ TIMER TCLR,正则值);
   }

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

    您好,

    请您分享 SDK 版本和此处提及的示例吗?

    此致,
    帕斯

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

    SDK 版本是 ti-processer-sdk-RTos-j721e-EVM-EVM-EVM-08-00_00_12。

    我将上述代码放入文件 CanApp.c 中,可以在 mcal_drv/mccal/examples/can.

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

    您好,

    对延误表示歉意。
    请分享"IcuE_timerWaitForWrite"正在做什么?
    此外,您能否细分大部分时间花在何处? 我的意思是,检查启动应用程序所需的时间,以及启动应用程序后需要多少时间才能启动应用程序?

    此致,
    帕斯