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

📄 timerwakeup.c

📁 深度睡眠模式操作技术笔记
💻 C
字号:
/****************************************Copyright (c)****************************************************
**                               Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File Name:               Main.c
** Last modified Date:      2007.09.27
** Last Version:            v1.0
** Description:             睡眠模式的基本操作
** 
**--------------------------------------------------------------------------------------------------------
** Created By:              Weng Heiwei
** Created date:            2008.07.29
** Version:                 v1.0
** Descriptions:
**
*******************************************************************************************************/
#include  "config.h"

/* SleepMode为睡眠方式控制      */
/* 0    : 深度睡眠方式          */
/* 1    : 普通睡眠方式          */
#define SleepMode  0                                                    /* 睡眠方式选择                   */
#define SleepCLK   12000000                                             /* 睡眠时的系统时钟基准频率       */
#define SleepTime  (SleepCLK)                                           /* 睡眠时间                       */
#define SysDiv     (5 << 23)                                            /* 深度睡眠时的基准频率分频值     */
#define ClkSrc     (1 << 4)                                             /* 深度睡眠模式下的时钟源         */

/* PLLEN为PLL运行控制位         */
/* 0    : PLL在运行模式下不运行 */
/* 其它 : PLL在运行模式下运行   */
#define PLLEN      1

#define USE_PORT   GPIO_PORTA_BASE                                     
#define LED3       GPIO_PIN_2
#define LED4       GPIO_PIN_3

/*********************************************************************************************************
** Function name:           main	   
** Descriptions:            本示例程序演示了定时器中断唤醒睡眠状态
**
** input parameters:        无
** output parameters:       无      
** Returned value:          无	 
** Created By:              Weng Heiwei
** Created date:            2008.07.29
*********************************************************************************************************/
int  main(void)
{
  SysCtlLDOSet(SYSCTL_LDO_2_75V);                                       /* 设置LDO输出为2.75V             */
  #if PLLEN == 0
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC |                   /* 配置PLL                        */
                   SYSCTL_XTAL_6MHZ | SYSCTL_OSC_MAIN);                 /* 运行模式下的系统时钟源为MOSC   */
  #else    
    SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL |                  /* 配置PLL                        */
                   SYSCTL_XTAL_6MHZ | SYSCTL_OSC_MAIN);                 /* 运行模式下的系统时钟源为PLL输出*/
  #endif
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);                          /* 使能外设GPIOA                  */
  SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);                         /* 使能外设TIMER0                 */
  SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE);                      /* 使能休眠模块                   */

  HibernateEnableExpClk(SysCtlClockGet());                              /* 使能32KHz的内部振荡器          */
  
  GPIOPadConfigSet(USE_PORT,LED3 |LED4,                                 /* 引脚配置为弱上拉,驱动电流为2mA*/
                            GPIO_STRENGTH_2MA,
                            GPIO_PIN_TYPE_STD_WPU);
  GPIODirModeSet(USE_PORT,LED3 | LED4,GPIO_DIR_MODE_OUT);               /* 配置引脚数据方向               */
    
  TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER);                     /* 配置定时器0为32BIT周期模式     */
  TimerLoadSet(TIMER0_BASE, TIMER_A, SleepTime);                        /* 设置定时器0加载值              */
  TimerControlStall(TIMER0_BASE,TIMER_A,true);                          /* 配置在调试过程中定时器停止计数 */
  
  GPIOPinWrite(USE_PORT,LED3 | LED4,~(LED3 | LED4)); 
  TimeDelay(500000);
  GPIOPinWrite(USE_PORT,LED3 | LED4,(LED3 | LED4));                     /* 测试引脚功能                   */
  
  TimerIntClear(TIMER0_BASE,0x70F);                                     /* 清除定时器0的全部中断          */
  TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT);                       /* 使能超时溢出中断使能           */
  IntEnable(INT_TIMER0A);                                               /* TIMER0A模块中断使能            */
  IntMasterEnable();                                                    /* 中断总使能                     */
  
  TimerEnable(TIMER0_BASE,TIMER_A);                                     /* 启动定时器0                    */
  SysCtlPeripheralClockGating(true);                                    /* 置位ACG,开启自动时钟门控      */
  HWREG(SYSCTL_DSLPCLKCFG) = SysDiv |                                   /* 选择系统分频值                 */
                             ClkSrc;                                    /* 选择深度睡眠模式下的系统时钟源 */
  
  #if SleepMode == 0
    SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_TIMER0);              /* 深度睡眠模式下使能外设TIMER0   */
    SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_HIBERNATE);           /* 深度睡眠模式下使能休眠模块     */
    SysCtlDeepSleep();                                                  /* 使CM3进入深度睡眠模式          */
  #endif
    
  #if SleepMode == 1
    SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_TIMER0);                  /* 睡眠模式下使能外设TIMER0       */
    SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_HIBERNATE);               /* 睡眠模式下使能休眠模块         */
    SysCtlSleep();                                                      /* 使CM3进入睡眠模式              */
  #endif
    
  while(1) {                                                            /* CM3被唤醒                      */
    TimeDelay(500000);
    GPIOPinWrite(USE_PORT,LED4,~LED4);                                  /* 亮LED                          */
    TimeDelay(500000);
    GPIOPinWrite(USE_PORT,LED4,LED4);                                   /* 灭LED                          */
  }
}
/*********************************************************************************************************
** Function name:           TIMERA_ISR	   
** Descriptions:            定时器0的中断服务程序
**
** input parameters:        无
** output parameters:       无      
** Returned value:          无	 
** Created By:              Weng Heiwei
** Created date:            2008.07.29
*********************************************************************************************************/
void INT_TIMERA_ISR(void)
{
  unsigned long IntStatus;
  IntStatus = TimerIntStatus(TIMER0_BASE,true);                         /* 获取屏蔽后的中断状态           */
  TimerIntClear(TIMER0_BASE,IntStatus);                                 /* 清除中断                       */
  GPIOPinWrite(USE_PORT,LED3,~GPIOPinRead(USE_PORT,LED3));              /* GPIO取反输出                   */
}
/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

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