This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C6455自启动



通过CCS连接6455后,全速运行时,程序在0x001014AA和0x001014B0这几行之间反复运行,不会跳转到0x00800000,请问是什么原因?

使用CCS4.2debug时将.out文件加载到芯片内,可以正常调试。

0x001014AA附近的内部rom代码如下:


  • 0x001014AA和0x001014B0是位于芯片Internal ROM中,该区域固化有bootloader,芯片上电复位后立即运行,然后根据boot modes来选择boot的方式。根据你的描述,说明你的boot程序有问题。

  • ;;this is the boot.asm

     .ref    _c_int00

    .ref    FLASH_TEXT_START

    .ref    RAM_TEXT_START

    .ref TEXT_SIZE

    .ref FLASH_CINIT_START

    .ref RAM_CINIT_START

    .ref CINIT_SIZE

    .ref FLASH_CONST_START

    .ref RAM_CONST_START

    .ref CONST_SIZE

    .ref FLASH_SWITCH_START

    .ref RAM_SWITCH_START

    .ref SWITCH_SIZE

     

     

    .sect "bootload"

    ;; Copy the .text section from FLASH_TEXT_START to RAM_TEXT_START

    _boot_start:

        mvkl  FLASH_TEXT_START,B4 ; B4 <- FLASH_TEXT_START

        mvkh  FLASH_TEXT_START,B4   

         

    mvkl  RAM_TEXT_START,A4 ; A4 <- RAM_TEXT_START

    mvkh  RAM_TEXT_START,A4

    zero  A1

     

    _boot_loop1:

    ldb   *B4++,B5       ; Read Flash

    mvkl  TEXT_SIZE,B6 ; B6 <- TEXT_SIZE

    add   1,A1,A1          

    ||    mvkh  TEXT_SIZE,B6

    cmplt  A1,B6,B0 ; Compare Size

    nop    

    stb   B5,*A4++ ; Store RAM

    [B0]  b     _boot_loop1

    nop   5

     

    ;; Copy the .cinit section from FLASH_CINIT_START to RAM_CINIT_START

        mvkl  FLASH_CINIT_START,B4 ; B4 <- FLASH_CINIT_START

        mvkh  FLASH_CINIT_START,B4   

         

    mvkl  RAM_CINIT_START,A4   ; A4 <- RAM_TEXT_START

    mvkh  RAM_CINIT_START,A4

    zero  A1

    _boot_loop2:

    ldb   *B4++,B5       ; Read Flash

    mvkl  CINIT_SIZE,B6   ; B6 <- CINIT_SIZE

    add   1,A1,A1          

    ||    mvkh  CINIT_SIZE,B6

    cmplt  A1,B6,B0 ; Compare Size

    nop    

    stb   B5,*A4++ ; Store RAM

    [B0]  b     _boot_loop2

    nop   5

     

    ;; Copy the .const section from FLASH_CONST_START to RAM_CONST_START

        mvkl  FLASH_CONST_START,B4 ; B4 <- FLASH_CINIT_START

        mvkh  FLASH_CONST_START,B4   

         

    mvkl  RAM_CONST_START,A4   ; A4 <- RAM_TEXT_START

    mvkh  RAM_CONST_START,A4

    zero  A1

    _boot_loop3:

    ldb   *B4++,B5       ; Read Flash

    mvkl  CONST_SIZE,B6 ; B6 <- CONST_SIZE

    add   1,A1,A1          

    ||    mvkh  CONST_SIZE,B6

    cmplt  A1,B6,B0 ; Compare Size

    nop    

    stb   B5,*A4++ ; Store RAM

    [B0]  b     _boot_loop3

    nop   5

     

    ;; Copy the .switch section from FLASH_SWITCH_START to RAM_SWITCH_START

        mvkl  FLASH_SWITCH_START,B4 ; B4 <- FLASH_CINIT_START

        mvkh  FLASH_SWITCH_START,B4   

         

    mvkl  RAM_SWITCH_START,A4   ; A4 <- RAM_TEXT_START

    mvkh  RAM_SWITCH_START,A4

    zero  A1

    _boot_loop4:

    ldb   *B4++,B5       ; Read Flash

    mvkl  SWITCH_SIZE,B6 ; B6 <- SWITCH_SIZE

    add   1,A1,A1          

    ||    mvkh  SWITCH_SIZE,B6

    cmplt  A1,B6,B0 ; Compare Size

    nop    

    stb   B5,*A4++ ; Store RAM

    [B0]  b     _boot_loop4

    nop   5

     

     

    ;; Branch to application start

    mvkl .S2 _c_int00, B0

    mvkh .S2 _c_int00, B0

    B    .S2 B0

    nop   5

    ;;end of the boot.asm

     

    对应的flash.cmd如下

    -c

    -heap  0x500

    -stack 0x500

     

     

    MEMORY

    {

            L2:      o = 0x00800000   l = 0x00200000

    boot:    o = 0xB0000000   l = 0x00000200

    FLASH: o = 0xB0000200  l = 0x003FFD00

     

    SECTIONS

    {

     

      "bootload": {} > boot 

        .text     : {} > FLASH   run = L2, LOAD_START(FLASH_TEXT_START), RUN_START(RAM_TEXT_START), SIZE(TEXT_SIZE) 

        .cinit    : {} > FLASH   run = L2, LOAD_START(FLASH_CINIT_START), RUN_START(RAM_CINIT_START), SIZE(CINIT_SIZE) 

        .stack    : {} > L2

        .bss      : {} > L2

        .cio      : {} > L2

        .const  : {} > FLASH run = L2, LOAD_START(FLASH_CONST_START), RUN_START(RAM_CONST_START), SIZE(CONST_SIZE) 

        .data     : {} > L2

        .switch   : {} > FLASH   run = L2, LOAD_START(FLASH_SWITCH_START), RUN_START(RAM_SWITCH_START), SIZE(SWITCH_SIZE) 

        .sysmem   : {} > L2

        .far      : {} > L2