Experts:
We use MCU_TIMER0 to generate PWM.
The program is on the SD card, and run on MCU2_0.
It takes 20 seconds at least to see the PWM wave.
What are the reasons and how to improve?
My SDK is ti-processer-sdk-rtos-j721e-evm-08_00_00_12.
code:
int32_t TIMEROutput(uint32_t baseAddr)
{
int32_t regVal;
TIMERReset(baseAddr);
HW_WR_REG32(baseAddr + TIMER_TIOCP_CFG, 0xAUL);
/* Select autoreload mode.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_AR_VALUE_1) << (TIMER_TCLR_AR_SHIFT));
HW_WR_REG32(baseAddr + TIMER_TCLR, regVal);
}
/* Set prescale timer value.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);
}
/* Enable prescaler.TIMER_TCLR[5] PRE 0x1 */
regVal = 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 = 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 = 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 = 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);
}
/* 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-250UL);
/* Load timer compare value. TIMER_TMAR 0x- */
HW_WR_REG32(baseAddr + TIMER_TMAR, 0xFFFFFFFFUL-125UL);
/* Enable compare. 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);
}
/* Start the timer. 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);
}
return regVal;
}