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.

有关28335 FLASH启动的问题

内部FLASH烧写完成后,怎么程序跑不对?

  • 那你检查程序

  • 只要能烧写进去,就说明烧写没问题

  • 请您详细描述跑不对的现象?

    请检查

    1. Delay_us();函数是否已经copy到内部Ram中运行。

    2. 程序是否真的已经启动了? 例如用一个点灯程序确认

    3. 请检查几个上电的Boot引脚是否都已经上拉。(内部已经上拉,只要你在PCB上没有下拉就好)

  • 点灯程序已经有,灯没量,是在中断中作的。

    Delay_us();函数是否已经copy到内部Ram中运行(怎么作,是不是memcopy?)确实有用到Delay_us(),但不知道是否拷贝进了ram。

    引脚现在全部都没接,量过了也都是高电平。

  • 这是我的工程文件列表

  • 那请您先将程序烧写到Flash中,在Flash中,进行调试试试。不要断掉仿真器。

    File->Load Symbols->Load Symbols Only->选择你的.out文件。

    看看这样运行是否停止到了 Ilegal ISR中的。

    再单步查询具体哪一步导致进入了illegal ISR。

  • 另外,请保证您开的Stack空间足够用。

    Delay-us是需要通过memcpy到Ram中运行。

    具体可以查看 .map文件中的 memcpy这个函数具体在哪个部分。

  • 另外,请保证您开的Stack空间足够用。

    Delay-us是需要通过memcpy到Ram中运行。

    具体可以查看 .map文件中的 memcpy这个函数具体在哪个部分。

  • 连接仿真器,在闪灯中断中设置断点,发现可以正常显示。

    于是断开仿真器,发现没有反应。

    下面是我的配置文件

    /*

    // TI File $Revision: /main/9 $

    // Checkin $Date: August 28, 2007   11:23:38 $

    //###########################################################################

    //

    // FILE: F28335.cmd

    //

    // TITLE: Linker Command File For F28335 Device

    //

    //###########################################################################

    // $TI Release: DSP2833x Header Files V1.01 $

    // $Release Date: September 26, 2007 $

    //###########################################################################

    */

    /* ======================================================

    // 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>\DSP2833x_Headers\cmd

    //  

    // For BIOS applications add:      DSP2833x_Headers_BIOS.cmd

    // For nonBIOS applications add:   DSP2833x_Headers_nonBIOS.cmd    

    ========================================================= */

    /* ======================================================

    // For Code Composer Studio prior to V2.2

    // --------------------------------------

    // 1) Use one of the following -l statements to include the

    // header linker command file in the project. The header linker

    // file is required to link the peripheral structures to the proper

    // locations within the memory map                                    */

    /* Uncomment this line to include file only for non-BIOS applications */

    /* -l DSP2833x_Headers_nonBIOS.cmd */

    /* Uncomment this line to include file only for BIOS applications */

    /* -l DSP2833x_Headers_BIOS.cmd */

    /* 2) In your project add the path to <base>\DSP2833x_headers\cmd to the

      library search path under project->build options, linker tab,

      library search path (-i).

    /*========================================================= */

    /* Define the memory block start/length for the F28335  

      PAGE 0 will be used to organize program sections

      PAGE 1 will be used to organize data sections

       Notes:

             Memory blocks on F28335 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.

             L0/L1/L2 and L3 memory blocks are mirrored - that is

             they can be accessed in high memory or low memory.

             For simplicity only one instance is used in this

             linker file.

             Contiguous SARAM memory blocks can be combined

             if required to create a larger memory block.

    */

    MEMORY

    {

    PAGE 0:    /* Program Memory */

              /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */

      ZONE0       : origin = 0x004000, length = 0x001000     /* XINTF zone 0 */

      RAML0       : origin = 0x008000, length = 0x001000     /* on-chip RAM block L0 */

      RAML1       : origin = 0x009000, length = 0x001000     /* on-chip RAM block L1 */

      RAML2       : origin = 0x00A000, length = 0x001000     /* on-chip RAM block L2 */

      RAML3       : origin = 0x00B000, length = 0x001000     /* on-chip RAM block L3 */

      ZONE6A      : origin = 0x100000, length = 0x00FC00    /* XINTF zone 6 - program space*/

      ZONE7       : origin = 0x200000, length = 0x100000    /* XINTF zone 7  */

      FLASHH      : origin = 0x300000, length = 0x008000     /* on-chip FLASH */

      FLASHG      : origin = 0x308000, length = 0x008000     /* on-chip FLASH */

      FLASHF      : origin = 0x310000, length = 0x008000     /* on-chip FLASH */

      FLASHE      : origin = 0x318000, length = 0x008000     /* on-chip FLASH */

      FLASHD      : origin = 0x320000, length = 0x008000     /* on-chip FLASH */

      FLASHC      : origin = 0x328000, length = 0x008000     /* on-chip FLASH */

      FLASHA      : origin = 0x338000, length = 0x007F80     /* on-chip FLASH */

      CSM_RSVD    : origin = 0x33FF80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */

      BEGIN       : origin = 0x33FFF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */

      CSM_PWL     : origin = 0x33FFF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA */

      OTP         : origin = 0x380400, length = 0x000400     /* on-chip OTP */

      ADC_CAL     : origin = 0x380080, length = 0x000009     /* ADC_cal function in Reserved memory */

      IQTABLES    : origin = 0x3FE000, length = 0x000b50     /* IQ Math Tables in Boot ROM */

      IQTABLES2   : origin = 0x3FEB50, length = 0x00008c     /* IQ Math Tables in Boot ROM */  

      FPUTABLES   : origin = 0x3FEBDC, length = 0x0006A0     /* FPU Tables in Boot ROM */

      ROM         : origin = 0x3FF27C, length = 0x000D44     /* Boot ROM */        

      RESET       : origin = 0x3FFFC0, length = 0x000002     /* part of boot ROM  */

      VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM  */

    PAGE 1 :   /* Data Memory */

              /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */

              /* Registers remain on PAGE1                                                  */

      BOOT_RSVD   : origin = 0x000000, length = 0x000050     /* Part of M0, BOOT rom will use this for stack */

      RAMM0       : origin = 0x000050, length = 0x0003B0     /* on-chip RAM block M0 */

      RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */

      RAML4       : origin = 0x00C000, length = 0x001000     /* on-chip RAM block L1 */

      RAML5       : origin = 0x00D000, length = 0x001000     /* on-chip RAM block L1 */

      RAML6       : origin = 0x00E000, length = 0x001000     /* on-chip RAM block L1 */

      RAML7       : origin = 0x00F000, length = 0x001000     /* on-chip RAM block L1 */

      ZONE6B      : origin = 0x10FC00, length = 0x000400     /* XINTF zone 6 - data space */

      FLASHB      : origin = 0x330000, length = 0x008000     /* on-chip FLASH */

    }

    /* Allocate sections to memory blocks.

      Note:

            codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code

                      execution when booting to flash

            ramfuncs  user defined section to store functions that will be copied from Flash into RAM

    */

    SECTIONS

    {

      /* Allocate program areas: */

      .cinit              : > FLASHA      PAGE = 0

      .pinit              : > FLASHA,     PAGE = 0

      .text               : > FLASHA      PAGE = 0

      codestart           : > BEGIN       PAGE = 0

      ramfuncs            : LOAD = FLASHD,

                            RUN = RAML0,

                            LOAD_START(_RamfuncsLoadStart),

                            LOAD_END(_RamfuncsLoadEnd),

                            RUN_START(_RamfuncsRunStart),

                            PAGE = 0

      csmpasswds          : > CSM_PWL     PAGE = 0

      csm_rsvd            : > CSM_RSVD    PAGE = 0

      /* Allocate uninitalized data sections: */

      .stack              : > RAMM1       PAGE = 1

      .ebss               : > RAML4       PAGE = 1

      .esysmem            : > RAMM1       PAGE = 1

      /* Initalized sections go in Flash */

      /* For SDFlash to program these, they must be allocated to page 0 */

      .econst             : > FLASHA      PAGE = 0

      .switch             : > FLASHA      PAGE = 0      

      /* Allocate IQ math areas: */

      IQmath              : > FLASHC      PAGE = 0                  /* Math Code */

      IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD

      IQmathTables2    : > IQTABLES2, PAGE = 0, TYPE = NOLOAD

      FPUmathTables    : > FPUTABLES, PAGE = 0, TYPE = NOLOAD

      /* Allocate DMA-accessible RAM sections: */

      DMARAML4         : > RAML4,     PAGE = 1

      DMARAML5         : > RAML5,     PAGE = 1

      DMARAML6         : > RAML6,     PAGE = 1

      DMARAML7         : > RAML7,     PAGE = 1

      /* Allocate 0x400 of XINTF Zone 6 to storing data */

      ZONE6DATA        : > ZONE6B,    PAGE = 1

      /* .reset is a standard section used by the compiler.  It contains the */

      /* the address of the start of _c_int00 for C Code.   /*

      /* When using the boot ROM this section and the CPU vector */

      /* table is not needed.  Thus the default type is set here to  */

      /* DSECT  */

      .reset              : > RESET,      PAGE = 0, TYPE = DSECT

      vectors             : > VECTORS     PAGE = 0, TYPE = DSECT

      /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */

      .adc_cal     : load = ADC_CAL,   PAGE = 0, TYPE = NOLOAD

    }

    /*

    //===========================================================================

    // End of file.

    //===========================================================================

    */

  • 另外,我的的第一个CodeStartBranch是没有加入到编译里来的,因为一加进来就报错了:pinit和cinit没定义,明明定义了,会不会是这里有问题?

  • CodeStartBranch是必须要加载的。否则程序无法启动。

    您的C2000的 rts2800ml的库是否已经添加?

  • 添加rts2800_ml.lib前:

    添加文件后:

    求教 !!不知道何故!

  • 上边的图是已经加入了CodeStartBranch以后的,

    CodeStartBranch中得代码如下:

    ;***********************************************************************

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

       .ref _c_int00

       .global code_start

    ;***********************************************************************

    ;* Function: codestart section

    ;*

    ;* Description: Branch to code starting point

    ;***********************************************************************

       .sect "codestart"

    code_start:

       .if WD_DISABLE == 1

           LB wd_disable       ;Branch to watchdog disable code

       .else

           LB _c_int00         ;Branch to start of boot.asm in RTS library

       .endif

    ;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

     

    求教啊,卡很久了,求帮忙!!!

  • 您要添加的是 rts2800ml-fpu32这个库,因为你用的是浮点的F28335。

  • 呵呵,程序?

  • 本来想把程序上传上来的,结果附件怎么都加不上,有没有能在线解决的,QQ什么的,我把工程文件传过去帮我看看?

    以上就是我得build设置。

    按照的说法添加的那个fpu32的库,我添加以后,结果如下:

    和之前的一样,没定义的pinit和cinit 在前面给出的CMD文件有给出:

     

    SECTIONS

    {

     

       /* Allocate program areas: */

       .cinit              : > FLASHA      PAGE = 0

       .pinit              : > FLASHA,     PAGE = 0

  • 恩,最早的时候我用的就是fpu32的库。

    看到你的说明以后我怀疑是不是添加错误了,又重新加了下,这次是改了BUILD文件中的位置(第二页我把build文件的贴图弄上来了,也包括加了fpu32的错误图,工程文件不知道为什么传不上附件),也报的时cinit和pinit的错误。想问一下您有在线的联系方式么?我像把工程文件传给你帮我看下?

  • 感谢!问题已经解决!

  • 您好!

    能否麻烦描述一下问题的原因?

    谢谢!

  • 其实是build option的linker里的一个Autoinit设置问题,将其改成Real-time的就行!

    其他的配置都是按照你说的去做,就解决了。

    非常感谢!

  • 谢谢你的分享!

  • Jones Chen,您好,为什么我电脑里面仅有 rts2800_fpu32.lib没有你说的这个,谢谢。

  • 楼主你好,是run-time 吧,而不是real-time?对吗?