ilovemoney1 发表于 2011-10-18 14:01:36

ARM s3c2440 不知道怎么,提示是进入了异常模式下。cpu不能运行一条指令

具体启动代码如下:
        IMPORT        main
        IMPORT        close_watch_dog
        IMPORT        clock_init
        IMPORT        memsetup
        IMPORT        copy_steppingstone_to_sdram
        IMPORT        CopyCode2SDRAM
        ;IMPORT nand_init
        ;IMPORT nand_read
        ;IMPORT RdNF2SDRAM
        IMPORT init_irq
        IMPORT IRQ_Handle
        IMPORT led


        AREA        Init,CODE,READONLY;申明代码段
        ENTRY        ;程序入口
        CODE32        ;声明32位ARM 指令
       


    b   Reset

;@ 0x04: 未定义指令中止模式的向量地址
HandleUndef
    b   HandleUndef

;@ 0x08: 管理模式的向量地址,通过SWI指令进入此模式
HandleSWI
    b   HandleSWI

;@ 0x0c: 指令预取终止导致的异常的向量地址
HandlePrefetchAbort
    b   HandlePrefetchAbort

;@ 0x10: 数据访问终止导致的异常的向量地址
HandleDataAbort
    b   HandleDataAbort

;@ 0x14: 保留
HandleNotUsed
    b   HandleNotUsed

;@ 0x18: 中断模式的向量地址
    b   HandleIRQ

;@ 0x1c: 快中断模式的向量地址
HandleFIQ
    b   HandleFIQ
;******************************************************       
Reset
        ldr        sp,=1024
        bl        close_watch_dog
        bl        led;这是我在关闭看门狗后用led作为信号,但是没有运行到这里。 led函数确定是之前我运行过的代码。
        bl        clock_init
        bl        memsetup
        ;bl        nand_init
        ;BL RdNF2SDRAM
                                                            ;@将NAND Flash中地址4096开始的1024字节代码(main.c编译得到)复制到SDRAM中
                                          ;@nand_read_ll函数需要3个参数:
        ldr   r0,   =0x30000000   ;@1. 目标地址=0x30000000,这是SDRAM的起始地址
        mov   r1,   #4096         ;@2.源地址   = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处
        mov   r2,   #16*1024         ;@3.复制长度= 2048(bytes),对于本实验的main.c,这是足够了
        bl        CopyCode2SDRAM
       
       
          msr cpsr_c, #0xd2       ;@ 进入中断模式
    ldr sp, =0x31000000   ;@ 设置中断模式栈指针

    msr cpsr_c, #0xdf       ;@ 进入系统模式
    ldr sp, =0x34000000    ; @ 设置系统模式栈指针,

    ldr lr, =ret_initirq    ;@ 设置返回地址   
    ldr pc, =init_irq       ;@ 调用中断初始化函数
ret_initirq
    msr cpsr_c, #0x5f       ;@ 设置I-bit=0,开IRQ中断

    ldr lr, =halt_loop      ;@ 设置返回地址
    ldr pc, =main         ;@ 调用main函数
halt_loop
        b        halt_loop

HandleIRQ
    sub lr, lr, #4               ; @ 计算返回地址
    stmdb   sp!,    { r0-r12,lr }; @ 保存使用到的寄存器
                                 ; @ 注意,此时的sp是中断模式的sp
                                 ; @ 初始值是上面设置的4096
   
    ldr lr, =int_return            ; @ 设置调用IRQ_Handle函数后的返回地址
    ldr pc, =IRQ_Handle            ; @ 调用中断分发函数,在interrupt.c中
int_return
    ldmia   sp!,    { r0-r12,pc }^ ; @ 中断返回, ^表示将spsr的值复制到cpsr   
        END

我看很久没看出问题,在ADS1.2 编译环境下编译的,不知道是否是ads1.2的环境下设置有问题。其截图如下
我的开发板是mini2440 开始我用vivi选a把bin问价下载到nand 也是没有运行。在ads的R0 base下设置成0x30000000后来用axd调试下载到nor中 改成了0x0
http://cache.amobbs.com/bbs_upload782111/files_46/ourdev_686022OPI57S.jpg
(原文件名:{TPLG4TR9F7R8$3}PH4U0YQ.jpg)

http://cache.amobbs.com/bbs_upload782111/files_46/ourdev_686023OKX2JM.jpg
(原文件名:6~~O`R7MO)$5]FRHBF32SAV.jpg)

http://cache.amobbs.com/bbs_upload782111/files_46/ourdev_686024MY2VGA.jpg
(原文件名:6E74D2CE-AF90-468F-AA22-CCDB72194A35.jpg)

http://cache.amobbs.com/bbs_upload782111/files_46/ourdev_686025FMT0EA.jpg
(原文件名:78AZF5VPUE[~SHRM]MGJ882.jpg)

http://cache.amobbs.com/bbs_upload782111/files_46/ourdev_686026B7EHRH.jpg
(原文件名:X2TT`Z[]J$(V)1GNPD_F

http://cache.amobbs.com/bbs_upload782111/files_46/ourdev_686027I42QLX.jpg
(原文件名:N%556R{M_]_Q~0ZEQV08MI3.jpg)

跪请高手们 指点···········
页: [1]
查看完整版本: ARM s3c2440 不知道怎么,提示是进入了异常模式下。cpu不能运行一条指令