我刚开始学习ARM,对于ARM的中断设置不是很清楚,原来做过51,虽然有差别,但中断的原理还是知道的。
下面这段代码不能工作,就想实现一个按下按钮后改变led的状态,我就知道arm的中断应该如何使用了。
CPU是s3c2440,其中GPG0接按钮,GPB7接led。开发环境为ADS1.2。
请不要给出示例,网上很多都是复制转发的,根本无法编译通过。书上讲的也是好几个按钮和好几个led的示例,没有特别简单能说清楚的。
请各位给予指导,下面的程序要如何修改才能实现利用外部中断实现这个功能,谢谢。
#include "2440addr.h"
#include "2440lib.h"
void __irq int8_int(void);
void __irq int8_int(void) //按下按钮进入中断程序
{
rGPBDAT=0<<7; // //GPB7脚置位,led亮
rEINTPEND=(1<<8);
ClearPending(BIT_EINT8_23);
}
void Main()
{
rSRCPND=rSRCPND; //清除
rINTPND=rINTPND; //同上
rGPGCON=rGPGCON|(1<<1); //设置GPG0脚为EINT
//rGPGUP|=|(1<<0); //引脚使用第二功能
pISR_EINT8_23=(U32)int8_int; //中断指针
rEXTINT1=rEXTINT1&~((1<<0)|(1<<1)|(1<<2)); //设置为下降沿触发
rGPBCON=0x155555; //设置GPB为输出
rINTMSK&=~(1<<5); //设置中断响应
rEINTMASK&=~(1<<8); //同上
rSRCPND|=1<<5; //将中断响应指到EINT8
rINTPND|=1<<5; //同上
rEINTPEND=0xFFFFFF; //挂起中断
rGPBDAT=1<<7; //GPB7脚置位,led灭 |