打印

关于ARM9的中断程序的问题

[复制链接]
1656|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
baidudz|  楼主 | 2011-8-22 16:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序功能:通过按键触发中断,然后用LED灯显示中断。

硬件设置:
开发板:友善之臂mini2440, S3C2440A ,ARM920T
LED1-4:GPB5-8
按键1:EINT8/GPG0

主要代码:

int numbe; //全局变量

void delay(U32 tt)
{
.....
}

static void __irq Eint1(void) //中断服务函数
{
numbe=1;
rSRCPND = BIT_EINT8_23;
rINTPND = BIT_EINT8_23;//rINTPND;
rEINTPEND |= 1<< 8;
}

int Main(int argc, char **argv)
{
U8 key;
U32 mpll_val=0;
int data;
numbe = 0; //numbe赋初值

mpll_val = (92<<12)|(1<<4)|(1);

ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
ChangeClockDivider(key, 12);

MMU_DisableICache();
MMU_DisableDCache();

rINTMOD=0x0; //设置中断模式
rGPGCON = (rGPGCON &0xfffffffc)|0x2;        //GPG[1:0]=10,开EINT8

rEXTINT1 &= ~(7|(7<<0));
rEXTINT1 |= (0|(0<<0));         //EINT8下降沿触发

rEINTPEND |= (1<<8);         //设置悬挂寄存器
rEINTMASK &= ~(1<<8); //设置屏蔽寄存器
rSRCPND = BIT_EINT8_23; //设置源悬挂
rINTPND = BIT_EINT8_23; //设置悬挂
pISR_EINT8_23 = (U32)Eint1; //指定中断服务程序
rINTMSK = ~(BIT_EINT8_23); //设置屏蔽

rGPBCON = 0x155555; //设置GPB为IO
data = 0x10; //设置IO口LED灯的显示
while(1)
{
if(numbe==0)
{
data = data<<1; //data左移
}
else if(numbe==1)
{
data = 0x0; //中断后LED全亮
}
rGPBDAT = data;
delay(200); //延迟
}

return 0;
}

执行结果:写入开发板后,LED显示改变正常,按下按键1后LED停止改变,一直显示按键前的状态。
用AXD和JTAG调试时,按键后会跳到
[0xeafffffe] * b 0x33f01608 ; (Image$$ZI$$Limit + 0x3f00cdc)
反复执行。
各位高手前辈,麻烦指定其中错误,不胜感激!!

相关帖子

沙发
思行合一| | 2011-8-22 19:29 | 只看该作者
中断的问题?

使用特权

评论回复
板凳
6019赵文| | 2011-8-23 14:15 | 只看该作者
是不是一直进入中断就没有出来!?

使用特权

评论回复
地板
3B1105| | 2011-8-29 23:04 | 只看该作者
好难啊,arm啊!

使用特权

评论回复
5
huzixian| | 2011-8-31 20:48 | 只看该作者
进入中断了吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

239

主题

2284

帖子

0

粉丝