Experts:
We use MCU_TIMER0 to generate PWM, output by the pad E22.
The program is on the SD card, and run on MCU1_0. We start the core via SBL.
It takes 20 seconds more to see the PWM wave.
What are the reasons and how to improve?
code:
TIMERReset(baseAddr);
HW_WR_REG32(0x40F08100UL, 0x1UL);
HW_WR_REG32(baseAddr + TIMER_TIOCP_CFG, 0xAUL);
/* Select autoreload mode. TIMER_TCLR[1] AR 0x- */
regVal = IcuE_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_AR_VALUE_1) << (TIMER_TCLR_AR_SHIFT));
HW_WR_REG32(baseAddr + TIMER_TCLR, regVal);
}
/* Set prescale timer value. TIMER_TCLR[4-2] PTV 0x- */
regVal = IcuE_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);
}
/* Enable prescaler. TIMER_TCLR[5] PRE 0x1 */
regVal = IcuE_timerWaitForWrite(TIMER_WRITE_POST_TCLR, baseAddr);
if(CSL_PASS == regVal)
{
regVal = HW_RD_REG32(baseAddr + TIMER_TCLR);
regVal &= (~(TIMER_TSICR_POSTED_MASK));
regVal |= (1uL << (TIMER_TSICR_POSTED_SHIFT));
HW_WR_REG32(baseAddr + TIMER_TCLR, regVal);
}
/* Select trigger output mode. TIMER_TCLR[11-10] TRG 0x- */
regVal = IcuE_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);
}
/* Select pulse or toggle modulation PWM mode. TIMER_TCLR[12] PT 0x- */
regVal = IcuE_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);
}
/* Select TIMER[19-0] or MCU_TIMER[9-0] TIMER_TCLR[14] GPO_CFG 0x0 */
/* PWM output at device pins */
/* TIMER_IO[7-0] for TIMER[19-0] or at pins */
/* MCU_TIMER_IO[9-0] for MCU_TIMER[9-0]. */
regVal = IcuE_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);
}
HW_WR_REG32(0x40F04280UL, 0UL);
/* Configure PWM output pin default value. TIMER_TCLR[7] SCPWM 0x- */
/* Load timer load value. TIMER_TLDR 0x- */
HW_WR_REG32(baseAddr + TIMER_TLDR, 0xFFFFFFFFUL-10000UL);
/* Load timer compare value. TIMER_TMAR 0x- */
HW_WR_REG32(baseAddr + TIMER_TMAR, 0xFFFFFFFFUL-3000UL);
/* Enable compare. TIMER_TCLR[6] CE 0x1 */
regVal = IcuE_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);
}
/* Start the timer. TIMER_TCLR[0] ST 0x1 */
regVal = IcuE_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);
}