ARM技术论坛
直播中

王敏

7年用户 1468经验值
私信 关注
[问答]

ARM S3C2440处理器的中断处理是如何实现的

想实现一个很简单的功能,GPG0脚接一个按钮,GPB7接led。
用中断实现当按下或抬起按钮时,使得led的状态改变。
要求:中断实现,别和我扯用IO做判断,这个我会。我只是想了解下ARM的中断是如何实现的,原理不用讲。我的实验要求就是只实现这样一个很简单的功能,结果没一个正确的,根本无法编译通过。那个中断函数指针书上写的根本不对,都无法编译,请告诉我下面代码哪里不对,需要补充什么和去掉什么,基本的功能能实现我就明白了!
开发环境为ADS1.2。以下代码不知道还少什么,哪里需要改,或者改成什么样就行!

回帖(2)

刘丹

2022-7-26 14:44:20
第一:你的程序一眼看过去为什么没有while(1)?让看门狗自动复位?
嵌入式程序设计的一个终极原则就是要设计成死循环,而且你的程序逻辑上也不对啊!中断处理完了程序总该有个返回的地方,你自己分析下是不是不知道去哪里了。
第二:你的很多程序语句后面的注释也明显有问题,比如rSRCPND|=1<<5;这就,貌似应该注释成清楚EINT8_23中断源挂起标志位吧?这就和你的主函数的第一句rSRCPND=rSRCPND是一个意思,只不过第一句清楚的是所有中断源挂起标志位罢。再比如rINTMSK|=1<<5;貌似这就应该注释成不屏蔽外部中断源EINT8_23(即允许EINT8_23发生中断并且允许CPU去处理中断)吧?等等,好几条语句都注释得答非所问似的。
说点题外话。按键按下有前沿抖动和后延抖动,这里外部中断配置成下降沿触发,很容易造成多次进入外部中断的效果。当然你的中断服务程序只是让灯亮这么一种功能看不出来,如果你原本想设计成第一次进中断led亮,第二次进中断led灭,第三次又亮....你就会发现,根本不是你想的那样,真实的情况会是按一次按键,LED会闪动好几次。这里就是因为按键抖动的原因(这点我经验丰富)。
本人的经验,一般使用按键都用定时器中断消抖处理。
举报

张健

2022-7-26 14:45:02
你这就是一个文件的程序吧,不是那种模块化编程的吧,主要是想看到全部的程序。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分