]> rtime.felk.cvut.cz Git - arc.git/commitdiff
The MCAL tests now almost pass for Cortex R4.
authormaek <devnull@localhost>
Fri, 26 Nov 2010 13:03:07 +0000 (14:03 +0100)
committermaek <devnull@localhost>
Fri, 26 Nov 2010 13:03:07 +0000 (14:03 +0100)
arch/arm/arm_cr4/drivers/Mcu.c

index baadb453e6aa71248f4cc4d2a1f5985304325779..f953cda26cfe1da3c1524fa8be41169c4053781f 100644 (file)
@@ -373,13 +373,14 @@ Std_ReturnType Mcu_InitClock(const Mcu_ClockType ClockSetting)
 \r
 void Mcu_DistributePllClock(void)\r
 {\r
-\r
+       VALIDATE( ( 1 == Mcu_Global.initRun ), MCU_DISTRIBUTEPLLCLOCK_SERVICE_ID, MCU_E_UNINIT );\r
 }\r
 \r
 //-------------------------------------------------------------------\r
 \r
 \r
 Mcu_PllStatusType Mcu_GetPllStatus(void) {\r
+       VALIDATE_W_RV( ( 1 == Mcu_Global.initRun ), MCU_GETPLLSTATUS_SERVICE_ID, MCU_E_UNINIT, MCU_PLL_STATUS_UNDEFINED );\r
 \r
        if ((systemREG1->CSVSTAT & ((systemREG1->CSDIS ^ 0xFF) & 0xFF)) != ((systemREG1->CSDIS ^ 0xFF) & 0xFF)) {\r
                return MCU_PLL_UNLOCKED;\r
@@ -395,9 +396,38 @@ Mcu_PllStatusType Mcu_GetPllStatus(void) {
  * @return\r
  */\r
 Mcu_ResetType Mcu_GetResetReason(void) {\r
-       // TODO Not supported\r
-       Mcu_ResetType rv = MCU_RESET_UNDEFINED;\r
-       return rv;\r
+       VALIDATE_W_RV( ( 1 == Mcu_Global.initRun ), MCU_GETRESETREASON_SERVICE_ID, MCU_E_UNINIT, MCU_RESET_UNDEFINED );\r
+        Mcu_ResetType reason = MCU_RESET_UNDEFINED;\r
+\r
+       if (systemREG1->SYSESR & 0x00008000) {\r
+               reason = MCU_POWER_ON_RESET;\r
+               systemREG1->SYSESR = 0x00008000;\r
+       } else if (systemREG1->SYSESR & 0x00004000) {\r
+               reason = MCU_OSC_FAILURE_RESET;\r
+               systemREG1->SYSESR = 0x00004000;\r
+       } else if (systemREG1->SYSESR & 0x00002000) {\r
+               reason = MCU_WATCHDOG_RESET;\r
+               systemREG1->SYSESR = 0x00002000;\r
+       } else if (systemREG1->SYSESR & 0x00000020) {\r
+               reason = MCU_CPU_RESET;\r
+               systemREG1->SYSESR = 0x00000020;\r
+       } else if (systemREG1->SYSESR & 0x00000010) {\r
+               reason = MCU_SW_RESET;\r
+               systemREG1->SYSESR = 0x00000010;\r
+       } else if (systemREG1->SYSESR & 0x00000008) {\r
+               reason = MCU_EXT_RESET;\r
+               systemREG1->SYSESR = 0x00000008;\r
+       } else if (systemREG1->SYSESR & 0x00000004) {\r
+               reason = MCU_VSW_RESET;\r
+               systemREG1->SYSESR = 0x00000004;\r
+       } else {\r
+               reason = MCU_RESET_UNDEFINED;\r
+       }\r
+\r
+/* USER CODE BEGIN (23) */\r
+/* USER CODE END */\r
+\r
+       return reason;\r
 }\r
 \r
 //-------------------------------------------------------------------\r
@@ -410,8 +440,13 @@ Mcu_ResetType Mcu_GetResetReason(void) {
  */\r
 \r
 Mcu_RawResetType Mcu_GetResetRawValue(void) {\r
+       VALIDATE_W_RV( ( 1 == Mcu_Global.initRun ), MCU_GETRESETREASON_SERVICE_ID, MCU_E_UNINIT, MCU_GETRESETRAWVALUE_UNINIT_RV );\r
 \r
-       return 0;\r
+       Mcu_RawResetType reason = 0xFFFFFFFF;\r
+       reason = systemREG1->SYSESR & 0x0000E03B;\r
+       systemREG1->SYSESR = 0x0000E03B;\r
+\r
+       return reason;\r
 }\r
 \r
 //-------------------------------------------------------------------\r
@@ -423,7 +458,8 @@ Mcu_RawResetType Mcu_GetResetRawValue(void) {
  */\r
 void Mcu_PerformReset(void)\r
 {\r
-       /* Not supported yet */\r
+       VALIDATE( ( 1 == Mcu_Global.initRun ), MCU_PERFORMRESET_SERVICE_ID, MCU_E_UNINIT );\r
+       systemREG1->SYSECR = 0x00008000;\r
 }\r
 #endif\r
 \r
@@ -431,6 +467,7 @@ void Mcu_PerformReset(void)
 \r
 void Mcu_SetMode(const Mcu_ModeType McuMode)\r
 {\r
+       VALIDATE( ( 1 == Mcu_Global.initRun ), MCU_SETMODE_SERVICE_ID, MCU_E_UNINIT );\r
   /* NOT SUPPORTED */\r
 }\r
 \r