MCUXpresso_LPC55S69/boards/lpcxpresso55s69/demo_apps/utick_wakeup/cm33_core0/utick_wakeup.c

124 lines
3.4 KiB
C

/*
* Copyright (c) 2016, Freescale Semiconductor, Inc.
* Copyright 2016-2018 NXP
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "fsl_debug_console.h"
#include "pin_mux.h"
#include "board.h"
#include "fsl_common.h"
#include "fsl_power.h"
#include "fsl_utick.h"
#include <stdbool.h>
/*******************************************************************************
* Definitions
******************************************************************************/
#define APP_UTICK_WAKEUP_FROM_SLEEP_MODE 1
#define APP_LED_INIT LED_RED_INIT(1);
#define APP_LED_TOGGLE (LED_RED_TOGGLE());
#define APP_INTERNAL_IRC BOARD_BootClockFRO12M
#define APP_EXCLUDE_FROM_DEEPSLEEP kPDRUNCFG_PD_FRO1M
#define UTICK_TIME 3000000
/*******************************************************************************
* Prototypes
******************************************************************************/
/*!
* @brief delay a while.
*/
void delay(void);
void BOARD_BootToIrc()
{
APP_INTERNAL_IRC();
}
/*******************************************************************************
* Code
******************************************************************************/
void delay(void)
{
volatile uint32_t i = 0;
for (i = 0; i < 100000; ++i)
{
__asm("NOP"); /* delay */
}
}
/*!
* @brief Main function
*/
int main(void)
{
/* Init board hardware. */
/* set BOD VBAT level to 1.65V */
POWER_SetBodVbatLevel(kPOWER_BodVbatLevel1650mv, kPOWER_BodHystLevel50mv, false);
/* attach 12 MHz clock to FLEXCOMM0 (debug console) */
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
/* enable clock for GPIO*/
CLOCK_EnableClock(kCLOCK_Gpio1);
BOARD_InitBootPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
/* Enable FRO 1M clock for UTICK module.
* Note: the FRO1MHZ_FREQM bit must be set.
*/
SYSCON->CLOCK_CTRL |= SYSCON_CLOCK_CTRL_FRO1MHZ_CLK_ENA_MASK | SYSCON_CLOCK_CTRL_FRO1MHZ_UTICK_ENA_MASK;
/* Init output LED GPIO. */
LED_RED_INIT(LOGIC_LED_OFF);
/* Running core to internal clock 12 MHz*/
BOARD_BootToIrc();
/* Init output LED GPIO. */
APP_LED_INIT;
PRINTF("Utick wakeup demo start...\r\n");
/* Attach Main Clock as CLKOUT */
CLOCK_AttachClk(kMAIN_CLK_to_CLKOUT);
/* Set the clock dividor to divide by 2*/
CLOCK_SetClkDiv(kCLOCK_DivClkOut, 2, false);
/* Intiialize UTICK */
UTICK_Init(UTICK0);
/* Set the UTICK timer to wake up the device from reduced power mode */
UTICK_SetTick(UTICK0, kUTICK_Repeat, UTICK_TIME, NULL);
#if defined(APP_UTICK_WAKEUP_FROM_SLEEP_MODE) && APP_UTICK_WAKEUP_FROM_SLEEP_MODE
/* Enter sleep mode. */
POWER_EnterSleep();
#else
/* Enter Deep Sleep mode */
#if (defined(FSL_FEATURE_POWERLIB_EXTEND) && FSL_FEATURE_POWERLIB_EXTEND)
POWER_EnterDeepSleep(APP_EXCLUDE_FROM_DEEPSLEEP, 0x0, WAKEUP_UTICK, 0x0);
#else
POWER_EnterDeepSleep(APP_EXCLUDE_FROM_DEEPSLEEP);
#endif
#endif
/* Set the clock dividor to divide by 1*/
CLOCK_SetClkDiv(kCLOCK_DivClkOut, 1, false);
#if defined(APP_UTICK_WAKEUP_FROM_SLEEP_MODE) && APP_UTICK_WAKEUP_FROM_SLEEP_MODE
PRINTF("Wakeup from sleep mode...\r\n");
#else
PRINTF("Wakeup from deep sleep mode...\r\n");
#endif
while (1)
{
/* Toggle LED */
APP_LED_TOGGLE;
delay();
}
}