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.

TMS320F28075 0x3FE493 (no symbols are defined)

Other Parts Discussed in Thread: TMS320F28075

Hi TI!

Could you help me with starting program from flash.

My problem - When i Flashing TMS320F28075 and push the button Resume by XDS100v3 i start program from Main function. -It Ok. Program in flash bank 0.

When i push the button CPU rest, it start from 0x3FF16A (no symbols are defined), but when i push button Resume, program stops on address 0x3FE493 (no symbols are defined). And the same situation when i power off CPU.
I think it is problem i my autostart mode, but all configuration is ok , boot pin both have logic level "1", and F2807x_CodeStartBranch.asm and CMD file is ok too.


Then i Verify project and connect to TMS320F28075 by XDS100v3 (without flashing) i can Resume from Main program (that say that i have program in flash , and memory browser have information too).

How can i check where is my problem, why TMS320F28075 after power off cant start correct, only if i connect by debugger, i can start main program.?

  • Problem in my cmd file, Could  you help me fix the error?

    /*
    //###########################################################################
    // FILE: flash_programming_cpu1_FLASH.cmd
    // TITLE: Linker Command File For all F28X7x devices
    //###########################################################################
    // $TI Release: F2807x Support Library v210 $
    // $Release Date: Tue Nov 1 15:42:43 CDT 2016 $
    // $Copyright: Copyright (C) 2014-2016 Texas Instruments Incorporated -
    // http://www.ti.com/ ALL RIGHTS RESERVED $
    //###########################################################################
    */

    /* ======================================================
    // For Code Composer Studio V2.2 and later
    // ---------------------------------------
    // In addition to this memory linker command file,
    // add the header linker command file directly to the project.
    // The header linker command file is required to link the
    // peripheral structures to the proper locations within
    // the memory map.
    // The header linker files are found in <base>\F2807x_headers\cmd
    // For BIOS applications add: F28X7x_Headers_BIOS.cmd
    // For nonBIOS applications add: F28X7x_Headers_nonBIOS.cmd
    ========================================================= */

    /* Define the memory block start/length for the F28X7x
    PAGE 0 will be used to organize program sections
    PAGE 1 will be used to organize data sections

    Notes:
    Memory blocks on F28M3Xx are uniform (ie same
    physical memory) in both PAGE 0 and PAGE 1.
    That is the same memory region should not be
    defined for both PAGE 0 and PAGE 1.
    Doing so will result in corruption of program
    and/or data.

    Contiguous SARAM memory blocks or flash sectors can be
    be combined if required to create a larger memory block.
    */

    MEMORY
    {
    PAGE 0: /* Program Memory */
    /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */
    /* BEGIN is used for the "boot to Flash" bootloader mode */

    // BEGIN : origin = 0x080000, length = 0x000002
    RAMM0 : origin = 0x000122, length = 0x0002DE
    RAMD0 : origin = 0x00B000, length = 0x000800
    RAMLS03 : origin = 0x008000, length = 0x002000
    /* RAMLS1 : origin = 0x008800, length = 0x000800
    RAMLS2 : origin = 0x009000, length = 0x000800
    RAMLS3 : origin = 0x009800, length = 0x000800 */
    RAMLS4 : origin = 0x00A000, length = 0x000800
    // RAMGS14 : origin = 0x01A000, length = 0x001000
    // RAMGS15 : origin = 0x01B000, length = 0x001000
    RESET : origin = 0x3FFFC0, length = 0x000002

    OTP : origin = 0x078000, length = 0x000400 /* Участок памяти для бутлоладера, стартадрес*/

    /* Flash sectors */


    INPUTPOINT : origin = 0x0B8000, length = 0x000080 /* Точка входа в загрузчик */
    FLASHA : origin = 0x0B8080, length = 0x007F00 /* on-chip Flash в конце 32к*/
    BEGIN : origin = 0x0BFFF8, length = 0x000008 /* конец флеши для загрузчкиа */
    // FLASHA : origin = 0x080002, length = 0x001FFE /* on-chip Flash */
    // FLASHB : origin = 0x082000, length = 0x002000 /* on-chip Flash */
    // FLASHC : origin = 0x084000, length = 0x002000 /* on-chip Flash */
    // FLASHD : origin = 0x086000, length = 0x002000 /* on-chip Flash */
    // FLASHE : origin = 0x088000, length = 0x008000 /* on-chip Flash */
    // FLASHF : origin = 0x090000, length = 0x008000 /* on-chip Flash */
    // FLASHG : origin = 0x098000, length = 0x008000 /* on-chip Flash */
    // FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chip Flash */
    // FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chip Flash */
    // FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chip Flash */
    // FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chip Flash */
    // FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chip Flash */
    // FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chip Flash */
    // FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chip Flash */

    PAGE 1 : /* Data Memory */
    /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */

    BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part of M0, BOOT rom will use this for stack */
    RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */
    RAMD1 : origin = 0x00B800, length = 0x000800

    RAMLS5 : origin = 0x00A800, length = 0x000800

    RAMGS07 : origin = 0x00C000, length = 0x008000
    // RAMGS1 : origin = 0x00D000, length = 0x001000
    // RAMGS2 : origin = 0x00E000, length = 0x001000
    // RAMGS3 : origin = 0x00F000, length = 0x001000
    // RAMGS4 : origin = 0x010000, length = 0x001000
    // RAMGS5 : origin = 0x011000, length = 0x001000
    // RAMGS6 : origin = 0x012000, length = 0x001000
    // RAMGS7 : origin = 0x013000, length = 0x001000
    }


    SECTIONS
    {

    /* Allocate program areas: */
    .cinit : > FLASHA, PAGE = 0, ALIGN(8)
    .pinit : > FLASHA, PAGE = 0, ALIGN(8)
    .text : > FLASHA, PAGE = 0, ALIGN(8)
    codestart : > BEGIN, PAGE = 0, ALIGN(8)

    #ifdef __TI_COMPILER_VERSION__
    #if __TI_COMPILER_VERSION__ >= 15009000
    GROUP
    {
    .TI.ramfunc
    // { -l F021_API_F2837xD_FPU32.lib}

    } LOAD = FLASHA,
    RUN = RAMLS03,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_SIZE(_RamfuncsLoadSize),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    RUN_SIZE(_RamfuncsRunSize),
    RUN_END(_RamfuncsRunEnd),
    PAGE = 0, ALIGN(8)
    #else
    GROUP
    {
    // ramfuncs
    // { -l F021_API_F2837xD_FPU32.lib}

    } LOAD = FLASHA,
    RUN = RAMLS03,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_SIZE(_RamfuncsLoadSize),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    RUN_SIZE(_RamfuncsRunSize),
    RUN_END(_RamfuncsRunEnd),
    PAGE = 0, ALIGN(8)
    #endif
    #endif

    /* Allocate uninitalized data sections: */
    .stack : > RAMM1 PAGE = 1
    .ebss : > RAMGS07 PAGE = 1
    .esysmem : > RAMM1 PAGE = 1

    /* Initalized sections go in Flash */
    .econst : > FLASHA PAGE = 0, ALIGN(8)
    .switch : > FLASHA PAGE = 0, ALIGN(8)

    .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */

    Filter_RegsFile : > RAMGS07, PAGE = 1

    SHARERAMGS0 : > RAMGS07, PAGE = 1
    SHARERAMGS1 : > RAMGS07, PAGE = 1

    /* Flash Programming Buffer */
    BufferDataSection : > RAMD1, PAGE = 1, ALIGN(8)

    inputPointFromMainProgram : > INPUTPOINT, PAGE = 0, ALIGN(8)
    }

    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */

  • And that is my FILE: F2807x_CodeStartBranch.asm.




    ;//###########################################################################
    ;//
    ;// FILE: F2807x_CodeStartBranch.asm
    ;//
    ;// TITLE: Branch for redirecting code execution after boot.
    ;//
    ;// For these examples, code_start is the first code that is executed after
    ;// exiting the boot ROM code.
    ;//
    ;// The codestart section in the linker cmd file is used to physically place
    ;// this code at the correct memory location. This section should be placed
    ;// at the location the BOOT ROM will re-direct the code to. For example,
    ;// for boot to FLASH this code will be located at 0x3f7ff6.
    ;//
    ;// In addition, the example F2807x projects are setup such that the codegen
    ;// entry point is also set to the code_start label. This is done by linker
    ;// option -e in the project build options. When the debugger loads the code,
    ;// it will automatically set the PC to the "entry point" address indicated by
    ;// the -e linker option. In this case the debugger is simply assigning the PC,
    ;// it is not the same as a full reset of the device.
    ;//
    ;// The compiler may warn that the entry point for the project is other then
    ;// _c_init00. _c_init00 is the C environment setup and is run before
    ;// main() is entered. The code_start code will re-direct the execution
    ;// to _c_init00 and thus there is no worry and this warning can be ignored.
    ;//
    ;//###########################################################################
    ;// $TI Release: F2807x Support Library v210 $
    ;// $Release Date: Tue Nov 1 15:42:43 CDT 2016 $
    ;// $Copyright: Copyright (C) 2014-2016 Texas Instruments Incorporated -
    ;// http://www.ti.com/ ALL RIGHTS RESERVED $
    ;//###########################################################################

    ***********************************************************************
    ***********************************************************************

    WD_DISABLE .set 1 ;set to 1 to disable WD, else set to 0

    .ref _c_int00
    .global code_start
    .global _flagInputMainProgram
    .global initIfInputPowerStart

    ***********************************************************************
    ;
    ; start loader
    ***********************************************************************
    .sect "inputPointFromMainProgram"
    ; from main programm
    initIfInputMainProgram:
    MOV ACC,#1
    MOVL XAR2,#_flagInputMainProgram ; Load XAR2 with address
    MOV *XAR2, ACC ; Store ACC into location pointed to by XAR2,
    LB wd_disable

    ; PowerStart
    initIfInputPowerStart:
    MOV ACC,#0
    MOVL XAR2,#_flagInputMainProgram ; Load XAR2 with address
    MOV *XAR2, ACC ; Store ACC into location pointed to by XAR2,
    LB wd_disable

    ***********************************************************************
    * Function: codestart section
    *
    * Description: Branch to code starting point
    ***********************************************************************

    .sect "codestart"

    code_start:
    LB initIfInputPowerStart ;Branch to watchdog disable code

    ;end codestart section

    ***********************************************************************
    * Function: wd_disable
    *
    * Description: Disables the watchdog timer
    ***********************************************************************
    .if WD_DISABLE == 1

    .text
    wd_disable:
    SETC OBJMODE ;Set OBJMODE for 28x object code
    EALLOW ;Enable EALLOW protected register access
    MOVZ DP, #7029h>>6 ;Set data page for WDCR register
    MOV @7029h, #0068h ;Set WDDIS bit in WDCR to disable WD
    EDIS ;Disable EALLOW protected register access
    LB _c_int00 ;Branch to start of boot._asm in RTS library

    .endif

    ;end wd_disable

    .end

    ;//
    ;// End of file.
    ;//
  • I found problem, that is code_start section. When i moved BEGIN memory from end(FlashN) Flash to begin (FlashA) program start normal. 

  • Hi Serhii,

    Sorry I am not clear on what changes you made that made it work.
    Can you send me the file with changes and without changes to compare and see what changes you made?

    Regards,
    Nirav