diff --git a/Mcal/Icu/inc/Icu_Lld_Etmr.h b/Mcal/Icu/inc/Icu_Lld_Etmr.h
index edd1f4c1e..86a45bde9 100644
--- a/Mcal/Icu/inc/Icu_Lld_Etmr.h
+++ b/Mcal/Icu/inc/Icu_Lld_Etmr.h
@@ -174,10 +174,6 @@ extern Icu_ChannelInfoType Icu_gChannelInfo[ICU_MAX_CHANNEL];
 extern Icu_ChannelType Etmr_Icu_gHwToUserChannelMap[ICU_ETMR_MC_CHANNEL_COUNT][ETMR_ICU_CHANNEL_COUNT];
 extern Etmr_Icu_TimeStampInfoType Etmr_Icu_TimeStampInfo[ICU_MAX_CHANNEL];
 extern Etmr_Icu_EdgeDetectType Etmr_Icu_gEdgeNotification[ICU_MAX_CHANNEL];
-extern volatile uint32 LowLevelActiveTimes;
-extern volatile uint32 HighLevelActiveTimes;
-extern volatile uint32 LowLevelMcOverFlowTimes;
-extern volatile uint32 HighLevelMcOverFlowTimes;
 /*==================================================================================================
                                                 FUNCTION PROTOTYPES
 ==================================================================================================*/
diff --git a/Mcal/Icu/src/Icu_Etmr_Irq.c b/Mcal/Icu/src/Icu_Etmr_Irq.c
index 54fa96430..a95c64134 100644
--- a/Mcal/Icu/src/Icu_Etmr_Irq.c
+++ b/Mcal/Icu/src/Icu_Etmr_Irq.c
@@ -258,14 +258,6 @@ ICU_FUNC void SignalMeasurementHandle(Icu_ChannelType UserDefineChannel, uint32
     if (2U == (Icu_gChannelInfo[UserDefineChannel].EdgeNumber))
     {
       Icu_gChannelInfo[UserDefineChannel].InputState = ICU_ACTIVE;
-#if 0
-#ifndef CPU_YTM32B1MC0
-      HighLevelActiveTimes = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + (uint32)eTMR_CH_PPCNTV_OFFSET32((uint32)EtmrChannelId));
-      LowLevelActiveTimes = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + (uint32)eTMR_CH_NPCNTV_OFFSET32((uint32)EtmrChannelId));
-      HighLevelMcOverFlowTimes = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + (uint32)eTMR_CH_PPCNTN_OFFSET32((uint32)EtmrChannelId));
-      LowLevelMcOverFlowTimes = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + (uint32)eTMR_CH_NPCNTN_OFFSET32((uint32)EtmrChannelId));
-#endif
-#endif
     }
   }
   /* Measurement period time */
diff --git a/Mcal/Icu/src/Icu_Lld_Etmr.c b/Mcal/Icu/src/Icu_Lld_Etmr.c
index 2365420d5..3e34a8794 100644
--- a/Mcal/Icu/src/Icu_Lld_Etmr.c
+++ b/Mcal/Icu/src/Icu_Lld_Etmr.c
@@ -106,14 +106,6 @@ ICU_VAR static Etmr_Icu_ChannelInitStateType Etmr_Icu_gChannelInitState[ICU_MAX_
 #define ICU_STOP_SEC_VAR_CLEARED_UNSPECIFIED
 #include "Icu_MemMap.h"
 
-#define ICU_START_SEC_VAR_INIT_32
-#include "Icu_MemMap.h"
-ICU_VAR volatile uint32 LowLevelActiveTimes = 0;
-ICU_VAR volatile uint32 HighLevelActiveTimes = 0;
-ICU_VAR volatile uint32 LowLevelMcOverFlowTimes = 0;
-ICU_VAR volatile uint32 HighLevelMcOverFlowTimes = 0;
-#define ICU_STOP_SEC_VAR_INIT_32
-#include "Icu_MemMap.h"
 /*==================================================================================================
                                                 LOCAL VARIABLES
 ==================================================================================================*/
@@ -502,8 +494,10 @@ ICU_FUNC Icu_ValueType Icu_Lld_Etmr_GetTimeElapsed(Icu_ChannelType Channel)
 {
   Icu_ValueType ReturnValue = 0U;
   volatile Icu_ChannelConfigType const *ChannelConfigPtr = Icu_gConfigPtr->ChannelConfigPtr;
-  Icu_ValueType McOverFlowTimes = 0U;
-  Icu_ValueType LevelTimes = 0U;
+  Icu_ValueType McOverFlowTimes1 = 0U;
+  Icu_ValueType McOverFlowTimes2 = 0U;
+  Icu_ValueType LevelTimes1 = 0U;
+  Icu_ValueType LevelTimes2 = 0U;
   boolean InputLevelState;
   Icu_SignalMeasurementPropertyType ChannelMeasurementProperty;
   /* get hardware etmr channel id */
@@ -531,8 +525,8 @@ ICU_FUNC Icu_ValueType Icu_Lld_Etmr_GetTimeElapsed(Icu_ChannelType Channel)
         McOverFlowTimes = Icu_gChannelInfo[Channel].LowLevelMcOverflowTimes;
         LevelTimes = Icu_gChannelInfo[Channel].LowLevelTimes;
 #else
-        McOverFlowTimes = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_NPCNTN_OFFSET32((uint32)EtmrChannelId));
-        LevelTimes = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_NPCNTV_OFFSET32((uint32)EtmrChannelId));
+        McOverFlowTimes1 = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_NPCNTN_OFFSET32((uint32)EtmrChannelId));
+        LevelTimes1 = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_NPCNTV_OFFSET32((uint32)EtmrChannelId));
 #endif
         Icu_gChannelInfo[Channel].EdgeNumber = 0U;
         Icu_gChannelInfo[Channel].InputState = ICU_IDLE;
@@ -547,8 +541,8 @@ ICU_FUNC Icu_ValueType Icu_Lld_Etmr_GetTimeElapsed(Icu_ChannelType Channel)
         McOverFlowTimes = Icu_gChannelInfo[Channel].HighLevelMcOverflowTimes;
         LevelTimes = Icu_gChannelInfo[Channel].HighLevelTimes;
 #else
-        McOverFlowTimes = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_PPCNTN_OFFSET32((uint32)EtmrChannelId));
-        LevelTimes = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_PPCNTV_OFFSET32((uint32)EtmrChannelId));
+        McOverFlowTimes1 = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_PPCNTN_OFFSET32((uint32)EtmrChannelId));
+        LevelTimes1 = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_PPCNTV_OFFSET32((uint32)EtmrChannelId));
 #endif
         Icu_gChannelInfo[Channel].EdgeNumber = 0U;
         Icu_gChannelInfo[Channel].InputState = ICU_IDLE;
@@ -567,10 +561,10 @@ ICU_FUNC Icu_ValueType Icu_Lld_Etmr_GetTimeElapsed(Icu_ChannelType Channel)
         McOverFlowTimes = Icu_gChannelInfo[Channel].LowLevelMcOverflowTimes;
         LevelTimes = Icu_gChannelInfo[Channel].LowLevelTimes;
 #else
-        McOverFlowTimes = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_NPCNTN_OFFSET32((uint32)EtmrChannelId)) +          /*PRQA S 0404*/
-                          ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_PPCNTN_OFFSET32((uint32)EtmrChannelId));
-        LevelTimes = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_NPCNTV_OFFSET32((uint32)EtmrChannelId)) +    /*PRQA S 0404*/
-                     ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_PPCNTV_OFFSET32((uint32)EtmrChannelId));
+        McOverFlowTimes1 = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_NPCNTN_OFFSET32((uint32)EtmrChannelId));   /*PRQA S 0404*/
+        McOverFlowTimes2 = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_PPCNTN_OFFSET32((uint32)EtmrChannelId));   /*PRQA S 0404*/
+        LevelTimes1 = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_NPCNTV_OFFSET32((uint32)EtmrChannelId));    /*PRQA S 0404*/
+        LevelTimes2 = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_PPCNTV_OFFSET32((uint32)EtmrChannelId));    /*PRQA S 0404*/
 #endif
         Icu_gChannelInfo[Channel].EdgeNumber = FULL_MASK;
       }
@@ -585,10 +579,11 @@ ICU_FUNC Icu_ValueType Icu_Lld_Etmr_GetTimeElapsed(Icu_ChannelType Channel)
           McOverFlowTimes = Icu_gChannelInfo[Channel].HighLevelMcOverflowTimes;
           LevelTimes = Icu_gChannelInfo[Channel].HighLevelTimes;
 #else
-          McOverFlowTimes = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_NPCNTN_OFFSET32((uint32)EtmrChannelId)) +   /*PRQA S 0404*/
-                            ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_PPCNTN_OFFSET32((uint32)EtmrChannelId));
-          LevelTimes = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_NPCNTV_OFFSET32((uint32)EtmrChannelId)) +        /*PRQA S 0404*/
-                       ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_PPCNTV_OFFSET32((uint32)EtmrChannelId));
+          McOverFlowTimes1 = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_NPCNTN_OFFSET32((uint32)EtmrChannelId));  /*PRQA S 0404*/
+          McOverFlowTimes2 = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_PPCNTN_OFFSET32((uint32)EtmrChannelId));  /*PRQA S 0404*/
+          LevelTimes1 = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_NPCNTV_OFFSET32((uint32)EtmrChannelId));  /*PRQA S 0404*/
+          LevelTimes2 = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_CH_PPCNTV_OFFSET32((uint32)EtmrChannelId));  /*PRQA S 0404*/
+                       
 #endif
           Icu_gChannelInfo[Channel].EdgeNumber = 2U;
         }
@@ -601,13 +596,13 @@ ICU_FUNC Icu_ValueType Icu_Lld_Etmr_GetTimeElapsed(Icu_ChannelType Channel)
     }
   }
   /* Calculate high or low level elapsed time */
-  if (McOverFlowTimes != 0U)
+  if ((McOverFlowTimes1 + McOverFlowTimes2) != 0U)
   {
-    ReturnValue = (McOverFlowTimes * Icu_gChannelInfo[Channel].PeriodTime) + LevelTimes;
+    ReturnValue = ((McOverFlowTimes1 + McOverFlowTimes2) * Icu_gChannelInfo[Channel].PeriodTime) + LevelTimes1 + LevelTimes2;
   }
   else
   {
-    ReturnValue = Icu_gChannelInfo[Channel].PeriodTime + LevelTimes;
+    ReturnValue = Icu_gChannelInfo[Channel].PeriodTime + LevelTimes1 + LevelTimes2;
   }
   SchM_Exit_Icu_ICU_EXCLUSIVE_AREA_23();
   return ReturnValue;
@@ -626,10 +621,6 @@ ICU_FUNC void Icu_Lld_Etmr_GetDutyCycleValues(Icu_ChannelType Channel, Icu_DutyC
   IcuEtmrInstanceType EtmrInstanceId = (IcuEtmrInstanceType)ChannelConfigPtr.IcuHwIpInstance;
   uint32 EtmrBaseAddress = (uint32)Icu_Etmr_Common_gBaseAddress32[EtmrInstanceId];
   Icu_gChannelInfo[Channel].PeriodTime = ICU_ETMR_REG_ADDR32_READ(EtmrBaseAddress + eTMR_MOD_OFFSET32) + 1U;
-  HighLevelMcOverFlowTimes = Icu_gChannelInfo[Channel].HighLevelMcOverflowTimes;
-  LowLevelMcOverFlowTimes = Icu_gChannelInfo[Channel].LowLevelMcOverflowTimes;
-  HighLevelActiveTimes = Icu_gChannelInfo[Channel].HighLevelTimes;
-  LowLevelActiveTimes = Icu_gChannelInfo[Channel].LowLevelTimes;
 
   if (ICU_ACTIVE == Icu_gChannelInfo[Channel].InputState)
   {
@@ -640,8 +631,8 @@ ICU_FUNC void Icu_Lld_Etmr_GetDutyCycleValues(Icu_ChannelType Channel, Icu_DutyC
       /* MR12 RULE 1.3 VIOLATION: Two volatile variables cannot be evaluated directly.
            * In this specific case, need to compare the values of two registers, thus, couldn't adhere to M3CM Rule-1.3
            */
-      LevelActiveTimes = HighLevelActiveTimes + (HighLevelMcOverFlowTimes * Icu_gChannelInfo[Channel].PeriodTime);    /*PRQA S 0404*/
-      McOverFlowTimes = LowLevelMcOverFlowTimes + HighLevelMcOverFlowTimes;   /*PRQA S 0404*/
+      LevelActiveTimes = Icu_gChannelInfo[Channel].HighLevelTimes + (Icu_gChannelInfo[Channel].HighLevelMcOverflowTimes * Icu_gChannelInfo[Channel].PeriodTime);    /*PRQA S 0404*/
+      McOverFlowTimes = Icu_gChannelInfo[Channel].LowLevelMcOverflowTimes + Icu_gChannelInfo[Channel].HighLevelMcOverflowTimes;   /*PRQA S 0404*/
       (void)McOverFlowTimes;
 
       DutyCycleValues->ActiveTime = LevelActiveTimes;
@@ -653,8 +644,8 @@ ICU_FUNC void Icu_Lld_Etmr_GetDutyCycleValues(Icu_ChannelType Channel, Icu_DutyC
       /* MR12 RULE 1.3 VIOLATION: Two volatile variables cannot be evaluated directly.
            * In this specific case, need to compare the values of two registers, thus, couldn't adhere to M3CM Rule-1.3
            */
-      LevelActiveTimes = LowLevelActiveTimes + (LowLevelMcOverFlowTimes * Icu_gChannelInfo[Channel].PeriodTime);   /*PRQA S 0404*/
-      McOverFlowTimes = LowLevelMcOverFlowTimes + HighLevelMcOverFlowTimes;  /*PRQA S 0404*/
+      LevelActiveTimes = Icu_gChannelInfo[Channel].LowLevelTimes + (Icu_gChannelInfo[Channel].LowLevelMcOverflowTimes * Icu_gChannelInfo[Channel].PeriodTime);   /*PRQA S 0404*/
+      McOverFlowTimes = Icu_gChannelInfo[Channel].LowLevelMcOverflowTimes + Icu_gChannelInfo[Channel].HighLevelMcOverflowTimes;  /*PRQA S 0404*/
       (void)McOverFlowTimes;
 
       DutyCycleValues->ActiveTime = LevelActiveTimes;
@@ -667,16 +658,16 @@ ICU_FUNC void Icu_Lld_Etmr_GetDutyCycleValues(Icu_ChannelType Channel, Icu_DutyC
       /* MR12 RULE 1.3 VIOLATION: Two volatile variables cannot be evaluated directly.
            * In this specific case, need to compare the values of two registers, thus, couldn't adhere to M3CM Rule-1.3
            */
-      LevelActiveTimes = LowLevelActiveTimes + (LowLevelMcOverFlowTimes * Icu_gChannelInfo[Channel].PeriodTime); /*PRQA S 0404*/
+      LevelActiveTimes = Icu_gChannelInfo[Channel].LowLevelTimes + (Icu_gChannelInfo[Channel].LowLevelMcOverflowTimes * Icu_gChannelInfo[Channel].PeriodTime); /*PRQA S 0404*/
       (void)LevelActiveTimes;
 
       DutyCycleValues->ActiveTime = 0U;
       /* MR12 RULE 1.3 VIOLATION: Two volatile variables cannot be evaluated directly.
            * In this specific case, need to compare the values of two registers, thus, couldn't adhere to M3CM Rule-1.3
            */
-      McOverFlowTimes = LowLevelMcOverFlowTimes + HighLevelMcOverFlowTimes;   /*PRQA S 0404*/
+      McOverFlowTimes = Icu_gChannelInfo[Channel].LowLevelMcOverflowTimes + Icu_gChannelInfo[Channel].HighLevelMcOverflowTimes;   /*PRQA S 0404*/
       DutyCycleValues->PeriodTime = (McOverFlowTimes * Icu_gChannelInfo[Channel].PeriodTime) +  /*PRQA S 0404*/
-                                    HighLevelActiveTimes + LowLevelActiveTimes;
+                                    Icu_gChannelInfo[Channel].HighLevelTimes + Icu_gChannelInfo[Channel].LowLevelTimes;
     }
     else if (ICU_DUTY_CYCLE == ChannelConfigPtr.SignalMeasurementProperty)
     {
@@ -690,11 +681,11 @@ ICU_FUNC void Icu_Lld_Etmr_GetDutyCycleValues(Icu_ChannelType Channel, Icu_DutyC
         /* MR12 RULE 1.3 VIOLATION: Two volatile variables cannot be evaluated directly.
                  * In this specific case, need to compare the values of two registers, thus, couldn't adhere to M3CM Rule-1.3
                  */
-        LevelActiveTimes = HighLevelActiveTimes + (HighLevelMcOverFlowTimes * Icu_gChannelInfo[Channel].PeriodTime); /*PRQA S 0404*/
+        LevelActiveTimes = Icu_gChannelInfo[Channel].HighLevelTimes + (Icu_gChannelInfo[Channel].HighLevelMcOverflowTimes * Icu_gChannelInfo[Channel].PeriodTime); /*PRQA S 0404*/
       }
       else if (ICU_FALLING_EDGE == Icu_gChannelInfo[Channel].StartEdge)
       {
-        LevelActiveTimes = LowLevelActiveTimes + (LowLevelMcOverFlowTimes * Icu_gChannelInfo[Channel].PeriodTime); /*PRQA S 0404*/
+        LevelActiveTimes = Icu_gChannelInfo[Channel].LowLevelTimes + (Icu_gChannelInfo[Channel].LowLevelMcOverflowTimes * Icu_gChannelInfo[Channel].PeriodTime); /*PRQA S 0404*/
       }
       else
       {
@@ -704,17 +695,17 @@ ICU_FUNC void Icu_Lld_Etmr_GetDutyCycleValues(Icu_ChannelType Channel, Icu_DutyC
       /* MR12 RULE 1.3 VIOLATION: Two volatile variables cannot be evaluated directly.
            * In this specific case, need to compare the values of two registers, thus, couldn't adhere to M3CM Rule-1.3
            */
-      McOverFlowTimes = LowLevelMcOverFlowTimes + HighLevelMcOverFlowTimes;  /*PRQA S 0404*/
+      McOverFlowTimes = Icu_gChannelInfo[Channel].LowLevelMcOverflowTimes + Icu_gChannelInfo[Channel].HighLevelMcOverflowTimes;  /*PRQA S 0404*/
       /* MR12 RULE 1.3 VIOLATION: Two volatile variables cannot be evaluated directly.
            * In this specific case, need to compare the values of two registers, thus, couldn't adhere to M3CM Rule-1.3
            */
       DutyCycleValues->PeriodTime = (McOverFlowTimes * Icu_gChannelInfo[Channel].PeriodTime) +  /*PRQA S 0404*/
-                                    HighLevelActiveTimes + LowLevelActiveTimes;
+                                    Icu_gChannelInfo[Channel].HighLevelTimes + Icu_gChannelInfo[Channel].LowLevelTimes;
     }
     else
     {
-      HighLevelActiveTimes = 0U;
-      LowLevelActiveTimes = 0U;
+      Icu_gChannelInfo[Channel].HighLevelTimes = 0U;
+      Icu_gChannelInfo[Channel].LowLevelTimes = 0U;
     }
     Icu_gChannelInfo[Channel].HighLevelMcOverflowTimes = 0U;
     Icu_gChannelInfo[Channel].LowLevelMcOverflowTimes = 0U;
