📄 hibernatertc.c
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name: hibernateRTC.c
** Latest modified Date: 2007-09-16
** Latest Version: 1.0
** Descriptions: The hibernate function example template
**
**--------------------------------------------------------------------------------------------------------
** Created by: Zhao shimin
** Created date: 2007-09-16
** Version: 1.0
** Descriptions: The original version
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
*********************************************************************************************************/
/* 系统库函数头文件 */
#include "hw_ints.h"
#include "hw_memmap.h"
#include "hw_types.h"
#include "gpio.h"
#include "sysctl.h"
#include "hibernate.h"
#include "interrupt.h"
/********************************************************************************************************/
#define PIN1 GPIO_PIN_4 /* PA4控制LED */
#define PIN2 GPIO_PIN_5 /* PA5控制LED */
#define PINS (PIN1 | PIN2)
#define HIBCTL (*(volatile unsigned long *) 0x400FC010) /* 休眠控制寄存器 */
/********************************************************************************************************/
/*********************************************************************************************************
** Function name: HIBRTCMatch0wake
**
** Descriptions: 用wake管脚唤醒中断服务程序,用于唤醒CPU
**
** input parameters: NONE
** output parameters: NONE
**
** Returned value: NONE
**
** Created by: Zhao shimin
** Created Date: 2007/09/16
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void HIBRTCMatch0wake (void)
{
HIBCTL &= ~(1<<1); /* 清除休眠标志 */
/* 清除所有休眠中断标志 */
HibernateIntClear(HIBERNATE_INT_PIN_WAKE | HIBERNATE_INT_LOW_BAT |
HIBERNATE_INT_RTC_MATCH_0 | HIBERNATE_INT_RTC_MATCH_1);
HibernateRTCSet(0); /* RTC计数初值设为0 */
GPIOPinWrite(GPIO_PORTA_BASE, PIN2, ~PIN2);
}
/*********************************************************************************************************
** Function name: main
**
** Descriptions: 主函数初始化休眠模块,使LED闪烁并进入休眠状态
**
** input parameters: NONE
** output parameters: NONE
**
** Returned value: NONE
**
** Created by: Zhao shimin
** Created Date: 2007/09/16
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
int main (void)
{
unsigned long i, k;
SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE); /* 给休眠模块提供时钟 */
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); /* 给GPIOA提供时钟 */
GPIOPadConfigSet(GPIO_PORTA_BASE, PINS, GPIO_STRENGTH_2MA,
GPIO_PIN_TYPE_STD); /* 设置管脚为上拉驱动 */
GPIODirModeSet(GPIO_PORTA_BASE, PINS, GPIO_DIR_MODE_OUT); /* 设置管脚为输出 */
HibernateEnable(); /* 使能休眠模块 */
HibernateClockSelect(HIBERNATE_CLOCK_SEL_DIV128); /* 对输入时钟进行128分频 */
HibernateRTCEnable(); /* RTC使能 */
HibernateRTCSet(0);
for( i = 0 ;i < 20000; i++); /* 延时用于休眠模块寄存器写操作*/
HibernateRTCMatch0Set(HibernateRTCGet() + 10); /* 设定匹配值10s */
for( i = 0 ;i < 20000; i++); /* 延时用于休眠模块寄存器写操作*/
HibernateWakeSet(HIBERNATE_WAKE_RTC); /* 设置RTC匹配唤醒 */
HibernateIntEnable(HIBERNATE_INT_RTC_MATCH_0); /* 使能RTC匹配唤醒 */
/* 清除休眠模块的所有中断源的中断标志 */
HibernateIntClear(HIBERNATE_INT_PIN_WAKE | HIBERNATE_INT_LOW_BAT |
HIBERNATE_INT_RTC_MATCH_0 | HIBERNATE_INT_RTC_MATCH_1);
IntEnable(INT_HIBERNATE); /* 允许休眠模块中断 */
IntMasterEnable(); /* 开放总中断 */
while (1) {
for (k = 0; k < 16; k++) {
for (i = 0; i < 200000; i++);
GPIOPinWrite(GPIO_PORTA_BASE, PIN1, ~PIN1);
for (i = 0; i < 200000; i++);
GPIOPinWrite(GPIO_PORTA_BASE, PIN1, PIN1);
}
GPIOPinWrite(GPIO_PORTA_BASE, PIN2, PIN2);
HibernateRequest(); /* 使CPU进入休眠状态 */
}
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -