我使用的ZLG2200开发板(SMART 2200),在做周立功SmartArm7ARM嵌入式系统实验教程(二)中2.14_外部中断实验1,按照书中代码做完源程序,调试发现不能响应中断,我第一次,我不知道为什么,请大家帮帮我,帮我看看是什么原因 代码是书中: #include "config.h" #define BEEPCON 1<<7 // P0.7引脚控制B1,低电平蜂鸣,1<<7 等价于 0x80
/**************************************************************************** * 名 称:IRQ_Eint3() * 功 能:外部中断EINT3服务函数,取反B1控制口。 * 入口参数:无 * 出口参数:无 ****************************************************************************/ void __irq IRQ_Eint3(void) { uint32 i; i = IO0SET; // 读取当前B1控制值 if( (i&BEEPCON)==0 ) // 控制B1输出取反 { IO0SET = BEEPCON; } else { IO0CLR = BEEPCON; } /* 等待外部中断信号恢复为高电平(若信号保持为低电平,中断标志会一直置位) */ while( (EXTINT&1<<3)!=0 ) { EXTINT = 1<<3; // 清除EINT3中断标志,1<<3 等价于 0x08 } VICVectAddr = 0; // 向量中断结束 }
/**************************************************************************** * 名 称:main() * 功 能:初始化外部中断3(EINT3)为非向量中断,并设置为电平触发模式,然后等待外部中断。 * 说 明:在STARTUP.S文件中使能IRQ中断(清零CPSR中的I位)。 ****************************************************************************/ int main(void) { PINSEL1 = 3<<8; // 设置管脚连接,P0.20设置为EINT3 // 3<<8 等价于 0x00000180 IO0DIR = BEEPCON; // 设置B1控制口为输出,其它I/O为输入 IO0CLR = BEEPCON; EXTMODE = 0x00; // 设置EINT3中断为电平触发模式 /* 打开EINT3中断(使用非向量IRQ) */ VICIntSelect = 0x00000000; // 设置所有中断分配为IRQ中断 VICDefVectAddr = (int32)IRQ_Eint3; // 设置中断服务程序地址 EXTINT = 1<<3; // 清除EINT3中断标志 VICIntEnable = 1<<17; // 使能EINT3中断,EINT3在Bit17上 while(1); // 等待中断 return(0); }
|