期望将一个点亮LED的工程,经过bootload加载到SDRAM后再运行。但是重新上电后LED并没有点亮。现附上代码,请多多指教!
1.我的CMD文件如下:
-c
-x
-l rts6700.lib
-heap 200h
-stack 300h
MEMORY
{
BOOT_RAM : o=0, l=200h
IRAM : o=401h, l=0x0003FBFE
SDRAM : o = 80000000h l = 10000000h
}
SECTIONS
{
.vectors :> BOOT_RAM
.boot_load :> BOOT_RAM
.bss :> SDRAM
.cinit :> SDRAM
.far :> SDRAM
.stack :> SDRAM
.text > SDRAM
.const > SDRAM
.pinit > SDRAM
.switch > SDRAM
.data > SDRAM
.cio > SDRAM
}
2.利用十六进制转换工具自动生成复制表。所以转换用cmd及二级bootload代码如下。
CMD文件:
debug\boot_test.out
-a
-memwidth 8
-map boot_test.map
-boot
-bootorg 0x90000400
-bootsection .boot_load 0x90000000
ROMS
{
FLASH: org = 0x90000000, len = 0x8C00, romwidth = 8, files = {boot_test.hex}
}
二级bootload代码:
;A;
; ======== boot_c671x.s62 ========
;
.title "Flash bootup utility"
.option D,T
.length 102
.width 140
; global EMIF symbols defined for the c671x family
.include boot_c671x.h62
; Address of the generated boot-table
copyTable .equ 0x90000400
;.global _text_size
;.global _text_ld_start
;.global _text_rn_start
.sect ".boot_load"
.global _boot
.ref _c_int00
_boot:
;************************************************************************
;* DEBUG LOOP - COMMENT OUT B FOR NORMAL OPERATION
;************************************************************************
zero B1
_myloop: ; [!B1] B _myloop
nop 5
_myloopend: nop
;************************************************************************
;* CONFIGURE EMIF,EMIF初始化
;************************************************************************
;****************************************************************
; *EMIF_GCTL = EMIF_GCTL_V;
;****************************************************************
mvkl EMIF_GCTL,A4
|| mvkl EMIF_GCTL_V,B4
mvkh EMIF_GCTL,A4
|| mvkh EMIF_GCTL_V,B4
stw B4,*A4
;****************************************************************
; *EMIF_CE0 = EMIF_CE0_V
;****************************************************************
mvkl EMIF_CE0,A4
|| mvkl EMIF_CE0_V,B4
mvkh EMIF_CE0,A4
|| mvkh EMIF_CE0_V,B4
stw B4,*A4
;****************************************************************
; *EMIF_CE1 = EMIF_CE1_V (setup for 8-bit async)
;****************************************************************
mvkl EMIF_CE1,A4
|| mvkl EMIF_CE1_V,B4
mvkh EMIF_CE1,A4
|| mvkh EMIF_CE1_V,B4
stw B4,*A4
;****************************************************************
; *EMIF_CE2 = EMIF_CE2_V (setup for 32-bit async)
;****************************************************************
mvkl EMIF_CE2,A4
|| mvkl EMIF_CE2_V,B4
mvkh EMIF_CE2,A4
|| mvkh EMIF_CE2_V,B4
stw B4,*A4
;****************************************************************
; *EMIF_CE3 = EMIF_CE3_V (setup for 32-bit async)
;****************************************************************
|| mvkl EMIF_CE3,A4
|| mvkl EMIF_CE3_V,B4 ;
mvkh EMIF_CE3,A4
|| mvkh EMIF_CE3_V,B4
stw B4,*A4
;****************************************************************
; *EMIF_SDRAMCTL = EMIF_SDRAMCTL_V
;****************************************************************
|| mvkl EMIF_SDRAMCTL,A4
|| mvkl EMIF_SDRAMCTL_V,B4 ;
mvkh EMIF_SDRAMCTL,A4
|| mvkh EMIF_SDRAMCTL_V,B4
stw B4,*A4
;****************************************************************
; *EMIF_SDRAMTIM = EMIF_SDRAMTIM_V
;****************************************************************
|| mvkl EMIF_SDRAMTIM,A4
|| mvkl EMIF_SDRAMTIM_V,B4 ;
mvkh EMIF_SDRAMTIM,A4
|| mvkh EMIF_SDRAMTIM_V,B4
stw B4,*A4
;****************************************************************
; *EMIF_SDRAMEXT = EMIF_SDRAMEXT_V
;****************************************************************
|| mvkl EMIF_SDRAMEXT,A4
|| mvkl EMIF_SDRAMEXT_V,B4 ;
mvkh EMIF_SDRAMEXT,A4
|| mvkh EMIF_SDRAMEXT_V,B4
stw B4,*A4
;****************************************************************************
; copy sections,搬移表格
;****************************************************************************
mvkl copyTable, a3 ; load table pointer
mvkh copyTable, a3
ldw *a3++, b1 ; Load entry point
;在copy_section_top中读取用户程序的段信息(段的Flash加载地址,段的RAM运行地址以及段的长度)
;在copy_loop中执行循环拷贝操作。
copy_section_top:
ldw *a3++, b0 ; byte count
ldw *a3++, a4 ; ram start address
nop 3
[!b0] b copy_done ; have we copied all sections?
nop 5
copy_loop:
ldb *a3++,b5
sub b0,1,b0 ; decrement counter
[ b0] b copy_loop ; setup branch if not done
[!b0] b copy_section_top
zero a1
[!b0] and 3,a3,a1
stb b5,*a4++
[!b0] and -4,a3,a5 ; round address up to next multiple of 4
[ a1] add 4,a5,a3 ; round address up to next multiple of 4
;****************************************************************************
; jump to entry point
;****************************************************************************
copy_done:
b .S2 b1
nop 5
;copyTable:
; count
; flash start (load) address
; ram start (run) address
;; .text
;.word _text_size
;.word _text_ld_start
;.word _text_rn_start
;; end of table
;.word 0
;.word 0
;.word 0