TI论坛
直播中

王洋

7年用户 194经验值
私信 关注
[问答]

请教关于6455 emif boot 失败的问题

您好:
我使用TMS320C6455,从选择从FLASH启动。程序由于比较大,打算把程序放在DDR2中。我使用的boot.asm代码如下
.title  "Flash bootup utility for 6455"
            .option D,T
            .length 102
            .width  140
COPY_TABLE    .equ     0xB0000400 ;
EMIF_BPRIO_R           .equ  0x70000020 ;emif register
EMIF_CE2CFG_R       .equ     0x70000080 ;
EMIF_CE3CFG_R       .equ  0x70000084 ;
EMIF_AWCC_R           .equ  0x700000A0 ;
EMIF_BPRIO_V            .equ  0x000000FE ;
EMIF_CE2CFG_V        .equ     0x32109086 ;
EMIF_CE3CFG_V        .equ  0x63209104 ;
EMIF_AWCC_V             .equ  0x40000380 ;
            .sect ".boot_load"
            .global _boot
_boot:      
;************************************************************************
;* Debug Loop -  Comment out B for Normal Operation
;************************************************************************
            zero B1
_myloop:   [!B1] B _myloop  
            nop  5
_myloopend: nop
;************************************************************************
;* Configure EMIF
;************************************************************************
   mvkl EMIF_BPRIO_R,A4
   || mvkl EMIF_BPRIO_V,B4
   
   mvkh EMIF_BPRIO_R,A4
   || mvkh EMIF_BPRIO_V,B4   
    stw B4,*A4
   
   mvkl EMIF_CE2CFG_R,A4
   || mvkl EMIF_CE2CFG_V,B4
   
   mvkh EMIF_CE2CFG_R,A4
   || mvkh EMIF_CE2CFG_V,B4   
    stw B4,*A4
   
   mvkl EMIF_CE3CFG_R,A4
   || mvkl EMIF_CE3CFG_V,B4
   
   mvkh EMIF_CE3CFG_R,A4
   || mvkh EMIF_CE3CFG_V,B4   
    stw B4,*A4
   
   mvkl EMIF_AWCC_R,A4
   || mvkl EMIF_AWCC_V,B4
   
   mvkh EMIF_AWCC_R,A4
   || mvkh EMIF_AWCC_V,B4   
    stw B4,*A4
   nop   4
;****************************************************************************
;* Copy code sections
;****************************************************************************
   mvkl COPY_TABLE, A3     ; load table pointer 加载用户程序代码的起始地址0xb0000400地址放到A3寄存器
   mvkh COPY_TABLE, A3
   ldw *A3++, B1       ; Load entry point 加载用户程序的 C 语言入口c_int00地址到B1寄存器
copy_section_top:         ;循环加载多个段标签
   ldw *A3++, B0       ; byte count 本段加载的字节个数 32 比特存储方式
   ldw *A3++, A4       ; ram start address 本段要被加载到内存中的 RAM 起始地址
   nop 3
   [!B0] b copy_done      ;have we copied all sections? 判断所有段都被加载完成
   nop 5
copy_loop:           ;循环加载当前段标签
   ldb *A3++,B5       ;将 FLASH 地址中的数放到核寄存器 B5 中 8bit 存储方式
   sub B0,1,B0       ; decrement counter 每加载一个字节,字节数减一
   [ B0] b copy_loop      ; setup branch if not done 判断当前本段加载字节数是否为零
   [!B0] b copy_section_top    ;判断当前段加载成功后跳转到循环开始地址,加载下一段。
   zero A1        ;执行完这条指令 B5 和 A4 中才会有新的数据
   [!B0] and 3,A3,A1
   stb B5,*A4++       ;将从 flash 中读出的数放到 RAM 地址中,按 8bit 搬移
   [!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:           ;跳转到 C 语言入口标签
   b .S2 B1        ;跳转到 C 语言入口地址
   nop 5
在BIOS配置中设置了如下的几个区域。
调试运行没有问题后,使用HEX6X生成烧写文件。
debugflash_boot_test.out
-a
-map flash_boot.map
-memwidth  8
-boot
-bootorg 0xB0000400
-bootsection .boot_load 0xB0000000
ROMS
[
    FLASH:  org = 0xB0000000, len = 0x120000, romwidth = 8, files = [.burn_hexflash_boot.hex]
]
最后生成的HEX文件内容如下:

文件烧写进去后无法启动。

请教各位,我哪里做的不对,请指教,谢谢

回帖(13)

王洋

2018-7-25 06:30:42
请问哪位能给我发个正确的EMIF BOOT启动的程序来参考一下,十分感谢!!
27801712@163.com
举报

余少虹

2018-7-25 06:48:21
引用: 灵澈与灵车 发表于 2018-7-25 06:30
请问哪位能给我发个正确的EMIF BOOT启动的程序来参考一下,十分感谢!!
27801712@163.com

boot.asm二次boot代码先调通过吗?
举报

王洋

2018-7-25 07:00:04
引用: vuywsdfwf 发表于 2018-7-25 06:48
boot.asm二次boot代码先调通过吗?

你好,你说的二次BOOT是指汇编代码吗?
我没有调过,汇编这块我不太熟悉,找的别人的代码,请问这块该如何调试,请指教一下,十分感谢!!!!!!!!!
举报

余少虹

2018-7-25 07:13:20
引用: 灵澈与灵车 发表于 2018-7-25 07:00
你好,你说的二次BOOT是指汇编代码吗?
我没有调过,汇编这块我不太熟悉,找的别人的代码,请问这块该如何调试,请指教一下,十分感谢!!!!!!!!!

用仿真器跟,看有没有成功搬移代码。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分