主题 : 【裸机】学习2440外部按键中断后的理解和疑问 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 27280
精华: 0
发帖: 15
金钱: 75 两
威望: 15 点
贡献值: 0 点
综合积分: 30 分
注册时间: 2010-08-23
最后登录: 2011-06-17
40楼  发表于: 2010-09-08 17:21
"寄存器INTPND,SRCPND,EINTPEND为什么是置1来清除中断请求而不是写0来清除"
我也想不通??
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
41楼  发表于: 2010-09-08 18:26

 回 40楼(kkssmm) 的帖子

硬件就是这样设计的。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 11461
精华: 0
发帖: 89
金钱: 450 两
威望: 93 点
贡献值: 0 点
综合积分: 178 分
注册时间: 2009-12-08
最后登录: 2017-08-29
42楼  发表于: 2010-09-10 20:25
有点不理解:外部按键中断中,当中断发生时,寄存器INTPND,SRCPND,EINTPEND为什么是置1来清除中断请求而不是写0来清除呢?当外部按键没有中断时,寄存器INTPND,SRCPND,EINTPEND中对应的按键中断位会自动写0吗?寄存器INTPND,SRCPND,EINTPEND中各个位的"0=Not occur,1=Occur interrupt"该怎样理解呢

写“1”来清除这个中断是2440的硬件设置的,你只需要遵守这样的游戏规则就可以了,
就像很多其他CPU是只要你读取了这个寄存器,这个寄存器的值就自动清除了一样的道理


没有中断发生时,INTPND,SRCPND,EINTPEND中的所有位都为 0的,
只有当有中断发生了,INTPND,SRCPND,EINTPEND中的中断源对应位会被置1,
这个时候如果你不去清除它的话,下一次中断来了就不会进中断服务函数了,

级别: 侠客
UID: 11461
精华: 0
发帖: 89
金钱: 450 两
威望: 93 点
贡献值: 0 点
综合积分: 178 分
注册时间: 2009-12-08
最后登录: 2017-08-29
43楼  发表于: 2010-09-10 20:35
三、关于中断提示:超级终端提示Dummy_isr error, interrupt number: 5, INTMSK = 0xffffffdf
论坛里面有人求助,看了贴说要把MMU加进去,是这样做的,在Main.c中包含头文件#include "mmu.h" 把
mmu.c和mmu.h加到工程中,接着在主函数中调用MMU_Init();初始化MMU,好像就解决了,不过自己也不知道为什么要这样做,呵呵。


仿真的时候,你的程序是运行在sdram里面的,也就是0x3000_0000处开始运行
你的中断向量表通过仿真器已经放在了0x3000_0000处,

打开mmu是为了把0x3000_0000地址处的值映射到0x0的地方,
因为你的中断向量表是保存在0x0开始的地方,当中断发生时的第一时间
CPU会去0x0地方查中断向量表看是发生了什么中断,是reset还是IRQ还是FIQ还是取数据终止或取指令终止
按键外部中断是IRQ中断,然后CPU会去IRQ开始的地方找到你的中断服务函数,这个时候轮到了你的中断服务函数运行的时间了
所以你不打开MMU就不会进入中断服务函数

还有一种方法就是烧写一个简单的小程序到nandflash的block 0,这个小程序要包含中断向量表
当你上电的时候block 0的东西被CPU复制到了叫作stepping stone的地方,他的地址也是0
这个时候你仿真你的程序,不打开mmu也是可以找到中断服务函数了,因为你有中断向量表了

以上是我个人的一些理解,不一定正确,呵呵
no z no d
级别: 侠客
UID: 12281
精华: 1
发帖: 68
金钱: 750 两
威望: 79 点
贡献值: 1 点
综合积分: 156 分
注册时间: 2010-01-03
最后登录: 2015-08-09
44楼  发表于: 2010-09-12 15:26

 回 43楼(myitlover) 的帖子

谢谢你的回帖~ 对理解中断很有帮助!
嵌入式博大精深
步步为营
级别: 新手上路
UID: 24745
精华: 0
发帖: 10
金钱: 50 两
威望: 10 点
贡献值: 0 点
综合积分: 20 分
注册时间: 2010-07-13
最后登录: 2012-11-13
45楼  发表于: 2010-09-18 20:44
学习
级别: 新手上路
UID: 30728
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
贡献值: 0 点
综合积分: 2 分
注册时间: 2010-10-20
最后登录: 2017-09-13
46楼  发表于: 2010-10-20 21:57
刚好要用到中断 学习学习
级别: 新手上路
UID: 28160
精华: 0
发帖: 29
金钱: 145 两
威望: 29 点
贡献值: 0 点
综合积分: 58 分
注册时间: 2010-09-06
最后登录: 2012-03-23
47楼  发表于: 2010-10-21 17:21

 回 43楼(myitlover) 的帖子

这位大哥分析的很好,一语惊醒梦中人
级别: 新手上路
UID: 30528
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
贡献值: 0 点
综合积分: 2 分
注册时间: 2010-10-18
最后登录: 2010-10-25
48楼  发表于: 2010-10-25 23:30
谢谢解答,这个找了好久。。。
级别: 新手上路
UID: 13783
精华: 0
发帖: 15
金钱: 75 两
威望: 15 点
贡献值: 0 点
综合积分: 30 分
注册时间: 2010-01-28
最后登录: 2017-09-13
49楼  发表于: 2010-10-30 21:04
我个人觉得,那是电路的设计成的,SRCPND位前面可能有一个非门,写1进去经过非门后自然就是清0操作了