打印
[CC3200]

CC3200 Sleep-DeepSleep 深度睡眠

[复制链接]
1014|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
概述
睡眠和深度睡眠是 CC3200 设备支持的两个低功率模式。 在低功率模式下, 通过对 PRCM
模块指定的寄存器的适当配置, 不同的选项来选择模块活跃模式。因此, 导致从低功率模式
退出是以活跃的模块为基础的, 对于其他模块的时钟,没有被选择为积极的,禁用。假如是
深度睡眠模式时钟也减半。  

使用特权

评论回复
评论
dirtwillfly 2019-7-31 21:03 回复TA
感谢分享 

相关帖子

沙发
gaoke231|  楼主 | 2019-7-31 20:06 | 只看该作者
不同时钟选通(启用、禁止)模块是:
(1) Camera
(2) McASP
(3) MMCHS
(4) McSPI
(5) uDMA
(6) GPIOs
(7) WatchDOG
(8) UART
(9) GPT
(10) Crypto
(11) I2C

使用特权

评论回复
板凳
gaoke231|  楼主 | 2019-7-31 20:06 | 只看该作者
应用说明
这个应用程序的目的是展示 CC3200 设备支持的两个模块的睡眠和深度睡眠。
在本例中选择的模块是:
(1) 基于看门狗定时器的睡眠和深度睡眠;(2) 基于通用定时器(GPT)的睡眠和深度睡眠。

使用特权

评论回复
地板
gaoke231|  楼主 | 2019-7-31 20:07 | 只看该作者
设备进入低电平模式执行无线指令,在设备进入低电平模式之前,有一些先决条件的设
置被执行。

使用特权

评论回复
5
gaoke231|  楼主 | 2019-7-31 20:07 | 只看该作者
设置一个串行通信程序(超级终端/ TeraTerm)。终端设置如下:

使用特权

评论回复
6
gaoke231|  楼主 | 2019-7-31 20:10 | 只看该作者
运行参考程序(Flashing the bin/IAR/CCS)。 观察终端上的状态信息理解应用程序执行的顺序。运行结果如下图所示:

使用特权

评论回复
7
gaoke231|  楼主 | 2019-7-31 20:10 | 只看该作者
#if defined(ccs)
extern void (* const g_pfnVectors[])(void);
#endif
#if defined(ewarm)
extern uVectorEntry __vector_table;
#endif

使用特权

评论回复
8
gaoke231|  楼主 | 2019-7-31 20:10 | 只看该作者
void AppWDTCallBackHandler();
void AppGPTCallBackHandler();
static void BoardInit();
static void PerformPRCMSleepWDTWakeup();
static void PerformPRCMDeepSleepWDTWakeup();
static void PerformPRCMSleepGPTWakeup();
static void PerformPRCMDeepSleepGPTWakeup();

使用特权

评论回复
9
gaoke231|  楼主 | 2019-7-31 20:11 | 只看该作者
void AppWDTCallBackHandler()
{
    MAP_WatchdogIntClear(WDT_BASE);
    DBG_PRINT("WDT Interrupt occured\n\r");
}

使用特权

评论回复
10
gaoke231|  楼主 | 2019-7-31 20:11 | 只看该作者
void AppGPTCallBackHandler()
{
    MAP_TimerIntClear(TIMERA0_BASE,TIMER_TIMB_TIMEOUT|TIMER_TIMA_TIMEOUT);
    DBG_PRINT("GPT TimerA0 Interrupt occured\n\r");
}

使用特权

评论回复
11
gaoke231|  楼主 | 2019-7-31 20:12 | 只看该作者
void PerformPRCMSleepWDTWakeup()
{
    //
    // Initialize the WDT
    //
    WDT_IF_Init(AppWDTCallBackHandler, (4 * SYS_CLK));

    //
    // Enable the Sleep Clock
    //
    MAP_PRCMPeripheralClkEnable(PRCM_WDT, PRCM_SLP_MODE_CLK);

    //
    // Enter SLEEP...WaitForInterrupt ARM intrinsic
    //
    DBG_PRINT("WDT_SLEEP: Entering Sleep\n\r");
    MAP_UtilsDelay(80000);
    MAP_PRCMSleepEnter();
    DBG_PRINT("WDT_SLEEP: Exiting Sleep\n\r");
   
    //
    // Disable the Sleep Clock
    //
    MAP_PRCMPeripheralClkDisable(PRCM_WDT, PRCM_SLP_MODE_CLK);
   
    //
    // Deinitialize the WDT
    //
    WDT_IF_DeInit();
   
    //
    // PowerOff WDT
    //
    MAP_PRCMPeripheralClkDisable(PRCM_WDT, PRCM_RUN_MODE_CLK);
}

使用特权

评论回复
12
gaoke231|  楼主 | 2019-7-31 20:12 | 只看该作者
void PerformPRCMDeepSleepWDTWakeup()
{
    //
    // Initialize the WDT, Clock is halved in DeepSleep
    //
    WDT_IF_Init(AppWDTCallBackHandler, (2 * SYS_CLK));
   
    //
    // Enable the Sleep Clock
    //
    MAP_PRCMPeripheralClkEnable(PRCM_WDT, PRCM_DSLP_MODE_CLK);

    //
    // Enter DEEPSLEEP...WaitForInterrupt ARM intrinsic
    //
    DBG_PRINT("WDT_DEEPSLEEP: Entering Deep Sleep\n\r");
    MAP_UtilsDelay(80000);
    MAP_PRCMDeepSleepEnter();
    DBG_PRINT("WDT_DEEPSLEEP: Exiting Deep Sleep\n\r");
   
    //
    // Disable the DeepSleep Clock
    //
    MAP_PRCMPeripheralClkDisable(PRCM_WDT, PRCM_DSLP_MODE_CLK);
   
    //
    // Deinitialize the WDT
    //
    WDT_IF_DeInit();
   
    //
    // PowerOff WDT
    //
    MAP_PRCMPeripheralClkDisable(PRCM_WDT, PRCM_RUN_MODE_CLK);
}

使用特权

评论回复
13
gaoke231|  楼主 | 2019-7-31 20:13 | 只看该作者
void PerformPRCMSleepGPTWakeup()
{
    //
    // Power On the GPT along with sleep clock
    //
    MAP_PRCMPeripheralClkEnable(PRCM_TIMERA0, PRCM_RUN_MODE_CLK);
   
    //
    // Initialize the GPT as One Shot timer
    //
    Timer_IF_Init(PRCM_TIMERA0, TIMERA0_BASE, TIMER_CFG_ONE_SHOT, TIMER_BOTH, 0);
    Timer_IF_IntSetup(TIMERA0_BASE, TIMER_BOTH, AppGPTCallBackHandler);

        //
        // Start timer with value in mSec
        //
        Timer_IF_Start(TIMERA0_BASE, TIMER_BOTH, 4000);
   
    //
    // Enable the Sleep Clock
    //
    MAP_PRCMPeripheralClkEnable(PRCM_TIMERA0, PRCM_SLP_MODE_CLK);
   
    //
    // Enter SLEEP...WaitForInterrupt ARM intrinsic
    //
    DBG_PRINT("GPT_SLEEP: Entering Sleep\n\r");
    MAP_UtilsDelay(80000);
    MAP_PRCMSleepEnter();
    DBG_PRINT("GPT_SLEEP: Exiting Sleep\n\r");
   
    //
    // Disable the Sleep Clock
    //
    MAP_PRCMPeripheralClkDisable(PRCM_TIMERA0, PRCM_SLP_MODE_CLK);
   
    //
    // Deinitialize the GPT
    //
    Timer_IF_Stop(TIMERA0_BASE, TIMER_BOTH);
    Timer_IF_DeInit(TIMERA0_BASE, TIMER_BOTH);
   
    //
    // PowerOff GPT
    //
    MAP_PRCMPeripheralClkDisable(PRCM_TIMERA0, PRCM_RUN_MODE_CLK);
}

使用特权

评论回复
14
gaoke231|  楼主 | 2019-7-31 20:17 | 只看该作者
void PerformPRCMDeepSleepGPTWakeup()
{
    //
    // Power On the GPT
    //
    MAP_PRCMPeripheralClkEnable(PRCM_TIMERA0, PRCM_RUN_MODE_CLK);
   
    //
    // Initialize the GPT as One Shot timer, Clock is halved in DeepSleep
    //
    Timer_IF_Init(PRCM_TIMERA0, TIMERA0_BASE, TIMER_CFG_ONE_SHOT, TIMER_BOTH, 0);
    Timer_IF_IntSetup(TIMERA0_BASE, TIMER_BOTH, AppGPTCallBackHandler);

        //
        // Start timer with value in mSec
        //
        Timer_IF_Start(TIMERA0_BASE, TIMER_BOTH, 4000);
   
    //
    // Enable the DeepSleep Clock
    //
    MAP_PRCMPeripheralClkEnable(PRCM_TIMERA0, PRCM_DSLP_MODE_CLK);
   
    //
    // Enter DEEPSLEEP...WaitForInterrupt ARM intrinsic
    //
    DBG_PRINT("GPT_DEEPSLEEP: Entering Deep Sleep\n\r");
    MAP_UtilsDelay(80000);
    PRCMDeepSleepEnter();
    DBG_PRINT("GPT_DEEPSLEEP: Exiting Deep Sleep\n\r");
   
    //
    // Disable the DeepSleep Clock
    //
    MAP_PRCMPeripheralClkDisable(PRCM_TIMERA0, PRCM_DSLP_MODE_CLK);
   
    //
    // Deinitialize the GPT
    //
    Timer_IF_Stop(TIMERA0_BASE, TIMER_BOTH);
    Timer_IF_DeInit(TIMERA0_BASE, TIMER_BOTH);
   
    //
    // PowerOff GPT
    //
    MAP_PRCMPeripheralClkDisable(PRCM_TIMERA0, PRCM_RUN_MODE_CLK);
}

使用特权

评论回复
15
gaoke231|  楼主 | 2019-7-31 20:18 | 只看该作者
static void
DisplayBanner(char * AppName)
{
    Report("\n\n\n\r");
    Report("\t\t *************************************************\n\r");
    Report("\t\t    CC3200 %s Application       \n\r", AppName);
    Report("\t\t *************************************************\n\r");
    Report("\n\n\n\r");
}

使用特权

评论回复
16
gaoke231|  楼主 | 2019-7-31 20:22 | 只看该作者
static void
BoardInit(void)
{
/* In case of TI-RTOS vector table is initialize by OS itself */
#ifndef USE_TIRTOS
  //
  // Set vector table base
  //
#if defined(ccs)
    MAP_IntVTableBaseSet((unsigned long)&g_pfnVectors[0]);
#endif
#if defined(ewarm)
    MAP_IntVTableBaseSet((unsigned long)&__vector_table);
#endif
#endif
    //
    // Enable Processor
    //
    MAP_IntMasterEnable();
    MAP_IntEnable(FAULT_SYSTICK);

    PRCMCC3200MCUInit();
}

使用特权

评论回复
17
gaoke231|  楼主 | 2019-7-31 20:23 | 只看该作者
void
PinMuxConfig(void)
{
    //
    // Enable Peripheral Clocks
    //
    MAP_PRCMPeripheralClkEnable(PRCM_UARTA0, PRCM_RUN_MODE_CLK);

    //
    // Configure PIN_55 for UART0 UART0_TX
    //
    MAP_PinTypeUART(PIN_55, PIN_MODE_3);

    //
    // Configure PIN_57 for UART0 UART0_RX
    //
    MAP_PinTypeUART(PIN_57, PIN_MODE_3);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

1310

帖子

5

粉丝