[讨论] 关于s3c2440从nand flash的疑惑

zzfei90   2012-11-29 16:34 楼主
我知道2440从nand flash启动的时候会先由硬件把前4K的代码搬到片内的sram中去,然后从片内的sram开始运行,再把nand flash中的程序搬到外部sdram里面去,然后程序由内部sram跳到外部sdram去执行,这里我就有个疑惑,把程序从nand flash搬到外部sdram的时候,已经搬到内部sram的那4K还要搬吗?
还有一个问题,也是我最想问的问题,程序从nand flash搬到外部sdram后,中断向量表应该有两份吧,一份在片内sram(地址0x00000000)的起始地址处,一份在片外的sdram中(地址0x30000000),当发生中断的时候,PC会跳到地址0处,如果已经初始化了MMU的话,程序会跳到映射后的地址,也就是0x30000000处,这样的话,中断程序理所当然可以正常执行。但是,如果没有开MMU的话,程序跳到物理地址的0x00000000处,这里也有一份中断向量表啊,应该也能够正常的跳到中断函数去执行啊,可是为什么事实不行呢?手册上有说这4K的sram在启动后可以用作其他用途,但是我没有用啊,那内容应该还是原来的内容,那为什么不能正常跳到中断函数里去呢?问题在哪里?小弟用的是天嵌的开发板,前几天刚到手的。

回复评论 (3)

回复 楼主 zzfei90 的帖子

前4K的代码如果后面不再需要用到,可以不拷贝,不是不能拷贝,是不需要拷贝。如果后面还需要用到,自然一定要拷贝。

中断向量表的问题,你编译的程序,运行时域是在sdram的,如果跳转到0x0中,汇编代码里面你看看中断向量表是怎么写的,如果修改PC指针是按照相对地址来的,也就是加偏移量,如果加的偏移量不对(在运行时域是对的),这个程序就会出问题了,具体的要看代码,不好说。你可以用调试器自己看看到底是怎么回事。
点赞  2012-12-18 08:59
拷贝不拷贝都可以。不拷贝的话,你要注意加载pc的地址,一定要正确。我个人建议都拷贝的好,因为这样不容易出错,直接给pc加载一个相对地址就可以了,且不容易出错。方便!至于中断还没看到这里来。4kb的sram看芯片手册。从norflash启动以后,这个4kb就作为sdram后面的空间了。希望能帮到你。
点赞  2013-1-15 09:55
顶一个,嵌入式学习中
点赞  2013-3-4 20:27
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复