Advertisement
Guest User

main_cm4.c

a guest
Feb 7th, 2019
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 19.74 KB | None | 0 0
  1. /***************************************************************************//**
  2. * \file main.c
  3. * \version 1.20
  4. *
  5. * \brief
  6. * Objective:
  7. *    This example demonstrates how to transition PSoC 6 among the following
  8. *    power modes - Low Power Active, Low Power Sleep, Ultra Low Power Active,
  9. *    Ultra Low Power Sleep and Deep Sleep.
  10. *
  11. * Compatible Kits:
  12. *    CY8CKIT-062-BLE
  13. *    CY8CKIT-062-WIFI-BT
  14. *
  15. *
  16. ********************************************************************************
  17. * \copyright
  18. * Copyright 2017-2018, Cypress Semiconductor Corporation. All rights reserved.
  19. * You may use this file only in accordance with the license, terms, conditions,
  20. * disclaimers, and limitations in the end user license agreement accompanying
  21. * the software package with which this file was provided.
  22. *******************************************************************************/
  23. #include "project.h"
  24.  
  25. /*******************************************************************************
  26. * Constants
  27. *******************************************************************************/
  28. typedef enum
  29. {
  30.     SWITCH_NO_EVENT     = 0u,
  31.     SWITCH_QUICK_PRESS  = 1u,
  32.     SWITCH_SHORT_PRESS  = 2u,
  33.     SWITCH_LONG_PRESS   = 3u,
  34. } SwitchEvent;
  35.  
  36. /* Constants to define LONG and SHORT presses on KIT_BTN1 */
  37. #define QUICK_PRESS_COUNT     5000u /* < 200 milliseconds */
  38. #define SHORT_PRESS_COUNT   100000u /* ~ 1 second */
  39. #define LONG_PRESS_COUNT    500000u /* > 2 seconds */
  40.  
  41. /* PWM LED period constants (in cycles) */
  42. #define LED_BLINK_FAST      50000u
  43. #define LED_BLINK_SLOW      100000u
  44. #define LED_DIM_CONTROL     100u
  45.  
  46. /* Time out for changing the FLL (in cycles) */
  47. #define FLL_CLOCK_TIMEOUT   200000u
  48.  
  49. /* Clock frequency constants (in Hz) */
  50. #define FLL_CLOCK_50_MHZ    50000000u
  51. #define FLL_CLOCK_100_MHZ   100000000u
  52. #define IMO_CLOCK           8000000u
  53.  
  54. /* Change the blinking pattern of the LED */
  55. #define PWM_LED_ACTION(x)   Cy_TCPWM_PWM_SetPeriod0(KIT_LED1_PWM_HW, KIT_LED1_PWM_CNT_NUM, x); \
  56.                             Cy_TCPWM_PWM_SetCompare0(KIT_LED1_PWM_HW, KIT_LED1_PWM_CNT_NUM, x/2); \
  57.                             Cy_TCPWM_PWM_SetCounter(KIT_LED1_PWM_HW, KIT_LED1_PWM_CNT_NUM, 0);
  58.  
  59. /* Changes the brightness of the LED by changing the duty cycle */
  60. #define PWM_LED_DIM(x)      Cy_TCPWM_PWM_SetPeriod0(KIT_LED1_PWM_HW, KIT_LED1_PWM_CNT_NUM, LED_DIM_CONTROL); \
  61.                             Cy_TCPWM_PWM_SetCompare0(KIT_LED1_PWM_HW, KIT_LED1_PWM_CNT_NUM, x); \
  62.                             Cy_TCPWM_PWM_SetCounter(KIT_LED1_PWM_HW, KIT_LED1_PWM_CNT_NUM, 0);
  63.  
  64. /*******************************************************************************
  65. * Function Prototypes
  66. *******************************************************************************/
  67. /* Auxiliary Prototype functions */
  68. SwitchEvent GetSwitchEvent(void);
  69. void WakeupInterruptHandler(void);
  70.  
  71. /* Callback Prototypes */
  72. cy_en_syspm_status_t TCPWM_SleepCallback(cy_stc_syspm_callback_params_t *callbackParams, cy_en_syspm_callback_mode_t mode);
  73. cy_en_syspm_status_t TCPWM_DeepSleepCallback(cy_stc_syspm_callback_params_t *callbackParams, cy_en_syspm_callback_mode_t mode);
  74. cy_en_syspm_status_t TCPWM_EnterUltraLowPowerCallback(cy_stc_syspm_callback_params_t *callbackParams, cy_en_syspm_callback_mode_t mode);
  75. cy_en_syspm_status_t TCPWM_ExitUltraLowPowerCallback(cy_stc_syspm_callback_params_t *callbackParams, cy_en_syspm_callback_mode_t mode);
  76. cy_en_syspm_status_t Clock_EnterUltraLowPowerCallback(cy_stc_syspm_callback_params_t *callbackParams, cy_en_syspm_callback_mode_t mode);
  77. cy_en_syspm_status_t Clock_ExitUltraLowPowerCallback(cy_stc_syspm_callback_params_t *callbackParams, cy_en_syspm_callback_mode_t mode);
  78.  
  79.  
  80. /*******************************************************************************
  81. * Function Name: main
  82. ****************************************************************************//**
  83. *
  84. *  Initialization:
  85. *  - Register sleep callbacks.
  86. *  - Initialize the PWM block that controls the LED brightness.
  87. *  Do forever loop:
  88. *  - Check if KIT_BTN1 was pressed and for how long.
  89. *  - If quickly pressed, swap from LP to ULP (vice-versa).
  90. *  - If short pressed, go to sleep.
  91. *  - If long pressed, go to deep sleep.
  92. *
  93. *******************************************************************************/
  94. int main(void)
  95. {
  96.     /* SysPm callback params */
  97.     cy_stc_syspm_callback_params_t callbackParams = {
  98.         /*.base       =*/ NULL,
  99.         /*.context    =*/ NULL
  100.     };
  101.  
  102.     /* Wake-up Interrupt pin config structure (P0[4]) */
  103.     cy_stc_sysint_t WakeupIsrPin =
  104.     {
  105.         /* Wake-up pin is located in Port 0 */
  106.         .intrSrc = ioss_interrupts_gpio_0_IRQn,
  107.         .intrPriority = 0,
  108.     };
  109.  
  110.     /* Callback declaration for Power Modes */
  111.     cy_stc_syspm_callback_t PwmSleepCb = {TCPWM_SleepCallback,      /* Callback function */
  112.                                           CY_SYSPM_SLEEP,           /* Callback type */
  113.                                           CY_SYSPM_SKIP_CHECK_READY |
  114.                                           CY_SYSPM_SKIP_CHECK_FAIL, /* Skip mode */
  115.                                           &callbackParams,          /* Callback params */
  116.                                           NULL, NULL};              /* For internal usage */
  117.     cy_stc_syspm_callback_t PwmDeepSleepCb = {TCPWM_DeepSleepCallback,  /* Callback function */
  118.                                               CY_SYSPM_DEEPSLEEP,       /* Callback type */
  119.                                               CY_SYSPM_SKIP_CHECK_READY |
  120.                                               CY_SYSPM_SKIP_CHECK_FAIL, /* Skip mode */
  121.                                               &callbackParams,          /* Callback params */
  122.                                               NULL, NULL};              /* For internal usage */
  123.     cy_stc_syspm_callback_t PwmEnterUlpCb = {TCPWM_EnterUltraLowPowerCallback, /* Callback function */
  124.                                              CY_SYSPM_ULP,                     /* Callback type */
  125.                                              CY_SYSPM_SKIP_CHECK_READY |
  126.                                              CY_SYSPM_SKIP_CHECK_FAIL |
  127.                                              CY_SYSPM_SKIP_BEFORE_TRANSITION,  /* Skip mode */
  128.                                              &callbackParams,                  /* Callback params */
  129.                                              NULL, NULL};                      /* For internal usage */
  130.     cy_stc_syspm_callback_t PwmExitUlpCb = {TCPWM_ExitUltraLowPowerCallback, /* Callback function */
  131.                                             CY_SYSPM_LP,                     /* Callback type */
  132.                                             CY_SYSPM_SKIP_CHECK_READY |
  133.                                             CY_SYSPM_SKIP_CHECK_FAIL |
  134.                                             CY_SYSPM_SKIP_BEFORE_TRANSITION, /* Skip mode */
  135.                                             &callbackParams,                 /* Callback params */
  136.                                             NULL, NULL};                     /* For internal usage */
  137.     cy_stc_syspm_callback_t ClkEnterUlpCb = {Clock_EnterUltraLowPowerCallback, /* Callback function */
  138.                                              CY_SYSPM_ULP,                     /* Callback type */
  139.                                              CY_SYSPM_SKIP_CHECK_READY |
  140.                                              CY_SYSPM_SKIP_CHECK_FAIL |
  141.                                              CY_SYSPM_SKIP_AFTER_TRANSITION,   /* Skip mode */
  142.                                              &callbackParams,                  /* Callback params */
  143.                                              NULL, NULL};
  144.     cy_stc_syspm_callback_t ClkExitUlpCb = {Clock_ExitUltraLowPowerCallback, /* Callback function */
  145.                                             CY_SYSPM_LP,                     /* Callback type */
  146.                                             CY_SYSPM_SKIP_CHECK_READY |
  147.                                             CY_SYSPM_SKIP_CHECK_FAIL |
  148.                                             CY_SYSPM_SKIP_BEFORE_TRANSITION,  /* Skip mode */
  149.                                             &callbackParams,                 /* Callback params */
  150.                                             NULL, NULL};                     /* For internal usage */
  151.  
  152.     /* enable interrupts */
  153.     __enable_irq();
  154.  
  155.     /* Initialize the Wake-up Interrupt */
  156.     Cy_SysInt_Init(&WakeupIsrPin, WakeupInterruptHandler);
  157.  
  158.     /* Configure pin interrupt */
  159.     Cy_GPIO_SetInterruptMask(KIT_BTN1_PORT, KIT_BTN1_NUM, 0x01);
  160.  
  161.     /* Enable ISR to wake up pin */
  162.     NVIC_EnableIRQ(WakeupIsrPin.intrSrc);
  163.  
  164.     /* Register SysPm callbacks */
  165.     Cy_SysPm_RegisterCallback(&PwmSleepCb);
  166.     Cy_SysPm_RegisterCallback(&PwmDeepSleepCb);
  167.     Cy_SysPm_RegisterCallback(&PwmEnterUlpCb);
  168.     Cy_SysPm_RegisterCallback(&PwmExitUlpCb);
  169.     Cy_SysPm_RegisterCallback(&ClkEnterUlpCb);
  170.     Cy_SysPm_RegisterCallback(&ClkExitUlpCb);
  171.  
  172.     /* Initialize the TCPWM blocks */
  173.     Cy_TCPWM_PWM_Init(KIT_LED1_PWM_HW, KIT_LED1_PWM_CNT_NUM, &KIT_LED1_PWM_config);
  174.     Cy_TCPWM_Counter_Init(APP_COUNTER_HW, APP_COUNTER_CNT_NUM, &APP_COUNTER_config);
  175.  
  176.     /* Enable the PWM LED */
  177.     Cy_TCPWM_PWM_Enable(KIT_LED1_PWM_HW, KIT_LED1_PWM_CNT_NUM);
  178.     Cy_TCPWM_TriggerStart(KIT_LED1_PWM_HW, KIT_LED1_PWM_CNT_MASK);
  179.  
  180.     for (;;)
  181.     {
  182.         switch (GetSwitchEvent())
  183.         {
  184.             case SWITCH_QUICK_PRESS:
  185.                 /* Check if the device is in System ULP mode */
  186.                 if (Cy_SysPm_IsSystemUlp())
  187.                 {
  188.                     /* Switch to System LP mode */
  189.                     Cy_SysPm_SystemEnterLp();
  190.                 }
  191.                 else
  192.                 {
  193.                     /* Switch to ULP mode */
  194.                     Cy_SysPm_SystemEnterUlp();
  195.                 }
  196.                 break;
  197.  
  198.             case SWITCH_SHORT_PRESS:
  199.                 /* Go to sleep */
  200.                 Cy_SysPm_CpuEnterSleep(CY_SYSPM_WAIT_FOR_INTERRUPT);
  201.                 /* Wait a bit to avoid glitches in the button press */
  202.                 Cy_SysLib_Delay(250);
  203.                 break;
  204.  
  205.             case SWITCH_LONG_PRESS:
  206.                 /* Go to deep sleep */
  207.                 Cy_SysPm_CpuEnterDeepSleep(CY_SYSPM_WAIT_FOR_INTERRUPT);
  208.                 /* Wait a bit to avoid glitches in the button press */
  209.                 Cy_SysLib_Delay(250);
  210.                 break;
  211.  
  212.             default:
  213.                 break;
  214.         }
  215.     }
  216. }
  217.  
  218. /*******************************************************************************
  219. * Function Name: GetSwitchEvent
  220. ****************************************************************************//**
  221. *
  222. * Returns how the KIT_BTN1 was pressed:
  223. * - SWITCH_NO_EVENT: No press or very quick press
  224. * - SWITCH_SHORT_PRESS: Short press was detected
  225. * - SWITCH_LONG_PRESS: Long press was detected
  226. *
  227. *******************************************************************************/
  228. SwitchEvent GetSwitchEvent(void)
  229. {
  230.     unsigned int pressCount;
  231.     SwitchEvent event = SWITCH_NO_EVENT;
  232.  
  233.     /* Check if KIT_BTN1 is pressed */
  234.     if (0u == Cy_GPIO_Read(KIT_BTN1_PORT, KIT_BTN1_NUM))
  235.     {
  236.         /* Check if the counter is not running */
  237.         if (0u == ( Cy_TCPWM_Counter_GetStatus(APP_COUNTER_HW, APP_COUNTER_CNT_NUM) &
  238.                    CY_TCPWM_COUNTER_STATUS_COUNTER_RUNNING))
  239.         {
  240.             /* Enable and trigger the counter */
  241.             Cy_TCPWM_Counter_SetCounter(APP_COUNTER_HW, APP_COUNTER_CNT_NUM, 0u);
  242.             Cy_TCPWM_Counter_Enable(APP_COUNTER_HW, APP_COUNTER_CNT_NUM);
  243.             Cy_TCPWM_TriggerStart(APP_COUNTER_HW, APP_COUNTER_CNT_MASK);
  244.         }
  245.     }
  246.     else
  247.     {
  248.         /* If button not pressed, check the counter value */
  249.         pressCount = Cy_TCPWM_Counter_GetCounter(APP_COUNTER_HW, APP_COUNTER_CNT_NUM);
  250.  
  251.         /* Check if KIT_BTN1 was pressed for a long time */
  252.         if (pressCount > LONG_PRESS_COUNT)
  253.         {
  254.             event = SWITCH_LONG_PRESS;
  255.         }
  256.         /* Check if KIT_BTN1 was pressed for a short time */
  257.         else if (pressCount > SHORT_PRESS_COUNT)
  258.         {
  259.             event = SWITCH_SHORT_PRESS;
  260.         }
  261.         else if (pressCount > QUICK_PRESS_COUNT)
  262.         {
  263.             event = SWITCH_QUICK_PRESS;
  264.         }
  265.  
  266.         /* Disable the switch counter */
  267.         Cy_TCPWM_Counter_Disable(APP_COUNTER_HW, APP_COUNTER_CNT_NUM);
  268.  
  269.         /* Reset the switch counter */
  270.         Cy_TCPWM_Counter_SetCounter(APP_COUNTER_HW, APP_COUNTER_CNT_NUM, 0u);
  271.  
  272.         /* Debounce the USER button */
  273.         Cy_SysLib_Delay(10);
  274.     }
  275.  
  276.     return event;
  277. }
  278.  
  279. /*******************************************************************************
  280. * Function Name: TCPWM_SleepCallback
  281. ****************************************************************************//**
  282. *
  283. * Sleep callback implementation. It changes the LED behavior based on the
  284. * System Mode.
  285. * - LP Mode CPU Sleep  : LED is turned ON
  286. * - ULP Mode CPU Sleep : LED is dimmed.
  287. * Note that the LED brightness is controlled using the PWM block.
  288. *
  289. *******************************************************************************/
  290. cy_en_syspm_status_t TCPWM_SleepCallback(
  291.     cy_stc_syspm_callback_params_t *callbackParams, cy_en_syspm_callback_mode_t mode)
  292. {
  293.     cy_en_syspm_status_t retVal = CY_SYSPM_FAIL;
  294.  
  295.     switch (mode)
  296.     {
  297.         case CY_SYSPM_BEFORE_TRANSITION:
  298.  
  299.             /* Check if the device is in System ULP mode */
  300.             if (Cy_SysPm_IsSystemUlp())
  301.             {
  302.                 /* Before going to ULP sleep mode, dim the LED (10%) */
  303.                 PWM_LED_DIM(10);
  304.             }
  305.             else
  306.             {
  307.                 /* Before going to LP sleep mode, turn on the LED (100%) */
  308.                 PWM_LED_DIM(100);
  309.             }
  310.  
  311.             /* Disable switch Counter */
  312.             Cy_TCPWM_Counter_Disable(APP_COUNTER_HW, APP_COUNTER_CNT_NUM);
  313.  
  314.             retVal = CY_SYSPM_SUCCESS;
  315.             break;
  316.  
  317.         case CY_SYSPM_AFTER_TRANSITION:
  318.  
  319.             /* Check if the device is in System ULP mode */
  320.             if (Cy_SysPm_IsSystemUlp())
  321.             {
  322.                 /* After waking up, set the slow blink pattern */
  323.                 PWM_LED_ACTION(LED_BLINK_SLOW);
  324.             }
  325.             else
  326.             {
  327.                 /* After waking up, set the fast blink pattern */
  328.                 PWM_LED_ACTION(LED_BLINK_FAST);
  329.             }
  330.  
  331.             retVal = CY_SYSPM_SUCCESS;
  332.             break;
  333.  
  334.         default:
  335.             /* Don't do anything in the other modes */
  336.             retVal = CY_SYSPM_SUCCESS;
  337.             break;
  338.     }
  339.  
  340.     return retVal;
  341. }
  342.  
  343. /*******************************************************************************
  344. * Function Name: TCPWM_DeepSleepCallback
  345. ****************************************************************************//**
  346. *
  347. * Deep Sleep callback implementation. It turns the LED off before going to deep
  348. * sleep power mode. After waking up, it sets the LED to blink.
  349. * Note that the PWM block needs to be re-enabled after waking up, since the
  350. * clock feeding the PWM is disabled in deep sleep.
  351. *
  352. *******************************************************************************/
  353. cy_en_syspm_status_t TCPWM_DeepSleepCallback(
  354.     cy_stc_syspm_callback_params_t *callbackParams, cy_en_syspm_callback_mode_t mode)
  355. {
  356.     cy_en_syspm_status_t retVal = CY_SYSPM_FAIL;
  357.  
  358.     switch (mode)
  359.     {
  360.         case CY_SYSPM_BEFORE_TRANSITION:
  361.             /* Before going to sleep mode, turn off the LEDs */
  362.             Cy_TCPWM_PWM_Disable(KIT_LED1_PWM_HW, KIT_LED1_PWM_CNT_NUM);
  363.  
  364.             /* Disable the switch counter */
  365.             Cy_TCPWM_Counter_Disable(APP_COUNTER_HW, APP_COUNTER_CNT_NUM);
  366.  
  367.             retVal = CY_SYSPM_SUCCESS;
  368.             break;
  369.  
  370.         case CY_SYSPM_AFTER_TRANSITION:
  371.             /* Re-enable PWM */
  372.             Cy_TCPWM_PWM_Enable(KIT_LED1_PWM_HW, KIT_LED1_PWM_CNT_NUM);
  373.             Cy_TCPWM_TriggerStart(KIT_LED1_PWM_HW, KIT_LED1_PWM_CNT_MASK);
  374.  
  375.             /* Check if the device is in System ULP mode */
  376.             if (Cy_SysPm_IsSystemUlp())
  377.             {
  378.                 /* After waking up, set the slow blink pattern */
  379.                 PWM_LED_ACTION(LED_BLINK_SLOW);
  380.             }
  381.             else
  382.             {
  383.                 /* After waking up, set the fast blink pattern */
  384.                 PWM_LED_ACTION(LED_BLINK_FAST);
  385.             }
  386.  
  387.             retVal = CY_SYSPM_SUCCESS;
  388.             break;
  389.  
  390.         default:
  391.             /* Don't do anything in the other modes */
  392.             retVal = CY_SYSPM_SUCCESS;
  393.             break;
  394.     }
  395.  
  396.     return retVal;
  397. }
  398.  
  399. /*******************************************************************************
  400. * Function Name: TCPWM_EnterUltraLowPowerCallback
  401. ****************************************************************************//**
  402. *
  403. * Enter System ULP Mode callback implementation. It changes the LED blinking
  404. * pattern.
  405. *
  406. *******************************************************************************/
  407. cy_en_syspm_status_t TCPWM_EnterUltraLowPowerCallback(
  408.         cy_stc_syspm_callback_params_t *callbackParams, cy_en_syspm_callback_mode_t mode)
  409. {
  410.     cy_en_syspm_status_t retVal = CY_SYSPM_FAIL;
  411.  
  412.     switch (mode)
  413.     {
  414.         case CY_SYSPM_AFTER_TRANSITION:
  415.             /* Set slow blink LED pattern  */
  416.             PWM_LED_ACTION(LED_BLINK_SLOW);
  417.  
  418.             retVal = CY_SYSPM_SUCCESS;
  419.             break;
  420.  
  421.         default:
  422.             /* Don't do anything in the other modes */
  423.             retVal = CY_SYSPM_SUCCESS;
  424.             break;
  425.     }
  426.  
  427.     return retVal;
  428. }
  429.  
  430. /*******************************************************************************
  431. * Function Name: TCPWM_ExitUltraLowPowerCallback
  432. ****************************************************************************//**
  433. *
  434. * Exit System ULP Mode callback implementation. It changes the LED blinking
  435. * pattern.
  436. *
  437. *******************************************************************************/
  438. cy_en_syspm_status_t TCPWM_ExitUltraLowPowerCallback(
  439.         cy_stc_syspm_callback_params_t *callbackParams, cy_en_syspm_callback_mode_t mode)
  440. {
  441.     cy_en_syspm_status_t retVal = CY_SYSPM_FAIL;
  442.  
  443.     switch (mode)
  444.     {
  445.         case CY_SYSPM_AFTER_TRANSITION:
  446.             /* Set fast blink LED pattern  */
  447.             PWM_LED_ACTION(LED_BLINK_FAST);
  448.  
  449.             retVal = CY_SYSPM_SUCCESS;
  450.             break;
  451.  
  452.         default:
  453.             /* Don't do anything in the other modes */
  454.             retVal = CY_SYSPM_SUCCESS;
  455.             break;
  456.     }
  457.  
  458.     return retVal;
  459. }
  460.  
  461. /*******************************************************************************
  462. * Function Name: Clock_EnterUltraLowPowerCallback
  463. ****************************************************************************//**
  464. *
  465. * Enter Low Power Mode callback implementation. It reduces the FLL frequency by
  466. * half.
  467. *
  468. *******************************************************************************/
  469. cy_en_syspm_status_t Clock_EnterUltraLowPowerCallback(
  470.         cy_stc_syspm_callback_params_t *callbackParams, cy_en_syspm_callback_mode_t mode)
  471. {
  472.     cy_en_syspm_status_t retVal = CY_SYSPM_FAIL;
  473.  
  474.     switch (mode)
  475.     {
  476.         case CY_SYSPM_BEFORE_TRANSITION:
  477.             /* Disable the FLL */
  478.             Cy_SysClk_FllDisable();
  479.  
  480.             /* Reconfigure the FLL to be half of the original frequency */
  481.             Cy_SysClk_FllConfigure(IMO_CLOCK, FLL_CLOCK_50_MHZ, CY_SYSCLK_FLLPLL_OUTPUT_AUTO);
  482.  
  483.             /* Re-enable the FLL */
  484.             Cy_SysClk_FllEnable(FLL_CLOCK_TIMEOUT);
  485.  
  486.             /* Set Peri Clock Divider to 1u, to keep at 50 MHz */
  487.             Cy_SysClk_ClkPeriSetDivider(1u);
  488.  
  489.             retVal = CY_SYSPM_SUCCESS;
  490.             break;
  491.  
  492.         default:
  493.             /* Don't do anything in the other modes */
  494.             retVal = CY_SYSPM_SUCCESS;
  495.             break;
  496.     }
  497.  
  498.     return retVal;
  499. }
  500.  
  501. /*******************************************************************************
  502. * Function Name: Clock_ExitUltraLowPowerCallback
  503. ****************************************************************************//**
  504. *
  505. * Exit Low Power Mode callback implementation. It sets the original FLL
  506. * frequency for the device.
  507. *
  508. *******************************************************************************/
  509. cy_en_syspm_status_t Clock_ExitUltraLowPowerCallback(
  510.         cy_stc_syspm_callback_params_t *callbackParams, cy_en_syspm_callback_mode_t mode)
  511. {
  512.     cy_en_syspm_status_t retVal = CY_SYSPM_FAIL;
  513.  
  514.     switch (mode)
  515.     {
  516.         case CY_SYSPM_AFTER_TRANSITION:
  517.             /* Set Peri Clock Divider to 2u, to keep at 50 MHz */
  518.             Cy_SysClk_ClkPeriSetDivider(2u);
  519.  
  520.             /* Disable the FLL */
  521.             Cy_SysClk_FllDisable();
  522.  
  523.             /* Reconfigure the FLL to be the original frequency */
  524.             Cy_SysClk_FllConfigure(IMO_CLOCK, FLL_CLOCK_100_MHZ, CY_SYSCLK_FLLPLL_OUTPUT_AUTO);
  525.  
  526.             /* Re-enable the FLL */
  527.             Cy_SysClk_FllEnable(FLL_CLOCK_TIMEOUT);
  528.  
  529.             retVal = CY_SYSPM_SUCCESS;
  530.             break;
  531.  
  532.         default:
  533.             /* Don't do anything in the other modes */
  534.             retVal = CY_SYSPM_SUCCESS;
  535.             break;
  536.     }
  537.  
  538.     return retVal;
  539. }
  540.  
  541. /*******************************************************************************
  542. * Function Name: WakeupInterruptHandler
  543. ****************************************************************************//**
  544. *
  545. * Wake-up pin interrupt handler. Clear the interrupt only.
  546. *
  547. *******************************************************************************/
  548. void WakeupInterruptHandler(void)
  549. {
  550.     /* Clear any pending interrupt */
  551.     if (0u != Cy_GPIO_GetInterruptStatusMasked(KIT_BTN1_PORT, KIT_BTN1_NUM))
  552.     {
  553.         Cy_GPIO_ClearInterrupt(KIT_BTN1_PORT, KIT_BTN1_NUM);
  554.     }
  555. }
  556.    
  557. /* [] END OF FILE */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement