📄 main.c
字号:
/****************************************Copyright (c)****************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**--------------------------------------------------------------------------------------------------------
** Created by: 李仲生
** Created date: 2007-3-26
** Version: 1.0
** Descriptions: GPIO中断唤醒掉电CPU,同时产生中断。
**--------------------------------------------------------------------------------------------------------
** Modified by: wankai
** Modified date: 2008-07-08
** Version:
** Descriptions: 对程序的风格以及注释略作调整,并检查代码。
**
** Rechecked by: Litiantian
*********************************************************************************************************/
#include "main.h"
#define BEEP (1 << 30) /* P3.30控制BEEP */
#define KEYPin (1 << 12) /* P0.12为P0口中断输入脚 */
#define GPIOWAKE (1 << 7) /* 使能GPIO脚掉电唤醒位 */
/*********************************************************************************************************
** 函数名称 :IRQ_Eint3
** 函数功能 :GPIO中断服务程序
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************/
void __irq IRQ_Eint3(void)
{
IO0IntClr = KEYPin; /* 清零P0.12中断 */
VICVectAddr = 0; /* 向量中断结束 */
}
/*********************************************************************************************************
** 函数名称 :main
** 函数功能 :演示GPIO中断唤醒掉电的CPU
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************/
int main(void)
{
PINSEL0 = 0x00000000; /* 管脚连接GPIO */
PINSEL7 &=~(3<<28) ;
FIO3DIR = BEEP; /* 设置BEEP控制口为输出 */
IO0IntEnF = KEYPin; /* 设置P0.12为下降沿中断 */
/* 初始化中断向量 */
VICIntSelect = 0x00000000; /* 设置所有中断分配为IRQ中断*/
VICVectPri17 = 0; /* 外部中断3为最高优先级中断*/
VICVectAddr17 = (uint32)IRQ_Eint3; /* 设置中断服务程序地址 */
INTWAKE = GPIOWAKE; /* GPIO中断唤醒芯片 */
VICIntEnable = 1 << 17; /* 使能EINT3中断 */
IRQEnable(); /* 使能IRQ中断 */
FIO3SET = BEEP;
while (1) {
PCONP = 0x800; /* 关闭定时器、RTC等功能部件*/
PCON = 0x02; /* 系统进入掉电模式 */
/* 当系统被唤醒后,取反BEEP控制 */
if ((FIO3SET & BEEP) == 0) {
FIO3SET = BEEP;
}
else {
FIO3CLR = BEEP;
}
}
return (0);
}
/*********************************************************************************************************
** End Of File
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -