//***************************************首先,第一步我们要设置好中断输入的IO脚,中断信号总得有个门进是不是??*****************************
void Int_init(void)
{
u32 temp,temp1;
//******************************************************************* 中断第一步 使能复用时钟 ***************************************************
RCC->APB2ENR|=0x01; //复用时钟是什么,我不知道,反正中断一定要使能,要明白你们问原子老大,并XO他书上没写明白.
//******************************************************************* 中断第二步 使能相应的中断线 ***********************************************
//打开PA0的中断线
AFIO->EXTICR[0] &= 0xFFFFFFF0;
AFIO->EXTICR[0] |= 0xFFFFFFF0; //<===这是脱裤子放屁,只是大家看明白一点而已.0代表A口,1代表B口,以此类推,6代表G口.参考手册第126--128页
//打开PA13的中断线
AFIO->EXTICR[3] &= 0xFFFFFF0F;
AFIO->EXTICR[3] |= 0xFFFFFF0F; //<===这是脱裤子放屁,只是大家看明白一点而已.
//打开PA15的中断线
AFIO->EXTICR[3] &= 0xFFFF0FFF;
AFIO->EXTICR[3] |= 0xFFFF0FFF; //<===这是脱裤子放屁,只是大家看明白一点而已.
//******************************************************************* 中断第三步 使能相应的中断线的触发条件**************************************
EXTI->FTSR|= 1<<0; //PA0的中断线下降沿触发
EXTI->RTSR|=1<<13; //PA13的中断线上升沿触发
EXTI->RTSR|=1<<15; //PA15的中断线上升沿触发
//******************************************************************* 中断第四步 使能相应的中断函数号 **********************************************
NVIC->ISER[0]|=1<<6; //使能PA0的中断函数
NVIC->ISER[1]|=1<<8; //使能PA13,PA15的中断函数.因为工厂偷工减料,PA10至PA15被迫同一个坑拉屎!!就是说,所有口(A到G)的10到15脚都用同一个中断函数入口
//******************************************************************* 中断第五步 开放相应的中断请求 ***********************************************
EXTI->IMR |= 1<<0; // 开放 PA0的中断线请求
EXTI->IMR |= 1<<13; // 开放 PA13的中断线请求
EXTI->IMR |= 1<<15; // 开放 PA15的中断线请求
//******************************************************************* 中断第六步 设定相应口的 中断优先值 ******************************************
// 如果不想设嵌套的中断,这步可以不要
NVIC->IPR[2] &=0XFF00FFFF; //抹掉对应的第6号中断
NVIC->IPR[2] |=0XFF40FFFF; //写进优先级数0X10=0100
NVIC->IPR[10] &=0XFFFFFF00; //抹掉对应的第40号中断 , 因为工厂偷工减料,PA10至PA15被迫同一个坑拉屎!!就是说,所有口(A到G)的10到15脚都用同一个中断优先值
NVIC->IPR[10] |=0XFFFFFF80; //写进优先级数0X10=1000
//******************************************************************* 中断第六步 设定相应口的 中断优先值 ******************************************
// 如果不想设嵌套的中断,这步可以不要
temp1=0x5; //设成第3组,最高二位是抢断优先级优先值,后两位是普通优先值
temp1<<=8;
temp=SCB->AIRCR; //读取先前的设置
temp&=0X0000F8FF; //清空先前分组
temp|=0X05FA0000; //写入钥匙
temp|=temp1;
SCB->AIRCR=temp; //设置分组
}
//************************************************************************** 坑爹的中断设置完!!!!! ****************************************************
汗呀,比51的中断设置复杂太太多了!!!
4点半了,中断服务程式我们明天写,以上的 正确与否强烈要求原子老大斧正一下!!!!!!!