wdooy 发表于 2010-12-16 19:53:52

ARM9 S3C2440 启动代码 到这就飞了 并且复位了 为什么? 初学者希望前辈指点下 谢谢

; boot from NAND flash
      mov   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;
}

rodger 发表于 2010-12-16 20:17:26

估计data abort了。

bobowu 发表于 2010-12-16 20:21:15

检查一下调用c函数时传递进来的参数是否正确.

wdooy 发表于 2010-12-17 22:13:43

bootload 怎么也不好用 我也不知道我的硬件是不是有问题了我还出现了一个问题 别人做的bin 我用就可以   arm 太难了 谢谢楼上的回答 我会努力的

lanxing18 发表于 2010-12-17 22:35:42

你是用的软仿真还是硬件联调?

wdooy 发表于 2010-12-18 09:09:09

回复【4楼】lanxing18
-----------------------------------------------------------------------

我用硬件在sdram上调试 好用 但是 我修改ao后00x00000000用h-jtag flash 烧写后 总是到上面所说的位置又返回到了 复位地址。 为什么我用仿真好用 ,硬件不好用那 难道我还有设置不对的地方,全看说明书来操作的那,迷茫了 对arm都害怕了。 谢谢四楼的关注!

usecool 发表于 2010-12-18 14:35:20

堆栈、外部ram初始化

wdooy 发表于 2010-12-20 15:15:40

搞定了 起始地址给弄错了 我吧转移的地址设成0x000000000了 当然要复位了 谢谢各位了

ymj2010 发表于 2011-3-2 14:27:20

mark!
页: [1]
查看完整版本: ARM9 S3C2440 启动代码 到这就飞了 并且复位了 为什么? 初学者希望前辈指点下 谢谢