转自:http://blog.csdn.net/qdlovecsj/article/details/6856641
三、关于中断提示:超级终端提示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也是可以找到中断服务函数了,因为你有中断向量表了
论坛里面有人求助,看了贴说要把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也是可以找到中断服务函数了,因为你有中断向量表了