ARM9 S3C2440 启动代码 到这就飞了 并且复位了 为什么? 初学者希望前辈指点下 谢谢
; boot from NAND flashmov r0,r1
sub r2,r2,r1
mov r1,#0
ldr lr, =On_The_Ram
b nand_read_ll///调用后没有问题
///////////////////////////上面是启动代码里面的 下面是调用函数////////
int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)
{
int i;
unsigned long addr, baddr;
if ((start_addr & NAND_BLOCK_MASK)/* || (size & NAND_SECTOR_MASK)*/) {
return -1; /* invalid alignment */
}
/* chip Enable */
NAND_CHIP_ENABLE;
for(i=0; i<100; i++);
for(baddr=start_addr&~NAND_BLOCK_MASK; size>0; baddr+=NAND_BLOCK_SIZE) {
/* READOOB */
NAND_CLEAR_RB;
NFCMD = NAND_CMD_READOOB;
/* Write Address */
NFADDR = (5) & 0xff;
NFADDR = (baddr >> 9) & 0xff;
NFADDR = (baddr >> 17) & 0xff;
NFADDR = (baddr >> 25) & 0xff;
NAND_DETECT_RB
if ((NFDATA & 0xff)!= 0xff) {
//Uart0_Printf ("bad block at %d\r\n",baddr>>14);
continue; //bad block
}
for(addr=0; addr<NAND_BLOCK_SIZE && (size>0); size-=NAND_SECTOR_SIZE,addr+=NAND_SECTOR_SIZE) {
/* READ0 */
NAND_CLEAR_RB;
NFCMD = 0;
/* Write Address */
NFADDR = (baddr+addr) & 0xff;
NFADDR = ((baddr+addr) >> 9) & 0xff;
NFADDR = ((baddr+addr) >> 17) & 0xff;
NFADDR = ((baddr+addr) >> 25) & 0xff;
NAND_DETECT_RB
for(i=0; i < NAND_SECTOR_SIZE; i++) {
*buf = (NFDATA & 0xff); //////函数在这就死机了不知道为什么希望得到指点
buf++;
}
}
}
/* chip Disable */
NAND_CHIP_DISABLE;
return 0;
} 估计data abort了。 检查一下调用c函数时传递进来的参数是否正确. bootload 怎么也不好用 我也不知道我的硬件是不是有问题了我还出现了一个问题 别人做的bin 我用就可以 arm 太难了 谢谢楼上的回答 我会努力的 你是用的软仿真还是硬件联调? 回复【4楼】lanxing18
-----------------------------------------------------------------------
我用硬件在sdram上调试 好用 但是 我修改ao后00x00000000用h-jtag flash 烧写后 总是到上面所说的位置又返回到了 复位地址。 为什么我用仿真好用 ,硬件不好用那 难道我还有设置不对的地方,全看说明书来操作的那,迷茫了 对arm都害怕了。 谢谢四楼的关注! 堆栈、外部ram初始化 搞定了 起始地址给弄错了 我吧转移的地址设成0x000000000了 当然要复位了 谢谢各位了 mark!
页:
[1]