]> rtime.felk.cvut.cz Git - arc.git/commitdiff
Work on MCU port for HCS12
authorMattias Ekberg <mattias.ekberg@arccore.com>
Tue, 2 Mar 2010 10:34:38 +0000 (11:34 +0100)
committerMattias Ekberg <mattias.ekberg@arccore.com>
Tue, 2 Mar 2010 10:34:38 +0000 (11:34 +0100)
arch/hc1x/hcs12d/drivers/Cpu.h [new file with mode: 0644]
arch/hc1x/hcs12d/drivers/Mcu.c
boards/hcs12_elmicro_card12/config/Mcu_Cfg.c
boards/hcs12_elmicro_card12/config/Mcu_Cfg.h
include/Mcu.h

diff --git a/arch/hc1x/hcs12d/drivers/Cpu.h b/arch/hc1x/hcs12d/drivers/Cpu.h
new file mode 100644 (file)
index 0000000..f76961f
--- /dev/null
@@ -0,0 +1,22 @@
+/*\r
+ * cpu.h\r
+ *\r
+ *  Created on: 8 feb 2010\r
+ *      Author: mahi\r
+ */\r
+\r
+#ifndef CPU_H_\r
+#define CPU_H_\r
+\r
+#define Irq_Disable()\r
+#define Irq_Enable()\r
+\r
+#define Irq_SuspendAll()       Irq_Disable()\r
+#define Irq_ResumeAll()        Irq_Enable()\r
+\r
+#define Irq_SuspendOs()        Irq_Disable()\r
+#define Irq_ResumeOs()         Irq_Enable()\r
+\r
+\r
+\r
+#endif /* CPU_H_ */\r
index c676cae206015379cb01f8aaf0b31597e41672a9..22d31f65c3bad830c65a6c21340b2447886c9362 100644 (file)
 #include <stdint.h>
 #include "Std_Types.h"\r
 #include "Mcu.h"\r
-#include "Det.h"\r
-#include <assert.h>\r
+//#include "Det.h"          // TODO Mattias restore\r
+//#include <assert.h>       // TODO Mattias restore\r
 #include "Cpu.h"\r
-#include <string.h>\r
-#include "Ramlog.h"\r
+#include <string.h>
+//#include "hcs12.h"\r
+//#include "Ramlog.h"       // TODO Mattias restore\r
 \r
 //#define USE_TRACE 1\r
 //#define USE_DEBUG 1\r
-#include "Trace.h"\r
+//#include "Trace.h"        // TODO Mattias restore
+
+
+#define PORTIO_8               *(volatile unsigned char *)
+#define IO_BASE        0
+#define  CLKSEL    PORTIO_8(IO_BASE + 0x39)   /* clock select register */
+#define  PLLCTL    PORTIO_8(IO_BASE + 0x3a)   /* PLL control register */
+#define  CRGFLG    PORTIO_8(IO_BASE + 0x37)   /* clock generator flag register */
+#define  SYNR      PORTIO_8(IO_BASE + 0x34)   /* synthesizer register */
+#define  REFDV     PORTIO_8(IO_BASE + 0x35)   /* reference divider register */
+
+
+#define BM_RTIF                0x80
+#define BM_PORF                0x40
+//#define reserved     0x20
+#define BM_LOCKIF      0x10
+#define BM_LOCK                0x08
+#define BM_TRACK       0x04
+#define BM_SCMIF       0x02
+#define BM_SCM         0x01
+
+// Bits in CRGINT:
+#define BM_RTIE                0x80
+//#define reserved     0x40
+//#define reserved     0x20
+#define BM_LOCKIE      0x10
+//#define reserved     0x08
+//#define reserved     0x04
+#define BM_SCMIE       0x02
+//#define reserved     0x01
+
+// Bits in CLKSEL:
+#define BM_PLLSEL      0x80
+#define BM_PSTP                0x40
+#define BM_SYSWAI      0x20
+#define BM_ROAWAI      0x10
+#define BM_PLLWAI      0x08
+#define BM_CWAI                0x04
+#define BM_RTIWAI      0x02
+#define BM_COPWAI      0x01
+
+// Bits in PLLCTL:
+#define BM_CME         0x80
+#define BM_PLLON       0x40
+#define BM_AUTO                0x20
+#define BM_ACQ         0x10
+//#define reserved     0x08
+#define BM_PRE         0x04
+#define BM_PCE         0x02
+#define BM_SCME                0x01
+
+
+#define S12_REFCLK      8000000                // PLL internal reference clock
+\r
 \r
 typedef struct {\r
        uint32 lossOfLockCnt;\r
@@ -93,100 +147,6 @@ static void Mcu_LossOfLock( void  ) {
 }\r
 #endif
 \r
-#define SPR_PIR 286\r
-#define SPR_PVR 287\r
-\r
-#define CORE_PVR_E200Z1   0x81440000UL\r
-#define CORE_PVR_E200Z0   0x81710000UL\r
-\r
-\r
-typedef struct {\r
-  char *name;\r
-  uint32 pvr;\r
-} core_info_t;\r
-\r
-typedef struct {\r
-  char *name;\r
-  uint32 pvr;\r
-} cpu_info_t;\r
-\r
-cpu_info_t cpu_info_list[] = {\r
-    {\r
-    .name = "MPC5516",\r
-    .pvr = CORE_PVR_E200Z1,\r
-    },\r
-    {\r
-    .name = "MPC5516",\r
-    .pvr = CORE_PVR_E200Z0,\r
-    },\r
-};\r
-\r
-core_info_t core_info_list[] = {\r
-    {\r
-    .name = "CORE_E200Z1",\r
-    .pvr = CORE_PVR_E200Z1,\r
-    },\r
-    {\r
-    .name = "CORE_E200Z1",\r
-    .pvr = CORE_PVR_E200Z1,\r
-    },\r
-};\r
-\r
-// TODO: move\r
-#define ARRAY_SIZE(_x)  (sizeof(_x)/sizeof((_x)[0]))\r
-\r
-static cpu_info_t *Mcu_IdentifyCpu(uint32 pvr)\r
-{\r
-  int i;\r
-  for (i = 0; i < ARRAY_SIZE(cpu_info_list); i++) {\r
-    if (cpu_info_list[i].pvr == pvr) {\r
-      return &cpu_info_list[i];\r
-    }\r
-  }\r
-\r
-  return NULL;\r
-}\r
-\r
-static core_info_t *Mcu_IdentifyCore(uint32 pvr)\r
-{\r
-  int i;\r
-  for (i = 0; i < ARRAY_SIZE(core_info_list); i++) {\r
-    if (core_info_list[i].pvr == pvr) {\r
-      return &core_info_list[i];\r
-    }\r
-  }\r
-\r
-  return NULL;\r
-}\r
-\r
-\r
-static uint32 Mcu_CheckCpu( void ) {\r
-\r
-  uint32 pvr;\r
-  //uint32 pir;\r
-  cpu_info_t *cpuType;\r
-  core_info_t *coreType;\r
-\r
-  // We have to registers to read here, PIR and PVR\r
-\r
-#if 0\r
-  pir = get_spr(SPR_PIR);\r
-  pvr = get_spr(SPR_PVR);\r
-#endif\r
-\r
-  cpuType = Mcu_IdentifyCpu(pvr);\r
-  coreType = Mcu_IdentifyCore(pvr);\r
-\r
-  if( (cpuType == NULL) || (coreType == NULL) ) {\r
-    // Just hang\r
-    while(1);\r
-  }\r
-\r
-  //DEBUG(DEBUG_HIGH,"/drivers/mcu: Cpu:  %s( 0x%08x )\n",cpuType->name,pvr);\r
-  //DEBUG(DEBUG_HIGH,"/drivers/mcu: Core: %s( 0x%08x )\n",coreType->name,pvr);\r
-\r
-  return 0;\r
-}\r
 \r
 \r
 //-------------------------------------------------------------------\r
@@ -212,7 +172,7 @@ void Mcu_Init(const Mcu_ConfigType *configPtr)
 \r
 void Mcu_DeInit()\r
 {\r
-  Mcu_Global.initRun = FALSE; // Very simple Deinit. Should we do more?\r
+  Mcu_Global.initRun = FALSE;\r
 }\r
 \r
 //-------------------------------------------------------------------\r
@@ -238,55 +198,34 @@ Std_ReturnType Mcu_InitClock(const Mcu_ClockType ClockSetting)
 \r
   Mcu_Global.clockSetting = ClockSetting;\r
   clockSettingsPtr = &Mcu_Global.config->McuClockSettingConfig[Mcu_Global.clockSetting];\r
-\r
-\r
-\r
-#if 0\r
-  /* 5516clock info:\r
-   * Fsys - System frequency ( CPU + all periperals? )\r
-   *\r
-   *  Fsys = EXTAL_FREQ *(  (emfd+16) / ( (eprediv+1) * ( erfd+1 )) ) )\r
-   */\r
-  // Check ranges...\r
-  assert((clockSettingsPtr->PllEmfd>=32) && (clockSettingsPtr->PllEmfd<=132));\r
-  assert( (clockSettingsPtr->PllEprediv!=6) &&\r
-          (clockSettingsPtr->PllEprediv!=8) &&\r
-          (clockSettingsPtr->PllEprediv<10) );\r
-  assert( clockSettingsPtr->PllErfd & 1); // Must be odd\r
-#endif\r
-\r
-\r
-\r
-#if defined(USE_DEBUG)\r
-  {\r
-    uint32    extal = Mcu_Global.config->McuClockSettingConfig[Mcu_Global.clockSetting].McuClockReferencePoint;\r
-    uint32    f_sys;\r
-\r
-    f_sys = CALC_SYSTEM_CLOCK( extal,\r
-        clockSettingsPtr->PllEmfd,\r
-        clockSettingsPtr->PllEprediv,\r
-        clockSettingsPtr->PllErfd );\r
-\r
-    //DEBUG(DEBUG_HIGH,"/drivers/mcu: F_sys will be:%08d Hz\n",f_sys);\r
-  }\r
-#endif\r
-\r
-#if defined(CFG_MPC5516)\r
-  // External crystal PLL mode.\r
-  FMPLL.ESYNCR1.B.CLKCFG = 7; //TODO: Hur ställa detta för 5567?\r
-\r
-  // Write pll parameters.\r
-  FMPLL.ESYNCR1.B.EPREDIV = clockSettingsPtr->PllEprediv;\r
-  FMPLL.ESYNCR1.B.EMFD    = clockSettingsPtr->PllEmfd;\r
-  FMPLL.ESYNCR2.B.ERFD    = clockSettingsPtr->PllErfd;\r
-\r
-  // Connect SYSCLK to FMPLL\r
-  SIU.SYSCLK.B.SYSCLKSEL = SYSCLOCK_SELECT_PLL;\r
-#elif defined(CFG_MPC5554) || defined(CFG_MPC5567)\r
-  FMPLL.SYNCR.B.PREDIV         = clockSettingsPtr->PllEprediv;\r
-  FMPLL.SYNCR.B.MFD            = clockSettingsPtr->PllEmfd;\r
-  FMPLL.SYNCR.B.RFD            = clockSettingsPtr->PllErfd;\r
-#endif\r
+
+/*
+#define S12_OSCCLK     16000000                // input frequency from Xtal/Osc
+#define S12_PLLCLK     48000000                // desired output frequency of PLL
+*/
+// PLL clock generation formula, according to CRG Block User Guide:
+// PLLCLK = OSCCLK * 2(SYNR+1) / (REFDV+1)
+
+//#define S12_ECLK     (S12_PLLCLK/2)  // final bus clock frequency (ECLK)
+//#define S12_ECLK     (S12_OSCCLK/2)  // bus clock if PLL not in use / off
+
+  uint8 s12_refdv = (uint8)(clockSettingsPtr->McuClockReferencePointFrequency / S12_REFCLK) - 1;
+  uint8 s12_synr  = (uint8)(clockSettingsPtr->PllClock / (2 * S12_REFCLK) ) -1;\r
+
+  //PLLCLK = 2 * OSCCLK * (SYNR + 1) / (REFDV + 1)
+
+  CLKSEL &= ~BM_PLLSEL; // Turn off PLL
+  PLLCTL |= BM_PLLON+BM_AUTO;  // Enable PLL module, Auto Mode
+
+  REFDV = s12_refdv;  // Set reference divider
+  SYNR = s12_synr;  // Set synthesizer multiplier
+
+  // the following dummy write has no effect except consuming some cycles,
+  // this is a workaround for erratum MUCTS00174 (mask set 0K36N only)
+  // CRGFLG = 0;
+
+  while (Mcu_GetPllStatus() != MCU_PLL_LOCKED) ;
+  CLKSEL |= BM_PLLSEL; // Switch to PLL clock
 \r
   return E_OK;\r
 }\r
@@ -309,26 +248,12 @@ Mcu_PllStatusType Mcu_GetPllStatus(void)
   VALIDATE_W_RV( ( 1 == Mcu_Global.initRun ), MCU_GETPLLSTATUS_SERVICE_ID, MCU_E_UNINIT, MCU_PLL_STATUS_UNDEFINED );\r
   Mcu_PllStatusType rv;\r
 
-#if 0\r
-  if( !SIMULATOR() )\r
-  {\r
-#if 0\r
-    if ( !FMPLL.SYNSR.B.LOCK )\r
-    {\r
-      rv = MCU_PLL_UNLOCKED;\r
-    } else\r
-    {\r
-      rv = MCU_PLL_LOCKED;\r
-    }\r
-#endif\r
-  }\r
-  else\r
-  {\r
-    /* We are running on instruction set simulator. PLL is then always in sync... */\r
-    rv = MCU_PLL_LOCKED;\r
-  }\r
-#endif
-\r
+  if ((CRGFLG & BM_LOCK) == 0) {
+         rv = MCU_PLL_UNLOCKED;
+  } else {
+         rv = MCU_PLL_LOCKED;
+  }
+
   return rv;\r
 }\r
 \r
@@ -377,7 +302,9 @@ Mcu_RawResetType Mcu_GetResetRawValue(void)
 #if ( MCU_PERFORM_RESET_API == STD_ON )\r
 void Mcu_PerformReset(void)\r
 {\r
-  VALIDATE( ( 1 == Mcu_Global.initRun ), MCU_PERFORMRESET_SERVICE_ID, MCU_E_UNINIT );\r
+  VALIDATE( ( 1 == Mcu_Global.initRun ), MCU_PERFORMRESET_SERVICE_ID, MCU_E_UNINIT );
+
+  /* NOT SUPPORTED */\r
 }\r
 #endif\r
 \r
@@ -400,20 +327,7 @@ void Mcu_SetMode(const Mcu_ModeType McuMode)
  */\r
 uint32_t McuE_GetSystemClock(void)\r
 {\r
-  /*\r
-   * System clock calculation\r
-   *\r
-   */
-
-  // TODO: This of course wrong....\r
-  uint32_t f_sys = 72000000UL;\r
-#if 0\r
-  uint32  extal = Mcu_Global.config->McuClockSettingConfig[Mcu_Global.clockSetting].McuClockReferencePoint;\r
-\r
-  f_sys =  CALC_SYSTEM_CLOCK(extal,emfd,eprediv,erfd);\r
-#endif\r
-\r
-//  f_sys = extal * (emfd+16) / ( (eprediv+1) * ( erfd+1 ));\r
+  uint32_t f_sys = Mcu_Global.config->McuClockSettingConfig[Mcu_Global.clockSetting].McuClockReferencePointFrequency * 2 * (SYNR + 1) / ( REFDV+1);\r
   return f_sys;\r
 }\r
 \r
@@ -456,12 +370,3 @@ void Mcu_ConfigureFlash(void)
 \r
 }\r
 \r
-void McuE_EnableInterrupts(void)\r
-{\r
-  Irq_Enable();\r
-}\r
-\r
-void McuE_DisableInterrupts(void)\r
-{\r
-  Irq_Disable();\r
-}\r
index 8562d0d5a1a64c24b3cd94d149c3d402433c7622..4ac0e3d5f91798ce7154c182734310d4ef418e80 100644 (file)
@@ -35,16 +35,8 @@ Mcu_RamSectorSettingConfigType Mcu_RamSectorSettingConfigData[] = {
 Mcu_ClockSettingConfigType Mcu_ClockSettingConfigData[] =\r
 {\r
   {\r
-    .McuClockReferencePoint = 8000000UL,\r
-    .PllEprediv = 1,\r
-    .PllEmfd    = 104,\r
-    .PllErfd    = 5,\r
-  },\r
-  {\r
-    .McuClockReferencePoint = 16000000UL,\r
-    .PllEprediv = 3,\r
-    .PllEmfd    = 83,\r
-    .PllErfd    = 5,\r
+    .McuClockReferencePointFrequency = 16000000,\r
+    .PllClock = 16000000\r
   }\r
 };\r
 \r
@@ -55,37 +47,15 @@ Mcu_ClockSettingConfigType Mcu_ClockSettingConfigData[] =
   //  by HW the setting should be disabled.\r
   .McuClockSrcFailureNotification = 0,\r
 \r
-  //  This parameter shall represent the number of Modes available for the\r
-  //  MCU. calculationFormula = Number of configured McuModeSettingConf\r
-  .McuNumberOfMcuModes = 1, /* NOT USED */\r
-\r
   //  This parameter shall represent the number of RAM sectors available for\r
   //  the MCU. calculationFormula = Number of configured McuRamSectorSet-\r
   //  tingConf\r
   .McuRamSectors = 1,\r
 \r
-  //  This parameter shall represent the number of clock setting available for\r
-  //  the MCU.\r
   .McuClockSettings = MCU_NBR_OF_CLOCKS,\r
 \r
-  //  This parameter relates to the MCU specific reset configuration. This ap-\r
-  //  plies to the function Mcu_PerformReset, which performs a microcontroller\r
-  //  reset using the hardware feature of the microcontroller.\r
-  .McuResetSetting = 0, /* NOT USED */\r
-\r
-  //  This container contains the configuration (parameters) for the\r
-  //  Clock settings of the MCU. Please see MCU031 for more in-\r
-  //  formation on the MCU clock settings.\r
   .McuClockSettingConfig = &Mcu_ClockSettingConfigData[0],\r
 \r
-  //  This container contains the configuration (parameters) for the\r
-  //  Mode setting of the MCU. Please see MCU035 for more infor-\r
-  //  mation on the MCU mode settings.\r
-  .McuModeSettingConfig = 0,\r
-\r
-  //  This container contains the configuration (parameters) for the\r
-  //  RAM Sector setting. Please see MCU030 for more information\r
-  //  on RAM sec-tor settings.\r
   .McuRamSectorSettingConfig = &Mcu_RamSectorSettingConfigData[0],\r
   },\r
 };\r
index a0c248c78b55e041fc5fb17f037a36e01cff6a2b..0132d6a67cd57efb39ecaf98f5b26a7aa3f81dec 100644 (file)
 
 
 #ifndef MCU_CFG_H_\r
-#define MCU_CFG_H_\r
-\r
+#define MCU_CFG_H_
+
+#define CFG_MC912DG128A
 \r
-#define MCU_DEV_ERROR_DETECT   STD_ON\r
-// Preprocessor switch to enable / disable the use of the function\r
-// Mcu_PerformReset()\r
+#define MCU_DEV_ERROR_DETECT   STD_OFF\r
 #define MCU_PERFORM_RESET_API  STD_ON\r
-\r
 #define MCU_VERSION_INFO_API   STD_ON\r
-\r
-#include "Std_Types.h"\r
-\r
-/* FMPLL modes( atleast in 5553/5554 ) */\r
-\r
-typedef enum {\r
-       MCU_FMPLL_BYPASS = 0,\r
-       MCU_FMPLL_EXTERNAL_REF,\r
-       MCU_FMPLL_EXTERNAL_REF_NO_FM,\r
-       MCU_FMPLL_DUAL_CONTROLLER_MODE,\r
-} Mcu_FMPLLmode_t;\r
+
 \r
 typedef enum {\r
-  MCU_CLOCKTYPE_EXT_REF_80MHZ = 0,\r
-  MCU_CLOCKTYPE_EXT_REF_66MHZ,\r
+  MCU_CLOCKTYPE_EXT_REF_16MHZ = 0,\r
   MCU_NBR_OF_CLOCKS,\r
-       //MCU_CLOCKTYPE_EXTERNAL_REF,\r
-       //MCU_CLOCKTYPE_EXTERNAL_REF_NO_FM,\r
-       //MCU_CLOCKTYPE_DUAL_CONTROLLER_MODE,\r
 } Mcu_ClockType;\r
 \r
-typedef struct {\r
-       // This container defines a reference point in the Mcu Clock tree\r
-       // It defines the frequency which then can be used by other modules\r
-       // as an input value. Lower multiplicity is 1, as even in the\r
-       // simplest case (only one frequency is used), there is one\r
-       // frequency to be defined.\r
-       uint32 McuClockReferencePoint;\r
-\r
-  // Phase locked loop configuration parameters for MPC551x.\r
-  uint8 PllEprediv;\r
-  uint8 PllEmfd;\r
-  uint8 PllErfd;\r
-} Mcu_ClockSettingConfigType;\r
-\r
-typedef struct {\r
-       // The parameter represents the MCU Mode settings\r
-       uint32 McuMode;\r
-} Mcu_ModeSettingConfigType;\r
-\r
-typedef struct {\r
-       // This parameter shall represent the Data pre-setting to be initialized\r
-       uint32 McuRamDefaultValue;\r
-\r
-       // This parameter shall represent the MCU RAM section base address\r
-       uint32 McuRamSectionBaseAddress;\r
-\r
-       // This parameter shall represent the MCU RAM Section size\r
-       uint32 McuRamSectionSize;\r
-\r
-} Mcu_RamSectorSettingConfigType;\r
-\r
-\r
-// This container defines a reference point in the Mcu Clock tree. It defines\r
-// the frequency which then can be used by other modules as an input value.\r
-// Lower multiplicity is 1, as even in the simplest case (only one frequency is\r
-// used), there is one frequency to be defined.\r
-typedef struct {\r
-\r
-       //      This is the frequency for the specific instance of the McuClockReference-\r
-       //      Point container. It shall be givn in Hz.\r
-       uint32 McuClockReferencePointFrequency;\r
-\r
-} Mcu_ClockReferencePointType;\r
-\r
-typedef struct {\r
-       //      Enables/Disables clock failure notification. In case this feature is not supported\r
-       //      by HW the setting should be disabled.\r
-       uint8   McuClockSrcFailureNotification;\r
-\r
-       //      This parameter shall represent the number of Modes available for the\r
-       //      MCU. calculationFormula = Number of configured McuModeSettingConf\r
-       uint8 McuNumberOfMcuModes;\r
-\r
-  //  This parameter shall represent the number of RAM sectors available for\r
-  //  the MCU. calculationFormula = Number of configured McuRamSectorSet-\r
-  //  tingConf\r
-  uint8 McuRamSectors;\r
-\r
-  //  This parameter shall represent the number of clock setting available for\r
-  //  the MCU.\r
-  uint8 McuClockSettings;\r
-\r
-  // This parameter defines the default clock settings that should be used\r
-  // It is an index into the McuClockSettingsConfig\r
-  Mcu_ClockType McuDefaultClockSettings;\r
-\r
-       //      This parameter relates to the MCU specific reset configuration. This ap-\r
-       //      plies to the function Mcu_PerformReset, which performs a microcontroller\r
-       //      reset using the hardware feature of the microcontroller.\r
-       uint32 McuResetSetting;\r
-\r
-       //      This container contains the configuration (parameters) for the\r
-       //      Clock settings of the MCU. Please see MCU031 for more in-\r
-       //      formation on the MCU clock settings.\r
-       Mcu_ClockSettingConfigType * McuClockSettingConfig;\r
-\r
-       //      This container contains the configuration (parameters) for the\r
-       //      Mode setting of the MCU. Please see MCU035 for more information\r
-       //  on the MCU mode settings.\r
-       Mcu_ModeSettingConfigType  *McuModeSettingConfig;\r
-\r
-       //      This container contains the configuration (parameters) for the\r
-       //      RAM Sector setting. Please see MCU030 for more information\r
-       //      on RAM sec-tor settings.\r
-       Mcu_RamSectorSettingConfigType *McuRamSectorSettingConfig;\r
-\r
-} Mcu_ConfigType;\r
-\r
-extern const Mcu_ConfigType McuConfigData[];\r
-\r
 #define MCU_DEFAULT_CONFIG McuConfigData[0]\r
 \r
 #endif /*MCU_CFG_H_*/\r
index 56130efdd1c7ed6794b3eb5a6b3aeff396cc0bf8..d8780ba106ebe2cccf77d3e5b952b618105baa1b 100644 (file)
@@ -28,7 +28,9 @@
 #define MCU_SW_PATCH_VERSION   0
 \r
 #include "Cpu.h"\r
-#include "irq_types.h"\r
+#include "irq_types.h"
+#include "Std_Types.h"
+#include "Mcu_Cfg.h"\r
 //#include "mpc55xx_aos.h"\r
 \r
 /** @name Service id's */
 /* Specific return values */\r
 #define MCU_GETRESETRAWVALUE_NORESETREG_RV  0x00 /**< MCU006 */
 #define MCU_GETRESETRAWVALUE_UNINIT_RV      0xffffffff /**< MCU135 */
+
+#if defined(CFG_5553)
+/* FMPLL modes( atleast in 5553/5554 ) */
+typedef enum {
+       MCU_FMPLL_BYPASS = 0,
+       MCU_FMPLL_EXTERNAL_REF,
+       MCU_FMPLL_EXTERNAL_REF_NO_FM,
+       MCU_FMPLL_DUAL_CONTROLLER_MODE,
+} Mcu_FMPLLmode_t;
+#endif
 \r
 typedef enum {\r
        MCU_PLL_LOCKED,\r
@@ -81,9 +93,84 @@ typedef enum {
        MCU_WATCHDOG_RESET,\r
        MCU_SW_RESET,\r
        MCU_RESET_UNDEFINED\r
-} Mcu_ResetType;\r
+} Mcu_ResetType;
+
+typedef struct {
+       //      This is the frequency for the specific instance of the McuClockReference-
+       //      Point container. It shall be givn in Hz.
+       uint32 McuClockReferencePointFrequency;
+
+#if defined(CFG_MC912DG128A)
+       uint32 PllClock;
+
+#elif defined(CFG_MPC5516)
+       // Phase locked loop configuration parameters for MPC551x.
+       uint8 PllEprediv;
+       uint8 PllEmfd;
+       uint8 PllErfd;
+#endif
+
+} Mcu_ClockSettingConfigType;
+
+typedef struct {
+       // This parameter shall represent the Data pre-setting to be initialized
+       uint32 McuRamDefaultValue;
+
+       // This parameter shall represent the MCU RAM section base address
+       uint32 McuRamSectionBaseAddress;
+
+       // This parameter shall represent the MCU RAM Section size
+       uint32 McuRamSectionSize;
+
+} Mcu_RamSectorSettingConfigType;
+
+typedef struct {
+       //      Enables/Disables clock failure notification. In case this feature is not supported
+       //      by HW the setting should be disabled.
+       uint8   McuClockSrcFailureNotification;
+
+       //      This parameter shall represent the number of Modes available for the
+       //      MCU. calculationFormula = Number of configured McuModeSettingConf
+       //uint8 McuNumberOfMcuModes; /* Not supported */
+
+       //  This parameter shall represent the number of RAM sectors available for
+       //  the MCU. calculationFormula = Number of configured McuRamSectorSet-
+       //  tingConf
+       uint8 McuRamSectors;
+
+       //  This parameter shall represent the number of clock setting available for
+       //  the MCU.
+       uint8 McuClockSettings;
+
+       // This parameter defines the default clock settings that should be used
+       // It is an index into the McuClockSettingsConfig
+       Mcu_ClockType McuDefaultClockSettings;
+
+       //      This parameter relates to the MCU specific reset configuration. This ap-
+       //      plies to the function Mcu_PerformReset, which performs a microcontroller
+       //      reset using the hardware feature of the microcontroller.
+       //uint32 McuResetSetting;
+
+       //      This container contains the configuration (parameters) for the
+       //      Clock settings of the MCU. Please see MCU031 for more in-
+       //      formation on the MCU clock settings.
+       Mcu_ClockSettingConfigType * McuClockSettingConfig;
+
+       //      This container contains the configuration (parameters) for the
+       //      Mode setting of the MCU. Please see MCU035 for more information
+       //  on the MCU mode settings.
+       //Mcu_ModeSettingConfigType  *McuModeSettingConfig;
+
+       //      This container contains the configuration (parameters) for the
+       //      RAM Sector setting. Please see MCU030 for more information
+       //      on RAM sec-tor settings.
+       Mcu_RamSectorSettingConfigType *McuRamSectorSettingConfig;
+
+} Mcu_ConfigType;
+
+extern const Mcu_ConfigType McuConfigData[];\r
+\r
 \r
-#include "Mcu_Cfg.h"\r
 \r
 void Mcu_Init( const Mcu_ConfigType *configPtr );\r
 void Mcu_DeInit();\r
@@ -121,8 +208,6 @@ uint32_t McuE_GetPeripheralClock( McuE_PeriperalClock_t type );
 #endif\r
 imask_t McuE_EnterCriticalSection(void);\r
 void McuE_ExitCriticalSection(imask_t old_state);\r
-void McuE_EnableInterrupts(void);\r
-void McuE_DisableInterrupts(void);\r
 \r
 \r
 \r