打印

求助,44bo程序烧写问题

[复制链接]
3804|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhaoem82|  楼主 | 2007-1-3 17:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的硬件系统是44b0+sst39vf1601,使用h-jtag调试时正常,但使用H-flasher将程序下载到flash中程序不能运行。我下载开发板提供的目标代码正常。
我ads中的arm linker中的ro-base中设置为0x0(flash起始地址),rw-base中设置为0X0C000000(我的开发板中的sdram的起始地址是0X0C000000)。
并在layout中设置起止部分为44binit.o,section为init
附启动程序,请大家帮忙看看,谢谢!
  INCLUDE ..\inc\option.s
    INCLUDE ..\inc\memcfg.s
    EXPORT START

;****************************************************************************
;存储器空间
;GCS6 64M 16bit(8MB) DRAM/SDRAM(0xc000000-0xc7fffff)
;APP    RAM=0xc000000~0xc7effff 
;44BMON RAM=0xc7f0000-0xc7fffff
;STACK       =0xc7ffa00           

;****************************************************************************
;中断控制预定义
INTPND        EQU    0x01e00004
INTMOD        EQU    0x01e00008
INTMSK        EQU    0x01e0000c
I_ISPR        EQU    0x01e00020
I_CMST        EQU    0x01e0001c

;****************************************************************************
;看门狗定时器预定义
WTCON        EQU    0x01d30000

;****************************************************************************
;系统时钟预定义
PLLCON        EQU    0x01d80000
CLKCON        EQU    0x01d80004
LOCKTIME    EQU    0x01d8000c
    
;****************************************************************************
;存储器控制预定义
REFRESH        EQU 0x01c80024

;****************************************************************************
;BDMA目的寄存器
BDIDES0     EQU 0x1f80008
BDIDES1     EQU 0x1f80028

;****************************************************************************
;预定义常数(常量)
USERMODE    EQU    0x10
FIQMODE        EQU    0x11
IRQMODE        EQU    0x12
SVCMODE        EQU    0x13
ABORTMODE   EQU    0x17
UNDEFMODE   EQU    0x1b
MODEMASK    EQU    0x1f
NOINT        EQU    0xc0

;****************************************************************************
;检查是否使用tasm.exe进行编译
    GBLL    THUMBCODE
    [ {CONFIG} = 16    
THUMBCODE SETL    {TRUE}
    CODE32
    |   
THUMBCODE SETL    {FALSE}
    ]

    [ THUMBCODE
    CODE32   ;for start-up code for Thumb mode
    ]

    MACRO
$HandlerLabel HANDLER $HandleLabel

;****************************************************************************
$HandlerLabel
    sub        sp,sp,#4        ;decrement sp(to store jump address)
    stmfd   sp!,{r0}        ;PUSH the work register to stack(lr does't push because it return to original address)
    ldr        r0,=$HandleLabel;load the address of HandleXXX to r0
    ldr        r0,[r0]        ;load the contents(service routine start address) of HandleXXX
    str        r0,[sp,#4]        ;store the contents(ISR) of HandleXXX to stack
    ldmfd   sp!,{r0,pc}        ;POP the work register and pc(jump to ISR)
    MEND

    IMPORT    |Image$$RO$$Limit|  ; End of ROM code (=start of ROM data)
    IMPORT    |Image$$RW$$Base|   ; Base of RAM to initialise
    IMPORT    |Image$$ZI$$Base|   ; Base and limit of area
    IMPORT    |Image$$ZI$$Limit|  ; to zero initialise

    IMPORT  Main    ; The main entry of mon program 

    AREA    Init,CODE,READONLY

;****************************************************************************
    ENTRY         ;汇编程序入口
START
    b ResetHandler  ;for debug
    b HandlerUndef  ;handlerUndef
    b HandlerSWI    ;SWI interrupt handler
    b HandlerPabort ;handlerPAbort
    b HandlerDabort ;handlerDAbort
    b .            ;handlerReserved
    b HandlerIRQ
    b HandlerFIQ
    ;***IMPORTANT NOTE***
    ;If the H/W vectored interrutp mode is enabled, The above two instructions should
    ;be changed like below, to work-around with H/W bug of S3C44B0X interrupt controller. 
    ; b HandlerIRQ  ->  subs pc,lr,#4
    ; b HandlerIRQ  ->  subs pc,lr,#4

;****************************************************************************
VECTOR_BRANCH
    ldr pc,=HandlerEINT0    ;mGA    H/W interrupt vector table
    ldr pc,=HandlerEINT1    ;    
    ldr pc,=HandlerEINT2    ;
    ldr pc,=HandlerEINT3    ;
    ldr pc,=HandlerEINT4567 ;
    ldr pc,=HandlerTICK        ;mGA
    b .
    b .
    ldr pc,=HandlerZDMA0    ;mGB
    ldr pc,=HandlerZDMA1    ;
    ldr pc,=HandlerBDMA0    ;
    ldr pc,=HandlerBDMA1    ;
    ldr pc,=HandlerWDT        ;
    ldr pc,=HandlerUERR01   ;mGB
    b .
    b .
    ldr pc,=HandlerTIMER0   ;mGC
    ldr pc,=HandlerTIMER1   ;
    ldr pc,=HandlerTIMER2   ;
    ldr pc,=HandlerTIMER3   ;
    ldr pc,=HandlerTIMER4   ;
    ldr pc,=HandlerTIMER5   ;mGC
    b .
    b .
    ldr pc,=HandlerURXD0    ;mGD
    ldr pc,=HandlerURXD1    ;
    ldr pc,=HandlerIIC        ;
    ldr pc,=HandlerSIO        ;
    ldr pc,=HandlerUTXD0    ;
    ldr pc,=HandlerUTXD1    ;mGD
    b .
    b .
    ldr pc,=HandlerRTC        ;mGKA
    b .                        ;
    b .                        ;
    b .                        ;
    b .                        ;
    b .                        ;mGKA
    b .
    b .
    ldr pc,=HandlerADC        ;mGKB
    b .                        ;
    b .                        ;
    b .                        ;
    b .                        ;
    b .                        ;mGKB
    b .
    b .
;0xe0=EnterPWDN
    ldr pc,=EnterPWDN

    LTORG    

;****************************************************************************
HandlerFIQ    HANDLER HandleFIQ
HandlerIRQ    HANDLER HandleIRQ
HandlerUndef    HANDLER HandleUndef
HandlerSWI    HANDLER HandleSWI
HandlerDabort    HANDLER HandleDabort
HandlerPabort    HANDLER HandlePabort

HandlerADC    HANDLER HandleADC
HandlerRTC    HANDLER HandleRTC
HandlerUTXD1    HANDLER HandleUTXD1
HandlerUTXD0    HANDLER HandleUTXD0
HandlerSIO    HANDLER HandleSIO
HandlerIIC    HANDLER HandleIIC
HandlerURXD1    HANDLER HandleURXD1
HandlerURXD0    HANDLER HandleURXD0
HandlerTIMER5    HANDLER HandleTIMER5
HandlerTIMER4    HANDLER HandleTIMER4
HandlerTIMER3    HANDLER HandleTIMER3
HandlerTIMER2    HANDLER HandleTIMER2
HandlerTIMER1    HANDLER HandleTIMER1
HandlerTIMER0    HANDLER HandleTIMER0
HandlerUERR01    HANDLER HandleUERR01
HandlerWDT    HANDLER HandleWDT
HandlerBDMA1    HANDLER HandleBDMA1
HandlerBDMA0    HANDLER HandleBDMA0
HandlerZDMA1    HANDLER HandleZDMA1
HandlerZDMA0    HANDLER HandleZDMA0
HandlerTICK    HANDLER HandleTICK
HandlerEINT4567    HANDLER HandleEINT4567
HandlerEINT3    HANDLER HandleEINT3
HandlerEINT2    HANDLER HandleEINT2
HandlerEINT1    HANDLER HandleEINT1
HandlerEINT0    HANDLER HandleEINT0


;****************************************************************************
;下面两个程序中的一个可以用作无向量中断
IsrIRQ    ;using I_ISPR register.
    sub        sp,sp,#4       ;reserved for PC
    stmfd   sp!,{r8-r9}   

    ;IMPORTANT CAUTION
    ;if I_ISPC isn't used properly, I_ISPR can be 0 in this routine.

    ldr        r9,=I_ISPR
    ldr        r9,[r9]

    cmp        r9, #0x0    ;If the IDLE mode work-around is used,
                        ;r9 may be 0 sometimes.
    beq        %F2

    mov        r8,#0x0
0
    movs    r9,r9,lsr #1
    bcs        %F1
    add        r8,r8,#4
    b        %B0

1
    ldr        r9,=HandleADC
    add        r9,r9,r8
    ldr        r9,[r9]
    str        r9,[sp,#8]
    ldmfd   sp!,{r8-r9,pc}

2
    ldmfd    sp!,{r8-r9}
    add        sp,sp,#4
    subs    pc,lr,#4

;****************************************************************************
;初始化程序开始
ResetHandler
    ldr        r0,=WTCON        ;禁止看门狗
    ldr        r1,=0x0         
    str        r1,[r0]

    ldr        r0,=INTMSK
    ldr        r1,=0x07ffffff  ;禁止所有中断
    str        r1,[r0]

    ;设定时钟控制寄存器
    ldr    r0,=LOCKTIME
    ldr    r1,=0xfff
    str    r1,[r0]

    [ PLLONSTART
    ldr    r0,=PLLCON            ;锁相环倍频设定
    ldr    r1,=((M_DIV<<12)+(P_DIV<<4)+S_DIV)        ;设定系统主时钟频率
    str    r1,][r0]
    ]

    ldr        r0,=CLKCON         
    ldr        r1,=0x7ff8        ;所有功能单元块时钟使能
    str        r1,[r0]

;****************************************************************************
;为BDMA改变BDMACON的复位值
    ldr     r0,=BDIDES0       
    ldr     r1,=0x40000000   ;BDIDESn reset value should be 0x40000000     
    str     r1,[r0]

    ldr     r0,=BDIDES1      
    ldr     r1,=0x40000000   ;BDIDESn reset value should be 0x40000000     
    str     r1,[r0]

;****************************************************************************
;设定存储器控制寄存器
    ldr        r0,=SMRDATA
    ldmia   r0,{r1-r13}
    ldr        r0,=0x01c80000  ;BWSCON Address
    stmia   r0,{r1-r13}

;****************************************************************************
;初始化堆栈
    ldr        sp, =SVCStack
    bl        InitStacks

;****************************************************************************
;设置中断处理
    ldr        r0,=HandleIRQ        ;This routine is needed
    ldr        r1,=IsrIRQ            ;if there isn't 'subs pc,lr,#4' at 0x18, 0x1c
    str        r1,[r0]

;****************************************************************************
;Copy and paste RW data/zero initialized data

    LDR        r0, =|Image$$RO$$Limit|    ; Get pointer to ROM data
    LDR        r1, =|Image$$RW$$Base|    ; and RAM copy
    LDR        r3, =|Image$$ZI$$Base|    
    ;Zero init base => top of initialised data
            
    CMP        r0, r1        ; Check that they are different
    BEQ        %F1
0        
    CMP        r1, r3        ; Copy init data
    LDRCC   r2, [r0], #4    ;--> LDRCC r2, [r0] + ADD r0, r0, #4         
    STRCC   r2, [r1], #4    ;--> STRCC r2, [r1] + ADD r1, r1, #4
    BCC        %B0
1        
    LDR        r1, =|Image$$ZI$$Limit| ; Top of zero init segment
    MOV        r2, #0
2        
    CMP        r3, r1        ; Zero init
    STRCC   r2, [r3], #4
    BCC        %B2

    [ :LNOT:THUMBCODE
    BL    Main        ;从汇编进入C语言代码空间,不要使用main()
    B    .                        
    ]

    [ THUMBCODE            ;for start-up code for Thumb mode
    orr     lr,pc,#1
    bx      lr
    CODE16
    bl      Main        ;从汇编进入C语言代码空间,不要使用main()
    b       .
    CODE32
    ]

;****************************************************
;本函数用来初始化堆栈
;****************************************************
InitStacks
    ;Don't use DRAM,such as stmfd,ldmfd......
    ;SVCstack is initialized before
    ;Under toolkit ver 2.50, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'

    mrs        r0,cpsr
    bic        r0,r0,#MODEMASK
    orr        r1,r0,#UNDEFMODE|NOINT
    msr        cpsr_cxsf,r1        ;UndefMode
    ldr        sp,=UndefStack
    
    orr        r1,r0,#ABORTMODE|NOINT
    msr        cpsr_cxsf,r1             ;AbortMode
    ldr        sp,=AbortStack

    orr        r1,r0,#IRQMODE|NOINT
    msr        cpsr_cxsf,r1             ;IRQMode
    ldr        sp,=IRQStack
    
    orr        r1,r0,#FIQMODE|NOINT
    msr        cpsr_cxsf,r1             ;FIQMode
    ldr        sp,=FIQStack

    bic        r0,r0,#MODEMASK|NOINT
    orr        r1,r0,#SVCMODE
    msr        cpsr_cxsf,r1             ;SVCMode
    ldr        sp,=SVCStack

    ;USER mode is not initialized.
    mov        pc,lr ;The LR register may be not valid for the mode changes.

;****************************************************
;本函数用来进入掉电模式
;****************************************************
;void EnterPWDN(int CLKCON);
EnterPWDN
    mov        r2,r0               ;r0=CLKCON
    ldr        r0,=REFRESH        
    ldr        r3,[r0]
    mov        r1, r3
    orr        r1, r1, #0x400000   ;self-refresh enable
    str        r1, [r0]

    nop     ;Wait until self-refresh is issued. May not be needed.
    nop     ;If the other bus master holds the bus, ...
    nop        ; mov r0, r0
    nop
    nop
    nop
    nop

;enter POWERDN mode
    ldr        r0,=CLKCON
    str        r2,[r0]

;wait until enter SL_IDLE,STOP mode and until wake-up
    mov        r0,#0xff
0   subs    r0,r0,#1
    bne        %B0

;exit from DRAM/SDRAM self refresh mode.
    ldr        r0,=REFRESH
    str        r3,[r0]
    mov        pc,lr

    LTORG

SMRDATA DATA
;*****************************************************************
;存储器最好配置成最优的性能,下面的参数不是最优化的
;*****************************************************************

;*** memory access cycle parameter strategy ***
; 1) Even FP-DRAM, EDO setting has more late fetch point by half-clock
; 2) The memory settings,here, are made the safe parameters even at 66Mhz.
; 3) FP-DRAM Parameters:tRCD=3 for tRAC, tcas=2 for pad delay, tcp=2 for bus load.
; 4) DRAM refresh rate is for 40Mhz. 

;bank0    16bit BOOT ROM SST39VF160/SST39VF320
;bank1    8bit Nand Flash K9F2808U0A/K9F5608U0A
;bank2    16bit USB1.1 PDIUSBD12
;bank3    RTL8019
;bank4    No Uesed
;bank5    No Uesed
;bank6    16bit SDRAM
;bank7    16bit SDRAM
    [ BUSWIDTH=16
;        DCD 0x11111111    ;Bank0=OM][1:0], Bank0~Bank7=16bit
        DCD 0x11111001    ;Bank0=OM[1:0]  16bit BootRomSST39VF160/SST39VF320) :0x0
;             |||||||-     Bank1=8bit Nand Flash
;             |||||---     Bank2=8bit PDIUSBD12
;             ||||----     Bank3=16bit RTL8019
;             |||-----     Bank4~5=16bit No Uesd
;             --------     Bank6~7=16bit SDRAM
    | ;BUSWIDTH=32
    DCD 0x22222220    ;Bank0=OM[1:0], Bank1~Bank7=32bit
    ]
    DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))    ;GCS0
    DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))    ;GCS1 
    DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))    ;GCS2
    DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))    ;GCS3
    DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))    ;GCS4
    DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))    ;GCS5
    [ BDRAMTYPE="DRAM" 
        DCD ((B6_MT<<15)+(B6_Trcd<<4)+(B6_Tcas<<3)+(B6_Tcp<<2)+(B6_CAN))    ;GCS6 check the MT value in parameter.a
        DCD ((B7_MT<<15)+(B7_Trcd<<4)+(B7_Tcas<<3)+(B7_Tcp<<2)+(B7_CAN))    ;GCS7
    | ;"SDRAM"
        DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))    ;GCS6
        DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))    ;GCS7
    ]
    DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)    ;REFRESH RFEN=1, TREFMD=0, trp=3clk, trc=5clk, tchr=3clk,count=1019
    DCD 0x10            ;SCLK power down mode, BANKSIZE 32M/32M
    DCD 0x20            ;MRSR6 CL=2clk
    DCD 0x20            ;MRSR7

    ALIGN


    AREA RamData, DATA, READWRITE

    ^    (_ISR_STARTADDRESS-0x500)
                
UserStack    #    256    ;c1(c7)ffa00
SVCStack    #    256    ;c1(c7)ffb00
UndefStack    #    256    ;c1(c7)ffc00
AbortStack    #    256    ;c1(c7)ffd00
IRQStack    #    256    ;c1(c7)ffe00
FIQStack    #    0    ;c1(c7)fff00


        ^    _ISR_STARTADDRESS
HandleReset    #    4
HandleUndef    #    4
HandleSWI    #    4
HandlePabort    #    4
HandleDabort    #    4
HandleReserved    #    4
HandleIRQ    #    4
HandleFIQ    #    4

;Don't use the label 'IntVectorTable',
;because armasm.exe cann't recognize this label correctly.
;the value is different with an address you think it may be.
;IntVectorTable
HandleADC    #    4
HandleRTC    #    4
HandleUTXD1    #    4
HandleUTXD0    #    4
HandleSIO    #    4
HandleIIC    #    4
HandleURXD1    #    4
HandleURXD0    #    4
HandleTIMER5    #    4
HandleTIMER4    #    4
HandleTIMER3    #    4
HandleTIMER2    #    4
HandleTIMER1    #    4
HandleTIMER0    #    4
HandleUERR01    #    4
HandleWDT    #    4
HandleBDMA1    #    4
HandleBDMA0    #    4
HandleZDMA1    #    4
HandleZDMA0    #    4
HandleTICK    #    4
HandleEINT4567    #    4
HandleEINT3    #    4
HandleEINT2    #    4
HandleEINT1    #    4
HandleEINT0    #    4   ;0xc1(c7)fff84

        END
;****************************************************************************

相关帖子

沙发
zhaoem82|  楼主 | 2007-1-4 08:38 | 只看该作者

请高手帮忙,我调了几天了,还是不行,谢谢!

使用特权

评论回复
板凳
龙兄| | 2007-1-4 09:23 | 只看该作者

为什么不在FLASH中调试一下呢

为什么不在FLASH中调试一下呢?这样就可以看到你的程序在哪里出错啊

使用特权

评论回复
地板
zhaoem82|  楼主 | 2007-1-4 10:08 | 只看该作者

龙兄,怎样在flash中调试?

是否是跟在sdram中调试一样只是将地址改到flash?

使用特权

评论回复
5
js_wawayu| | 2007-1-4 18:34 | 只看该作者

开发板原来提供的工程里rw-base也是0xc000000吗

使用特权

评论回复
6
zhaoem82|  楼主 | 2007-1-4 20:27 | 只看该作者

开发板原来提供的工程ro-base 0xc000000 rw-base 0xc5f0000

不过是调试模式的,没有找到其它设置.我看开发板上的说明是SDRAM的片选引脚接在nSCS6上面,它的地址从0X0C000000开始。flash的起始地址是0X00000000。

使用特权

评论回复
7
js_wawayu| | 2007-1-5 08:16 | 只看该作者

我以前用开放板调试时,SDRAM起始地址和你一样

不过设置的RW-BASE不是起始地址,因为开放板需要利用SDRAM起始的一段空间作为LCD的显存,你最好仔细看看开放板的资料。

使用特权

评论回复
8
zhaoem82|  楼主 | 2007-1-5 20:40 | 只看该作者

我的开发板上没有LCD,我只是写了个简单程序测试

我把程序下载到sdram中运行正常,但修改ro-base下载到flash中运行不正常!
我的开发板说明书好简单,没有说明这方面的,我自己试了好几天,还是不行,希望大家帮帮忙,谢谢!

使用特权

评论回复
9
zky2003| | 2007-1-6 14:34 | 只看该作者

你下载是的是不是.hex的文件?

1.建议你编译一个.ELF文件用FLASHPGM下载下去试试
2.在FLASH里用AXD调试,但是加载文件的时候选用"debug symbol"

使用特权

评论回复
10
zhaoem82|  楼主 | 2007-1-6 21:26 | 只看该作者

我下载是.hex的文件

我的jtag小板是sdt方式的,好像FLASHPGM不支持这种方式,用h-flasher行吗?
先谢谢了!

使用特权

评论回复
11
zhaoem82|  楼主 | 2007-1-18 21:17 | 只看该作者

我调了一个多星期,还没解决,请大家帮忙!

使用特权

评论回复
12
kyflash| | 2007-1-18 23:47 | 只看该作者

地址问题吧

一般bootloader会把烧写在FLASH中的代码拷贝到SDRAM里面再运行的,你的板子肯定也是这么做的,所以你的代码RO  RW段的地址都必须是SDRAM地址能够覆盖的地址空间.
你再把RO 改成FLASH地址,运行时候SDRAM当然寻址不到了


使用特权

评论回复
13
yxhyxh| | 2007-1-19 08:59 | 只看该作者

先把ARM的启动过程搞清楚再去调吧。

另外想问一点,你用什么手段将代码下载到FLASH中去的,确定是下载到FLASH中去了么?
我以前做的时候,是将启动代码作了一定的修改,使它具备在RAM中运行程序的功能,再加上通过串行口将应用程序写入FLASH的功能的。裸机时的第一版程序是通过FLUTED软件,通过JTAG口下载到FLASH中去的

使用特权

评论回复
14
zhaoem82|  楼主 | 2007-1-19 09:21 | 只看该作者

回kyflash

RO不是要改成FLASH地址的起始地址吗?我的flash的起始地址就0x0,我现在将r0设成0x0,Sdram的起始地址为0xc000000,我将rw设置成0xc000000

使用特权

评论回复
15
zhaoem82|  楼主 | 2007-1-19 09:29 | 只看该作者

回yxhyxh

我的板已用过FLUTED软件下载程序了并且能正常运行,不过下载的文件是开发板光盘中的bin文件,的自己编写了一个程序和我在开发板中找到的工程文件编译成后,下载不能正常动行,因为开发板没有技术支持,没办法.

使用特权

评论回复
16
zhaoem82|  楼主 | 2007-1-19 09:34 | 只看该作者

补充一点

程序应当已下载到开发板中,因为我写的程序是定时向串口中发送一串字符,我在串口监控中看到程序开始时发送的字符,不过之后就好像死机了.复位后又能发送一点.程序我在sdram中调试是正常的.请大家指点.

使用特权

评论回复
17
kyflash| | 2007-1-19 15:48 | 只看该作者

该去看看ARM7启动过程

0地址一般是外部FLASH起始地址,也有ARM7芯片外部FLASH不是接在0地址,ARM7启动始终从0地址开始,并且0地址应连续几个字节存放中断向量表.
bootloader就是从0地址启动运行,初始化系统以后,再根据你下载的代码中的RO,RW地址把你下载到FLASH中的代码拷贝到SDRAM里面,完后就开始从你代码起始处(main函数)开始运行.或者bootloader完成一些初始化工作后直接跳转到你代码起始处运行.RO  RW的设置就是告诉bootloader两个地址而已.
如果你没有使用bootloader的话,比如跑简单的流水灯啊,可以直接下载到FLASH里,配合外部SDRAM或者内部CACHE运行,此时RO才设置为FLASH地址

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

75

帖子

0

粉丝