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.

TDA4VP-Q1: Understanding the values for Timer interrupt

Part Number: TDA4VP-Q1

Tool/software:

Below is a code snippet from another thread

#define GPTIMER_MAX_RESOLUTION          (0xFFFFFFFFU)
#define TIMER_INITIAL_COUNT             (0x3C0U)
#define TIMER_RLD_COUNT                 (0x3C0U)

#define TIMER16_IRQ_NUM                 172


void TimerMode_Init(uint32_t baseAddr)
{

    TIMERReset(baseAddr);
    TIMEREmuModeConfigure(baseAddr, TIMER_TIOCP_CFG_EMUFREE_TIMER_FREE);//GPTIMER_FREE);
    TIMERIdleModeConfigure(baseAddr, TIMER_TIOCP_CFG_IDLEMODE_IDLE_MODE_0X1);//GPTIMER_NO_IDLE);
    TIMERPostedModeConfig(baseAddr, TIMER_TSICR_POSTED_POSTED_VALUE_0);//GPTIMER_NONPOSTED);
    TIMERCounterSet(baseAddr, (GPTIMER_MAX_RESOLUTION - TIMER_INITIAL_COUNT));
    TIMERReloadSet(baseAddr, (GPTIMER_MAX_RESOLUTION - TIMER_RLD_COUNT));
    TIMERModeConfigure(baseAddr, TIMER_TCLR_AR_MASK); //GPTIMER_AUTORLD_NOCMP_ENABLE);
    TIMERWakeEnable(baseAddr, TIMER_IRQWAKEEN_OVF_WUP_ENA_MASK);
    TIMERIntEnable(baseAddr, TIMER_INT_OVF_EN_FLAG);
    TIMERDisable(baseAddr);
}

Timer_PeriodConfig(uint32_t baseAddr, uint32_t wTime)
{
    HW_WR_REG32(baseAddr + TIMER_TCLR, 0x0002);
    HW_WR_REG32(baseAddr + TIMER_TCRR, (GPTIMER_MAX_RESOLUTION - wTime));
    HW_WR_REG32(baseAddr + TIMER_TLDR, (GPTIMER_MAX_RESOLUTION - wTime));
    HW_WR_REG32(baseAddr + TIMER_TCLR, 0x0003);     /* start timer */
}

void Timer_IntCfg(void)
{
    uint32_t baseAddr;

    HwiP_Handle hwiHandle;
    OsalInterruptRetCode_e      osalRetVal = 0;
    OsalRegisterIntrParams_t    intrPrms;

    /*Timer18*/
    baseAddr = TIMER16_ADDRESS;
    Osal_RegisterInterrupt_initParams(&intrPrms);
    intrPrms.corepacConfig.arg          = (uintptr_t)baseAddr;
    intrPrms.corepacConfig.name         = NULL;
    intrPrms.corepacConfig.isrRoutine   = Timer16_InterruptIsr;
    intrPrms.corepacConfig.priority     = 0x01U;
    intrPrms.corepacConfig.corepacEventNum = 0U; /* NOT USED ? */
    intrPrms.corepacConfig.triggerSensitivity = OSAL_ARM_GIC_TRIG_TYPE_HIGH_LEVEL;
    intrPrms.corepacConfig.intVecNum    = TIMER16_IRQ_NUM;

    osalRetVal = Osal_RegisterInterrupt(&intrPrms, &hwiHandle);

    if(osalRetVal == 0)
    {
        printf("Timer16_IntCfg success!\n");
    }
    else
    {
        printf("Timer16_IntCfg is fail!\n");
    }

}

I have following questions.   

- TIMERIdleModeConfigure(baseAddr, TIMER_TIOCP_CFG_IDLEMODE_IDLE_MODE_0X1);//GPTIMER_NO_IDLE);   Why is this required
- TIMERPostedModeConfig(baseAddr, TIMER_TSICR_POSTED_POSTED_VALUE_0);//GPTIMER_NONPOSTED);  I do not really understand what is a Posted mode and non-posted mode.?

- TIMEREmuModeConfigure what is EMu mode?

-  Why is the timer disabled in line 20?

- Can you please explain the magic numbers in  Timer_Period_config  function. What does 0x000002 and 0x00003 mean?