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;
}
}
#endifvoid 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.