pcu.c
上传用户:yyyd609
上传日期:2022-07-18
资源大小:183k
文件大小:4k
源码类别:

微处理器开发

开发平台:

C/C++

  1. /******************** (C) COPYRIGHT 2003 STMicroelectronics ********************
  2. * File Name          : pcu.c
  3. * Author             : MCD Application Team
  4. * Date First Issued  : 09/09/03
  5. * Description        : This file provides all the Power Control Unit functions
  6. ********************************************************************************
  7. * History:
  8. *  01/01/2004 : V1.2
  9. *  14/07/2004 : V1.3
  10. *******************************************************************************/
  11. #include "pcu.h"
  12. #include "rccu.h"
  13. /*******************************************************************************
  14. * Function Name  : PCU_VRConfig
  15. * Description    : This routine is used to configure PCU voltage regultors
  16. * Input 1        : MVR : Main voltage Regulator
  17.                    LPR : Low Power Regulator
  18. * Input 2        : ENABLE : Enable the Voltage Regulator
  19.                    DISABLE: Disable ( ByPass ) the VR
  20. * Return         : None
  21. *******************************************************************************/
  22. void PCU_VRConfig ( PCU_VR Xvr, FunctionalState NewState )
  23. {
  24.   u16 Tmp = PCU->PWRCR;
  25.   switch ( Xvr )
  26.   {
  27.     case PCU_MVR :
  28.         // Configure the Main Voltage Regulator
  29.         if (NewState == DISABLE) Tmp |= PCU_MVR_Mask; else Tmp &= ~PCU_MVR_Mask;
  30.         break;
  31.     case PCU_LPR :
  32.         // Configure the Low power Voltage Regulator
  33.         if (NewState == DISABLE) Tmp |= PCU_LPR_Mask; else Tmp &= ~PCU_LPR_Mask;
  34.         break;
  35.   }
  36.   // Unlock Power Control Register
  37.   PCU->PWRCR |= PCU_WREN_Mask;
  38.   PCU->PWRCR = Tmp | PCU_WREN_Mask;
  39. }
  40. /*******************************************************************************
  41. * Function Name  : PCU_WFIEnter
  42. * Description    : This routine is used to force the Device to enter in WFI mode
  43. * Input 1        : CLOCK2_16 : Clock2_16 as system clock for WFI mode
  44. *                  EXTERNAL  : external clock as system clock for WFI mode
  45. * Input 2        : ENABLE : Enable Low Power Regulator during Wait For Interrupt Mode
  46. *                  DISABLE: Disable Low Power Regulator during Wait For Interrupt Mode
  47. * Input 3        : ENABLE : Enable Low Power Mode during Wait For Interrupt Mode
  48. *                  DISABLE: Disable Low Power Mode during Wait For Interrupt Mode
  49. * Return         : None
  50. *******************************************************************************/
  51. void PCU_WFIEnter ( WFI_CLOCKS Xclock, FunctionalState Xlpr, FunctionalState Xlpm )
  52. {
  53.   u32 Tmp;
  54.   // Enable Low Power Regulator in WFI mode
  55.   Tmp = PCU->PWRCR;
  56.   // Unlock Power Control Register
  57.   PCU->PWRCR |= PCU_WREN_Mask;
  58.   PCU->PWRCR = Xlpr == ENABLE ? Tmp & ~PCU_LPRWFI_Mask : Tmp | PCU_LPRWFI_Mask;
  59.   // WFI Clock Selection
  60.   Tmp = RCCU->CCR;
  61.   RCCU->CCR = Xclock == WFI_CLOCK2_16  ? Tmp & ~PCU_WFI_CKSEL_Mask : Tmp | PCU_WFI_CKSEL_Mask;
  62.   // Low Power Mode during WFI mode
  63.   Tmp = RCCU->CCR;
  64.   RCCU->CCR = Xlpm == DISABLE ? Tmp & ~PCU_LPOWFI_Mask : Tmp | PCU_LPOWFI_Mask;
  65.   // Enter WFI Mode
  66.   RCCU->SMR &= ~0x0001;
  67. }
  68. /*******************************************************************************
  69. * Function Name  : PCU_LPMEnter
  70. * Description    : This routine is used to force the device to enter in low
  71. *                  power modes
  72. * Input          : PCU_SLOW : Slow Mode
  73.                    PCU_STOP : Stop Mode
  74.                    PCU_STANDBY : StandBy Mode
  75. * Return         : None
  76. *******************************************************************************/
  77. void PCU_LPMEnter ( LPM_MODES Xmode  )
  78. {
  79.   switch ( Xmode )
  80.   {
  81.     // Slow Mode
  82.     case PCU_SLOW:
  83.     {
  84.       RCCU->PLL1CR |= 0x87;
  85.       RCCU_RCLKSourceConfig ( RCCU_PLL1_Output );
  86.       break;
  87.     }
  88.     // Stop Mode
  89.     case PCU_STOP:
  90.     {
  91.       // Enable Stop EN bit
  92.       RCCU->CCR |= PCU_STOP_EN_Mask;
  93.       // Write '1' to Stop Bit
  94.       XTI->CTRL |= 0x04;
  95.       // Write '0' to Stop Bit
  96.       XTI->CTRL &= 0x03;
  97.       // Write '1' to Stop Bit
  98.       XTI->CTRL |= 0x04;
  99.       // add Delay
  100.       __asm
  101.       {
  102.         NOP
  103.         NOP
  104.         NOP
  105.         NOP
  106.         NOP
  107.         NOP
  108.         NOP
  109.         NOP
  110.         NOP
  111.       }
  112.       break;
  113.       // test if the Device entred in a Stop Mode.
  114.     }
  115.     // PCU_STANDBY Mode
  116.     case PCU_STANDBY:
  117.     {
  118.   PCU->PWRCR |= PCU_WREN_Mask; // Unlock Power Control Register
  119.   PCU->PWRCR |= PCU_PWRDWN_Mask; // Set the Power Down flag
  120.     }
  121.   }
  122. }
  123. /******************* (C) COPYRIGHT 2003 STMicroelectronics *****END OF FILE****/