• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : 请高手帮忙--裸机中断程序问题! 复制链接 | 浏览器收藏 | 打印
新手上路,敬请指教!
级别: 新手上路
UID: 17158
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
综合积分: 44 分
注册时间: 2010-03-25
最后登录: 2012-03-17
楼主  发表于: 2010-05-11 15:55

 请高手帮忙--裸机中断程序问题!

管理提醒: 本帖被 kasim 从 Linux技术交流专区 移动到本区(2010-05-11)
最近写了个键盘的裸机按键中断程序,但是下载到SDRAM运行时,总是提示Dummy_isr error, interrupt number: 5, INTMSK = 0xffffffdf
网上搜索了这个问题,说是需要在2440init 里面加入MMU 的入口函数,哪位大哥帮忙给出具体的实现方法。非常感谢!
向高手学习嘿嘿O(∩_∩)O~
级别: 新手上路
UID: 19433
精华: 0
发帖: 24
金钱: 120 两
威望: 24 点
综合积分: 48 分
注册时间: 2010-04-19
最后登录: 2010-11-06
1楼  发表于: 2010-05-12 10:45

 回 楼主(lyj666888) 的帖子

我也遇到这个问题了,我是在main.c文件中包含了“mmu.h”文件,在main()函数中添加MMU_Init();但是还是有问题,出现错误,Undefined symbol MMU_Init,你要是解决了这个问题回一下哈O(∩_∩)O~加油
新手上路,敬请指教!
级别: 新手上路
UID: 17158
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
综合积分: 44 分
注册时间: 2010-03-25
最后登录: 2012-03-17
2楼  发表于: 2010-05-12 22:41

 回 1楼(tiger8) 的帖子

我做的在下面,但是终端还是出问题,就是按键的话,按下第一个键,第一个灯亮,但是再按其他键就没有反应了。我下载到SDRAM里面运行可以,但是烧写到NAND FLASH里面就是不行,在思考怎么回事呢。
附件: keyintruppt.zip (108 K) 下载次数:99
新手上路,敬请指教!
级别: 新手上路
UID: 17158
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
综合积分: 44 分
注册时间: 2010-03-25
最后登录: 2012-03-17
3楼  发表于: 2010-05-12 22:42

 回 2楼(lyj666888) 的帖子

是中断出问题,写错字了。不好意思!
新手上路,敬请指教!
级别: 新手上路
UID: 17158
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
综合积分: 44 分
注册时间: 2010-03-25
最后登录: 2012-03-17
4楼  发表于: 2010-05-13 21:44

 回 1楼(tiger8) 的帖子

下面这个程序是我搞好了的,键盘中断程序。KI---K4键。对应LED灯闪烁。下载到SDRAM里面可以运行,但是烧写到NAND FLASH 里面不能运行  你要是解决了告诉我下!
[ 此帖被lyj666888在2010-05-14 19:23重新编辑 ]
附件: keyled.zip (123 K) 下载次数:148
级别: 新手上路
UID: 31613
精华: 0
发帖: 5
金钱: 35 两
威望: 7 点
综合积分: 10 分
注册时间: 2010-11-02
最后登录: 2010-11-10
5楼  发表于: 2010-11-08 19:39
这个问题,你可以现在main.c中加头文件mmu.h,然后把mmu.c拷到你要编译 程序的文件夹下,在main()函数中添加MMU_Init(),程序就可以自动的找到mmu_init了。这样后,就行了
级别: 新手上路
UID: 17926
精华: 0
发帖: 18
金钱: 90 两
威望: 18 点
综合积分: 36 分
注册时间: 2010-04-03
最后登录: 2011-01-11
6楼  发表于: 2010-11-08 20:12

 回 5楼(jytian) 的帖子

中断的问题困扰我好久,看了这个才通。但不太清楚为什么,求解释,谢谢。为什么MMU_Init加上就可以触发中断了
级别: 新手上路
UID: 31613
精华: 0
发帖: 5
金钱: 35 两
威望: 7 点
综合积分: 10 分
注册时间: 2010-11-02
最后登录: 2010-11-10
7楼  发表于: 2010-11-08 20:18
http://www.aiothome.net/simple/index.php?t5717.html
仿真的时候,你的程序是运行在sdram里面的,也就是0x3000_0000处开始运行
你的中断向量表通过仿真器已经放在了0x3000_0000处,

打开mmu是为了把0x3000_0000地址处的值映射到0x0的地方,
因为你的中断向量表是保存在0x0开始的地方,当中断发生时的第一时间
CPU会去0x0地方查中断向量表看是发生了什么中断,是reset还是IRQ还是FIQ还是取数据终止或取指令终止
按键外部中断是IRQ中断,然后CPU会去IRQ开始的地方找到你的中断服务函数,这个时候轮到了你的中断服务函数运行的时间了
所以你不打开MMU就不会进入中断服务函数
级别: 新手上路
UID: 11930
精华: 0
发帖: 33
金钱: 165 两
威望: 33 点
综合积分: 66 分
注册时间: 2009-12-25
最后登录: 2014-07-30
8楼  发表于: 2010-11-16 21:41
ARM的MMU的作用:负责虚拟地址与物理地址的转换。
MMU_init程序向内存中写入一个转换表,负责地址间转换,恰恰中断需要MMU。
说到这里,不禁要问,为什么闪灯的程序不需要呢?
zzd
级别: 新手上路
UID: 32578
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2010-11-18
最后登录: 2010-11-18
9楼  发表于: 2010-11-18 08:41
我也学了一些日子的ARM,但是对MMU到底是做什么用的,还是理解不上去,今天真是有很大的收获呀!
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go