#include "exti.h"
#include "control.h"
//#include "key.h"
#include "delay.h"
#include "usart.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//Mini STM32开发板
//外部中断 驱动代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2010/12/01
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 正点原子 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
/*===============================================================================
全局变量
================================================================================*/
u8 ControlFlag =0; //开关控制标志
u8 Reset1Flag = 0; //复位开关K1标志
u8 Reset2Flag = 0; //复位开关K2标志
u8 ServerFlag = 0; //服务器+5V标志
u8 SwitchFlagLong = 0; //机器总开关长按
u8 SwitchFlagShort = 0; //机器总开关短按
//外部中断1服务程序 总开关
void EXTI1_IRQHandler(void)
{
u8 i;
delay_ms(30);//消抖
if(KEY1 == 1)
{
#ifdef _DEVICEFLAG_
for(i=0;i<2;i++)
{
delay_ms(1000);
}
if(KEY1 == 0) //按键2
{
ControlFlag = 2;
}
else if(KEY1 == 1)
{
ControlFlag = 1;
}
#else
if(KEY1 == 1)
{
ControlFlag = 1;
}
#endif
}
EXTI->R=1<<1; //清除LINE1上的中断标志位
}
//外部中断2服务程序 复位开关2
void EXTI2_IRQHandler(void)
{ u8 i;
delay_ms(30);
if(KEY2 == 1)
{
for(i=0;i<2;i++)
{
delay_ms(1000);
}
if(KEY2 == 0)
{
ControlFlag = 6;
}
else if (KEY2 == 1)
{
ControlFlag = 5;
}
}
EXTI->R=1<<2; //清除LINE2上的中断标志位
}
//外部中断3服务程序 复位开关1
void EXTI3_IRQHandler(void)
{ u8 i;
delay_ms(30);
if(KEY3 == 1)
{
for(i=0;i<2;i++)
{
delay_ms(1000);
}
if(KEY3 == 0)
{
ControlFlag = 4;
}
else if(KEY3 == 1)
{
ControlFlag = 3;
}
}
EXTI->R=1<<3; //清除LINE3上的中断标志位
}
//外部中断初始化程序
//初始化PA0,PA1,PA2,PA3为中断输入.
void EXTIX_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
// JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD
GPIOA->CRL&=0XFFFF0000;//PA0,PA1,PA2,PA3设置成输入
GPIOA->CRL|=0X00008888;
// GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入
// GPIOA->CRH|=0X80800000;
// GPIOA->ODR|=1<<13; //PA13上拉,PA0默认下拉
// GPIOA->ODR|=1<<15; //PA15上拉
// Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发
Ex_NVIC_Config(GPIO_A,1,RTIR); //上升沿触发
Ex_NVIC_Config(GPIO_A,2,RTIR); //上升沿触发
Ex_NVIC_Config(GPIO_A,3,RTIR); //上升沿触发
MY_NVIC_Init(2,1,EXTI1_IRQChannel,2); //抢占2,子优先级2,组2
MY_NVIC_Init(2,2,EXTI2_IRQChannel,2); //抢占2,子优先级2,组2
MY_NVIC_Init(2,2,EXTI3_IRQChannel,2); //抢占2,子优先级2,组2
// MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2
}
芯片为at89c51
|