EXTINT外部中断流程

 

首先使用PINSEL0和PINSEL1来配置相应的I/O口工作模式,设置相应的中断位→设置相应的输入输出→使用VICIntSelect来选择使用FIQ或者IRQ(0)→VICIntEnable中断使用→使用EXTINT设置中断标志,写入1将方位清零→while(1)等等中断发生。
在中断子函数中,首先使用VICIRQStatus读出当前的中断状态→函数功能完成→清除相应中断→设置向量地址寄存器VICVectAddr(当任何分配给向量IRQ Slot的中断请求或软件中断使能,分配为IRQ并声明时,读取该寄存器将返回最高优先级微量地址寄存器中的地址。否则,返回默认微量地址寄存器中的地址。)

#include "config.h"
#define LEDCON 0x00000800

/****************************************************************************
功能:外部中断1处理
****************************************************************************/

void __irq IRQ_Eint1(void)
{ uint32 i;

i=VICIRQStatus;                  //读出VICIRQStatus的值
i=IOSET;                         //读出当前LED2控制值
if((i&LEDCON)==0)               //控制LED2控制值
{ IOSET=LEDCON;
}

else

{ IOCLR=LEDCON;
}
while((EXTINT&0x02)!=0)          //等待外部中断信号恢复为高电平
{ EXTINT=0x02;                   //清除EINT1中断标志
}

VICVectAddr=0x00;
}

/****************************************************************************
* 名称:main()
* 功能:
****************************************************************************/
int main(void)
{
PINSEL0=0x20000000;//这里选择为外部中断1,
PINSEL1=0x00000000;
IODIR=LEDCON;//控制引脚输入输出
IOSET=LEDCON;//点亮相应的灯
IOCLR=LEDCON; //熄灭相应的灯,但上面那一句有什么作用,好象多余呀
VICIntSelect=0;//中断功能选择
VICIntEnable=0x00008000;//在某一位上使能中断
VICVectCntl1=0x2F;
        VICVectAddr1=(int)IRQ_Eint1;
EXTINT=0x07;
   while(1);
}

说明:VICVectAddr(当任何分配给向量IRQ Slot的中断请求或软件中断使能,分配为IRQ并声明时,读取该寄存器将返回最高优先级微量地址寄存器中的地址。否则,返回默认微量地址寄存器中的地址。)

VICVectCntl每一个寄存器控制16个微量IRQ Slot中的一个,Slot0优先级最高。在VICVectCntl寄存器中禁止一个微量IRQ Slot不会禁止中断本身,中断只是变为非向量的形式。为1 表示向量IRQ使能,

转自:http://hi.baidu.com/sofeng/blog/item/be73800ab3df863ab1351d9a.html/cmtid/cb2abc3e669e3cf4838b13c8

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值