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.

PROCESSOR-SDK-J7200: MCUSW setup 1ms timebase

Part Number: PROCESSOR-SDK-J7200


Hello there

  I am trying to setup 1ms timebase by using   MCUSW base.

I found the test case "dmTimerUt" in PDK can display 1 ms correctly as shown below:

But when I porting the program code to MCUSW as shown below:

I use the same parameter as PDK but get 90ms timer

void main(void)
{
    GptApp_DemoStatus = E_OK;
#ifdef UART_ENABLED
    AppUtils_Init();
#endif
    AppUtils_LogResult(APP_UTILS_TEST_STATUS_INIT);
    /*Init*/
    MCUSWDioApp_Init();
    MCUSWGptApp_Init();

    AppUtils_Printf((uint32)APP_UTILS_PRINT_MSG_NORMAL,
                    "Sample Application - STARTS !!!\n");
    /*Start Main test case*/

//    return (0U);
}


//20210901_Jimchen

#define CAN_START_SEC_ISR_CODE
#include "Can_MemMap.h"

CAN_ISR_TEXT_SECTION FUNC(void, CAN_CODE_FAST) CanApp_CanXIsr(uintptr_t CanPtr)
{
    CanApp_IsrType canChIsr = (CanApp_IsrType)CanPtr;

    /* Associated GPT ISR */
    canChIsr();
            AppUtils_Printf(MSG_NORMAL, APP_NAME
                                        ": canChIsr()!!!\n");
}
unsigned int IOLevelGPT;
void csldmTimerTest_StubTEST(uintptr_t arg)
{
  uint32_t baseAddr = (uint32_t) (0x40420000UL);
  //uint32_t baseAddr = (uint32_t) (0x40400000UL);

  /* Disable the Timer interrupts */
  TIMERIntDisable(baseAddr, TIMER_INT_OVF_EN_FLAG);

  /* acknowledge the interrupt */
  TIMERIntStatusClear(baseAddr, TIMER_IRQSTATUS_OVF_IT_FLAG_MASK);

  //gdmTimerTest_IsrCount++;

   /* Enable the Timer interrupts */
  TIMERIntEnable(baseAddr, TIMER_INT_OVF_EN_FLAG);

AppUtils_Printf(MSG_NORMAL,
APP_NAME ": csldmTimerTest_StubTEST::: \n");
    if(IOLevelGPT==STD_HIGH)
    {
        Dio_WriteChannel(CAN_TRCV_MCU_MCAN_1, STD_LOW);
        AppUtils_Printf(MSG_NORMAL, APP_NAME
            ": CAN_TRCV_MCU_MCAN_1, STD_LOW\n");
  
        IOLevelGPT = STD_LOW;         
    }
    else
    {
        Dio_WriteChannel(CAN_TRCV_MCU_MCAN_1, STD_HIGH); 
        AppUtils_Printf(MSG_NORMAL, APP_NAME
            ": CAN_TRCV_MCU_MCAN_1, STD_HIGH\n"); 
        IOLevelGPT = STD_HIGH; 
    }
}
#endif
void MCUSWGptApp_Init(void)
{
//    GptApp_Startup();

    /* Initialize memory sections  */
    AppUtils_GptSectionInit();

    AppUtils_Printf(MSG_NORMAL, "\n");
    AppUtils_Printf(MSG_NORMAL, APP_NAME
                                        ": Sample Application - STARTS !!!!!!!!!!!!!!!!!!!!!\n");


 #if 1  
    //uint32_t regVal;
    Board_initCfg boardCfg;
    __attribute__((unused)) Board_STATUS  boardStatus;

    boardCfg = BOARD_INIT_PINMUX_CONFIG |
               BOARD_INIT_UART_STDIO;
    boardStatus = Board_init(boardCfg);
    __attribute__((unused))  int32_t cslRet = CSL_EFAIL, testStatus;
    uint32_t status;

    OsalInterruptRetCode_e   retVal;
    OsalRegisterIntrParams_t interruptRegParams;
    /* Initialize with defaults */
    Osal_RegisterInterrupt_initParams(&interruptRegParams);

    /* Populate the interrupt parameters */
    interruptRegParams.corepacConfig.arg=(uintptr_t) timerAddrTESTTimer;//0x40420000UL
    interruptRegParams.corepacConfig.name=NULL;
    interruptRegParams.corepacConfig.isrRoutine= csldmTimerTest_StubTEST;
    interruptRegParams.corepacConfig.triggerSensitivity =  OSAL_ARM_GIC_TRIG_TYPE_HIGH_LEVEL;
    interruptRegParams.corepacConfig.priority = 0x20U;

    interruptRegParams.corepacConfig.intVecNum=40U; /* Host Interrupt vector */
    //interruptRegParams.corepacConfig.intVecNum=38U; /* Host Interrupt vector */
    interruptRegParams.corepacConfig.corepacEventNum = 0u;

    /* Register interrupts */
    retVal = Osal_RegisterInterrupt(&interruptRegParams,&(gdmTimerTest_HwiPHandle));

    if (retVal == OSAL_INT_SUCCESS)
    {
        testStatus = 0;        
        AppUtils_Printf(MSG_NORMAL, APP_NAME
                                            ": Osal_RegisterInterrupt Init OK !!!\n");
    }
    else
    {
        testStatus = 1;
        AppUtils_Printf(MSG_NORMAL, APP_NAME
                                    ": Osal_RegisterInterrupt Init NG !!!\n");
    }
    /* Reset the timer */
    if (testStatus == CSL_APP_TEST_PASS)
    {
        cslRet = TIMERReset(timerAddrTESTTimer);
    }

    if (cslRet == CSL_PASS)
    {
        cslRet = TIMEREmuModeConfigure(timerAddrTESTTimer, TIMER_FREE);
    }

    if (cslRet == CSL_PASS)
    {
        cslRet = TIMERIdleModeConfigure(timerAddrTESTTimer, TIMER_NO_IDLE);
    }

    if (cslRet == CSL_PASS)
    {
        cslRet = TIMERPostedModeConfig(timerAddrTESTTimer, TIMER_NONPOSTED);
    }

    if (cslRet == CSL_PASS)
    {
        cslRet = TIMERReadModeConfig(timerAddrTESTTimer, TIMER_READ_MODE_NONPOSTED);
    }

    if (cslRet == CSL_PASS)
    {
        uint32_t postedStatus;
        cslRet = TIMERCounterSet(timerAddrTESTTimer, CSL_TEST_TIMER_COUNTER_VAL);
        do {
          cslRet = TIMERWritePostedStatusGet2(timerAddrTESTTimer, &postedStatus);
          if (cslRet != CSL_PASS)
          {
              break;
          }
          status = (postedStatus & CSL_TEST_TIMER_DM_TWPS_W_PEND_TCRR);
        } while (status != (uint32_t) 0u);
    }

    if (cslRet == CSL_PASS)
    {
        uint32_t postedStatus;
        cslRet = TIMERReloadSet(timerAddrTESTTimer, CSL_TEST_TIMER_COUNTER_VAL);
        do {
          cslRet = TIMERWritePostedStatusGet2(timerAddrTESTTimer, &postedStatus);
          if (cslRet != CSL_PASS)
          {
              break;
          }
          status = (postedStatus & CSL_TEST_TIMER_DM_TWPS_W_PEND_TLDR);
        } while (status != (uint32_t) 0u);
    }

    if (cslRet == CSL_PASS)
    {
        /* Enable the Timer Wakeup events represented by wakeFlags */
        cslRet = TIMERWakeEnable(timerAddrTESTTimer, TIMER_IRQWAKEEN_OVF_WUP_ENA_MASK);
    }

    if (cslRet == CSL_PASS)
    {
        TIMERIntEnable(timerAddrTESTTimer, TIMER_INT_OVF_EN_FLAG);
    }
    if (cslRet == CSL_PASS)
    {
        cslRet = TIMERDisable(timerAddrTESTTimer);
    }



    //define TIMER_TCLR_AR_MASK                                                                                  (0x00000002U)
       HwiP_enableInterrupt(0x20U);
       TIMERModeConfigure(timerAddrTESTTimer, 0x00000002U);
       //DMTIMER1MSModeConfigure(timerAddrTESTTimer, 0x00000002U);

       TIMEREnable(timerAddrTESTTimer);
    /* Wait for previous write to complete */
    //TimerWaitForWrite(0x00000001, timerAddrTESTTimer);

    /* Start the timer */
    //HW_WR_FIELD32(
    //    timerAddrTESTTimer + 0x24,
    //    DMTIMER_1MS_TCLR_ST,
     //   0x1);
#endif      
    AppUtils_Printf(MSG_NORMAL, APP_NAME
                                        ": Sample Application - STARTS Init OK !!!\n");
    
}

Which side of the modification error caused the problem?

Thanks for your help.