专家:
我们使用 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,正则值);
}