可能性判断1:编译生成的main.o没有被完全从nandflash中copy到sdram中运行。
分析head.s文件,也即硬件初始化过程,nandflash的4k由硬件自动从nandflash拷贝到sram中,然后有一个拷贝4k的sram到sdram中,但是nandflash中4k以后的就没人管了哦!!!因此需要一个函数copy nandflash的4k以后的代码到sdram中。
解决办法1: 将nandflash初始化函数和nandflash读函数都固化进init.c中,调试。搞定
主要head.s 代码如下,其他代码可以根据调试信息增添即可难度降低:
@******************************************************************************
@ File: head.S
@ 功能: 设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行
@******************************************************************************
.extern
.text
.global _start
_start:
@******************************************************************************
@ 中断向量,本程序中,除Reset和HandleIRQ外,其它异常都没有使用
@******************************************************************************
@ 0x04: 未定义指令中止模式的向量地址
HandleUndef:
@ 0x08: 管理模式的向量地址,通过SWI指令进入此模式
HandleSWI:
@ 0x0c: 指令预取终止导致的异常的向量地址
HandlePrefetchAbort:
@ 0x10: 数据访问终止导致的异常的向量地址
HandleDataAbort:
@ 0x14: 保留
HandleNotUsed:
@ 0x18: 中断模式的向量地址
@ 0x1c: 快中断模式的向量地址
HandleFIQ:
Reset:
ret_initirq:
halt_loop:
HandleIRQ:
int_return:
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』