本帖最后由 matianyu 于 2012-5-14 16:41 编辑
之前做2440的中断实验,就是进不了中断。然后按照网上的说法在程序中加入头文件#include “mmu.h” 在主函数中加入MMU_Init()函数就能实现中断,对mmu一无所知,使用mmu来实现中断有两种方法:
一种是将mmu.c文件中MMU_SetMTT(0x00000000,0x03f00000,(int)__ENTRY,RW_CB)的(int)__ENTER改成0x30000000;
一种是在2440init.s文件中加入下面程序
EXPORT __ENTRY
ENTRY
__ENTRY。自己不知道为什么这么干。。自己这样试了一下果断很靠谱。
再次谷歌。。。
试了第二种方法:将程序下载到nand flash的0x0地址处,uboot菜单选择a,然后将程序下载到nand flash中,结果也靠谱。。
看了网上说的,谈谈自己的理解:我的板子有两种启动方式,通过开关可以实现nor flash启动和nand flash启动,我将开关拨到nor flash一边,地址为0x0的地方接的是nor flash 。之所以进不了中断,是因为我用的jlink调试,把程序下载到地址为0x30000000的SDRAM中,因此2440init.s中的中断向量表被放在0x30000000开始的地方。地址为0x0的地方不存在中断向量表。。发生IRQ的时候,PC指向地址为0x00000018处,此处不存在所谓的中断处理的入口地址。自然找不到相关中断处理程序处理中断。这样理解可否?:sleepy:
找个时间好好理解下MMU。。。为后面操作系统做下准备。。。 |