⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sleepmodesdemo.c

📁 jennic jn5139模块的睡眠模式代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************
 *
 * MODULE:             Sleep Modes Demo - Polling
 *
 * COMPONENT:          $RCSfile:  $
 *
 * VERSION:            $Name:  $
 *
 * REVISION:           $Revision: $
 *
 * DATED:              $Date: $
 *
 * STATUS:             $State: $
 *
 * AUTHOR:             gpfef
 *
 * DESCRIPTION:
 *
 *
 * LAST MODIFIED BY:   $Author:  $
 *                     $Modtime: $
 *
 ****************************************************************************
 *
 *  (c) Copyright 2005 JENNIC Ltd
 *
 ****************************************************************************/

/****************************************************************************/
/***        Include files                                                 ***/
/****************************************************************************/
#include "jendefs.h"
#include "AppHardwareApi.h"
#include "Appapi.h"
#include "LedControl.h"
#include "button.h"
#include "Utils.h"
#include "gdb.h"

/****************************************************************************/
/***        Macro Definitions                                             ***/
/****************************************************************************/
#define INTERVAL_IN_32K_PERIODS			160000

//#define FLASH_SLEEP

//#define HIGH_POWER                 // For JN5139 high power



#define DISABLE_INTS					FALSE
#define ENABLE_INTS						TRUE

#define FLASH_SLAVE_MASK				1
#define FLASH_SLEEP_CODE				0xb9
#define	FLASH_WAKE_CODE					0xab

/****************************************************************************/
/***        Type Definitions                                              ***/
/****************************************************************************/
typedef enum
{
	E_NO_SLEEP			= 0x00,
	E_NO_MEMORY_HOLD,
	E_WITH_MEMORY_HOLD,
	E_DEEP_SLEEP
}teSleepState;

/****************************************************************************/
/***        Local Function Prototypes                                     ***/
/****************************************************************************/
PRIVATE void vInit(void);
PRIVATE void vInitSystem(void);
PRIVATE void vInitButtonsLeds(void);
PRIVATE void vConfigureWakeSource(bool_t bEnableInts);
PRIVATE void vMain(void);
PRIVATE void vProcessButtons(void);
PRIVATE void vCheckWakeSource(void);
PRIVATE void vToggleLed(void);
PRIVATE void vSleep(teSleepState eSleepType);

PRIVATE void vHandleTimerInterrupt(uint32 u32DeviceId, uint32 u32ItemBitmap);

#ifdef FLASH_SLEEP
PRIVATE void vFlashSleep(uint8 u8CodeWord);
#endif


/****************************************************************************/
/***        Local Variables                                               ***/
/****************************************************************************/
PRIVATE uint32 u32CalibratedIntervalTime;
PRIVATE bool_t bLedState = TRUE;

/****************************************************************************/
/***        Exported Variables                                            ***/
/****************************************************************************/

/****************************************************************************/
/***        Exported Functions                                            ***/
/****************************************************************************/
/****************************************************************************
 *
 * NAME: AppColdStart
 *
 * DESCRIPTION:
 * Entry point for application.
 *
 * RETURNS:
 * void, never returns
 *
 ****************************************************************************/
PUBLIC void AppColdStart(void)
{
    /* Debug hooks: include these regardless of whether debugging or not */
    HAL_GDB_INIT();
    HAL_BREAKPOINT();

    vInit();

    #ifdef UART0_DEBUG
	vUtils_Debug("Woke from sleep or reset in AppColdStart");
    #endif

    vInitButtonsLeds();

    vMain();
}

/****************************************************************************
 *
 * NAME: AppWarmStart
 *
 * DESCRIPTION:
 * Entry point for application from boot loader when sleep with memory hold
 * is used
 *
 * RETURNS:
 * Never returns.
 *
 ****************************************************************************/
PUBLIC void AppWarmStart(void)
{
    vInit();

    #ifdef FLASH_SLEEP
	/* ensure FLASH device is awake */
	vFlashSleep(FLASH_WAKE_CODE);
    #endif

    #ifdef UART0_DEBUG
    vUtils_Debug("Woke from sleep with memory hold in AppWarmStart");
    #endif

    vMain();
}

/****************************************************************************/
/***        Local Functions                                               ***/
/****************************************************************************/
/****************************************************************************
 *
 * NAME: vInitSystem
 *
 * DESCRIPTION:
 * Initialises hardware.
 *
 * RETURNS:
 * void
 *
 ****************************************************************************/
PRIVATE void vInit(void)
{
    #ifdef UART0_DEBUG
    vUtils_Init();
    #endif
    vCheckWakeSource();
    vInitSystem();
}

/****************************************************************************
 *
 * NAME: vInitSystem
 *
 * DESCRIPTION:
 * Initialises Timers and Interrupts.
 *
 * RETURNS:
 * void
 *
 ****************************************************************************/
PRIVATE void vInitSystem(void)
{

    // Register Timer 0 handler
    vAHI_Timer0RegisterCallback(vHandleTimerInterrupt);

    /* Initialise hardware interface */
    (void)u32AHI_Init();

    #ifdef HIGH_POWER
    #ifdef JN513x
    // Enable JN5139 High power module
    vAHI_HighPowerModuleEnable(TRUE, TRUE);
    #endif
    #endif

    vConfigureWakeSource(DISABLE_INTS);

    (void)u32AppApiInit(NULL,NULL,NULL,NULL,NULL,NULL);

	/* set timer up for four cycles per second */
   	vAHI_TimerEnable(E_AHI_TIMER_0, 10, FALSE, TRUE, FALSE);
    vAHI_TimerClockSelect(E_AHI_TIMER_0, FALSE, TRUE );
    vAHI_TimerStartRepeat(E_AHI_TIMER_0, 2000, 4000);
}

/****************************************************************************
 *
 * NAME: vHandleTimerInterrupt
 *
 * DESCRIPTION:
 * Timer 0 interrupt handler
 *
 * RETURNS:
 * void
 *
 ****************************************************************************/
PRIVATE void vHandleTimerInterrupt(uint32 u32DeviceId, uint32 u32ItemBitmap)
{
    if (u32DeviceId != E_AHI_DEVICE_TIMER0)
	{
		return;
	}
	vToggleLed();
}


/****************************************************************************
 *
 * NAME: vInitButtonsLeds
 *
 * DESCRIPTION:
 * Initialises buttons and leds.
 *
 * RETURNS:
 * void
 *
 ****************************************************************************/
PRIVATE void vInitButtonsLeds(void)
{
    vLedInitFfd();
	vLedControl(0, FALSE);
	vLedControl(1, TRUE);
	vLedControl(2, FALSE);
	vLedControl(3, FALSE);

	vButtonInitFfd();
}

/****************************************************************************
 *
 * NAME: vConfigureWakeSource
 *
 * DESCRIPTION:
 * Enables the comparator, DIO and wake timers, either enabling or
 * disabling the interrupts on each of them
 *
 * PARAMETERS:      Name            RW  Usage
 *                  bEnableInts     R   TRUE to enable interrupts
 *
 * RETURNS:
 * void
 *
 ****************************************************************************/
PRIVATE void vConfigureWakeSource(bool_t bEnableInts)
{
	/* Initialise buttons */
	vAHI_DioInterruptEnable(0, BUTTON_ALL_MASK_FFD_PIN);
	if (bEnableInts)
	{
        vAHI_DioInterruptEnable(BUTTON_3_PIN, 0);
		vAHI_DioInterruptEdge(0, BUTTON_3_PIN);
	}

#if 1
    // Comparator enable block
	/* turn on regulator so we can configure the comparator */
	vAHI_ApConfigure(E_AHI_AP_REGULATOR_ENABLE, E_AHI_AP_INT_DISABLE,E_AHI_AP_SAMPLE_8,
		E_AHI_AP_CLOCKDIV_500KHZ, E_AHI_AP_INTREF);
	while (!bAHI_APRegulatorEnabled());

	/* configure comparator */
	vAHI_CompEnable(E_AHI_COMP_HYSTERESIS_20MV, E_AHI_COMP_SEL_EXT);
	vAHI_CompIntEnable(bEnableInts, bEnableInts);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -