请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: 专家:
我们使用 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_TCLR、baseAddr);
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_TCLR、baseAddr);
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_TCLR、baseAddr);
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_TCLR、baseAddr);
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_TCLR、baseAddr);
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_TCLR、baseAddr);
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_TCLR、baseAddr);
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_TCLR、baseAddr);
if (CSL_Pass == regVal)
{
regVal = HW_RD_REG32 (baseAddr + TIMER_TCLR);
regVal |=(TIMER_TCLR_ST_MASK);
HW_WR_REG32 (baseAddr + TIMER_TCLR、regVal);
}
返回 regVal;
}