📄 intwakesleep.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 (6000000) /* 睡眠时的系统时钟频率 */
#define Baud (9600) /* 串口通信的波特率 */
#define ClkSrc (0 << 4) /* 深度睡眠模式的时钟源 */
/*********************************************************************************************************
** Function name: main
** Descriptions: 本示例程序演示了GPIO中断和串口接收中断唤醒睡眠状态
**
** input parameters: 无
** output parameters: 无
** Returned value: 无
** Created By: Weng Heiwei
** Created date: 2008.07.29
*********************************************************************************************************/
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | /* 配置PLL */
SYSCTL_XTAL_6MHZ | SYSCTL_OSC_MAIN); /* 运行模式下系统时钟为20MHZ */
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE); /* 使能休眠模块 */
GPIOPadConfigSet(USE_PORT, /* 引脚配置为弱上拉,驱动电流2mA */
OE_LED|BE_LED|KEY_LED|FE_LED|RX_LED|KEY,
GPIO_STRENGTH_2MA,
GPIO_PIN_TYPE_STD_WPU);
GPIODirModeSet(USE_PORT,
OE_LED|BE_LED|KEY_LED|FE_LED|RX_LED,
GPIO_DIR_MODE_OUT);
GPIODirModeSet(USE_PORT,KEY,GPIO_DIR_MODE_IN); /* 设置引脚数据方向 */
GPIOIntTypeSet(USE_PORT,KEY,GPIO_FALLING_EDGE); /* 配置引脚KEY1中断的产生方式 */
GPIOPinIntEnable(USE_PORT,KEY); /* 引脚中断使能 */
IntEnable(INT_GPIOA); /* GPIOA模块中断使能 */
GPIOPinWrite(USE_PORT,OE_LED | BE_LED | KEY_LED | FE_LED | RX_LED,
~(OE_LED | BE_LED | KEY_LED | FE_LED | RX_LED));
TimeDelay(500000);
GPIOPinWrite(USE_PORT,OE_LED | BE_LED | KEY_LED | FE_LED | RX_LED,
(OE_LED | BE_LED | KEY_LED | FE_LED | RX_LED)); /* 测试引脚功能 */
Uart0Init(Baud,1); /* UART0初始化 */
IntMasterEnable(); /* 中断总允许 */
HibernateEnableExpClk(SysCtlClockGet()); /* 使能32KHz的内部振荡器 */
SysCtlPeripheralClockGating(true); /* 置位ACG,开启自动时钟门控 */
HWREG(SYSCTL_DSLPCLKCFG) = (0 << 23) | /* 配置深度睡眠模式下的 */
/* 系统时钟分频值 */
ClkSrc; /* 选择深度睡眠模式下的时钟源 */
while(1) {
Uart0Send("**Enter Sleep!**\r\n",strlen("**Enter Sleep!**\r\n"));
#if SleepMode == 0 /* 深度睡眠模式操作 */
UARTConfigSetExpClk(UART0_BASE, /* 因为系统时钟频率的改变 */
SleepCLK, /* 重新配置串口通信参数 */
Baud,
UART_CONFIG_WLEN_8 |
UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE);
SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_GPIOA); /* 在深度睡眠模式下使能GPIOA */
SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_UART0); /* 在深度睡眠模式下使能UART0 */
SysCtlPeripheralDeepSleepEnable(SYSCTL_PERIPH_HIBERNATE); /* 在深度睡眠模式下使能休眠模块 */
SysCtlDeepSleep(); /* 使CM3进入深度睡眠模式 */
UARTConfigSet(UART0_BASE , /* CM3被中断异常唤醒 */
Baud , /* 重新配置串口通信参数 */
UART_CONFIG_WLEN_8 |
UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE);
#endif
#if SleepMode == 1 /* 睡眠模式操作 */
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOA); /* 在睡眠模式下使能GPIOA */
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_UART0); /* 在睡眠模式下使能UART0 */
SysCtlSleep(); /* 使CM3进入睡眠模式 */
#endif
Uart0Send("Exit Sleep!\r\n",strlen("Exit Sleep!\r\n"));
while(1) {
if (ucBit) {
Uart0Send("RX:",strlen("RX:"));
Uart0Send(ucBuffer,ucNum); /* 回发数据 */
Uart0Send("\r\n",strlen("\r\n"));
ucBit = 0; /* 清发送标志 */
ucNum = 0;
memset(ucBuffer,0,200); /* 清理缓冲区 */
break;
}
}
}
}
/*********************************************************************************************************
** Function name: KEY1_ISR
** Descriptions: GPIO的中断服务子程序
**
** input parameters: 无
** output parameters: 无
** Returned value: 无
** Created By: Weng Heiwei
** Created date: 2008.07.29
*********************************************************************************************************/
void KEY1_ISR(void)
{
unsigned long IntStatus;
GPIOPinWrite(USE_PORT,KEY_LED,~GPIOPinRead(USE_PORT,KEY_LED)); /* GPIO取反输出 */
IntStatus = GPIOPinIntStatus(USE_PORT,true); /* 获取屏蔽后的中断状态 */
GPIOPinIntClear(USE_PORT,IntStatus); /* 清除中断 */
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -