搜索
bottom↓
回复: 0

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

[复制链接]

出0入0汤圆

发表于 2011-10-18 14:01:36 | 显示全部楼层 |阅读模式
具体启动代码如下:
        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

(原文件名:{TPLG4TR9F7R8$3}PH4U0YQ.jpg)


(原文件名:6~~O`R7MO)$5]FRHBF32SAV.jpg)


(原文件名:6E74D2CE-AF90-468F-AA22-CCDB72194A35.jpg)


(原文件名:78AZF5VPUE[~SHRM]MGJ882.jpg)


(原文件名:X2TT`Z[]J$(V)1GNPD_F[9J.jpg)


(原文件名:N%556R{M_]_Q~0ZEQV08MI3.jpg)

跪请高手们 指点···········

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 10:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表