TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28388D: 进行flash实验时,出现错误:Break at address "0x3fe96f" with no debug information available, or outside of program code.

Part Number:TMS320F28388DOther Parts Discussed in Thread:C2000WARE

使用的CMD文件为2838x_FLASH_Ink_cpu1.cmd

MEMORY
{/* BEGIN is used for the "boot to Flash" bootloader mode*/BEGIN: origin = 0x080000, length = 0x000002BOOT_RSVD: origin = 0x000002, length = 0x0001AF/* Part of M0, BOOT rom will use this for stack */RAMM0: origin = 0x0001B1, length = 0x00024FRAMM1: origin = 0x000400, length = 0x0003F8/* on-chip RAM block M1 */
//RAMM1_RSVD: origin = 0x0007F8, length = 0x000008/* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */RAMD0: origin = 0x00C000, length = 0x000800RAMD1: origin = 0x00C800, length = 0x000800RAMLS0: origin = 0x008000, length = 0x000800RAMLS1: origin = 0x008800, length = 0x000800RAMLS2: origin = 0x009000, length = 0x000800RAMLS3: origin = 0x009800, length = 0x000800RAMLS4: origin = 0x00A000, length = 0x000800RAMLS5: origin = 0x00A800, length = 0x000800RAMLS6: origin = 0x00B000, length = 0x000800RAMLS7: origin = 0x00B800, length = 0x000800RAMGS0: origin = 0x00D000, length = 0x001000RAMGS1: origin = 0x00E000, length = 0x001000RAMGS2: origin = 0x00F000, length = 0x001000RAMGS3: origin = 0x010000, length = 0x001000RAMGS4: origin = 0x011000, length = 0x001000RAMGS5: origin = 0x012000, length = 0x001000RAMGS6: origin = 0x013000, length = 0x001000RAMGS7: origin = 0x014000, length = 0x001000RAMGS8: origin = 0x015000, length = 0x001000RAMGS9: origin = 0x016000, length = 0x001000RAMGS10: origin = 0x017000, length = 0x001000RAMGS11: origin = 0x018000, length = 0x001000RAMGS12: origin = 0x019000, length = 0x001000RAMGS13: origin = 0x01A000, length = 0x001000RAMGS14: origin = 0x01B000, length = 0x001000RAMGS15: origin = 0x01C000, length = 0x000FF8
//RAMGS15_RSVD: origin = 0x01CFF8, length = 0x000008/* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" *//* Flash sectors */FLASH0: origin = 0x080002, length = 0x001FFE  /* on-chip Flash */FLASH1: origin = 0x082000, length = 0x002000  /* on-chip Flash */FLASH2: origin = 0x084000, length = 0x002000  /* on-chip Flash */FLASH3: origin = 0x086000, length = 0x002000  /* on-chip Flash */FLASH4: origin = 0x088000, length = 0x008000  /* on-chip Flash */FLASH5: origin = 0x090000, length = 0x008000  /* on-chip Flash */FLASH6: origin = 0x098000, length = 0x008000  /* on-chip Flash */FLASH7: origin = 0x0A0000, length = 0x008000  /* on-chip Flash */FLASH8: origin = 0x0A8000, length = 0x008000  /* on-chip Flash */FLASH9: origin = 0x0B0000, length = 0x008000  /* on-chip Flash */FLASH10: origin = 0x0B8000, length = 0x002000  /* on-chip Flash */FLASH11: origin = 0x0BA000, length = 0x002000  /* on-chip Flash */FLASH12: origin = 0x0BC000, length = 0x002000  /* on-chip Flash */FLASH13: origin = 0x0BE000, length = 0x001FF0  /* on-chip Flash */
//FLASH13_RSVD: origin = 0x0BFFF0, length = 0x000010  /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */CPU1TOCPU2RAM: origin = 0x03A000, length = 0x000800CPU2TOCPU1RAM: origin = 0x03B000, length = 0x000800CPUTOCMRAM: origin = 0x039000, length = 0x000800CMTOCPURAM: origin = 0x038000, length = 0x000800CANA_MSG_RAM: origin = 0x049000, length = 0x000800CANB_MSG_RAM: origin = 0x04B000, length = 0x000800RESET: origin = 0x3FFFC0, length = 0x000002
}

SECTIONS
{codestart: > BEGIN, ALIGN(8).text: >> FLASH1 | FLASH2 | FLASH3 | FLASH4, ALIGN(8).cinit: > FLASH4, ALIGN(8).switch: > FLASH1, ALIGN(8).reset: > RESET, TYPE = DSECT /* not used, */.stack: > RAMM1

#if defined(__TI_EABI__).init_array: > FLASH1, ALIGN(8).bss: > RAMLS5.bss:output: > RAMLS3.bss:cio: > RAMLS5.data: > RAMLS5.sysmem: > RAMLS5/* Initalized sections go in Flash */.const: > FLASH5, ALIGN(8)
#else.pinit: > FLASH1, ALIGN(8).ebss: > RAMLS5.esysmem: > RAMLS5.cio: > RAMLS5/* Initalized sections go in Flash */.econst: >> FLASH4 | FLASH5, ALIGN(8)
#endiframgs0 : > RAMGS0, type=NOINITramgs1 : > RAMGS1, type=NOINITMSGRAM_CPU1_TO_CPU2 : > CPU1TOCPU2RAM, type=NOINITMSGRAM_CPU2_TO_CPU1 : > CPU2TOCPU1RAM, type=NOINITMSGRAM_CPU_TO_CM: > CPUTOCMRAM, type=NOINITMSGRAM_CM_TO_CPU: > CMTOCPURAM, type=NOINIT/* The following section definition are for SDFM examples */Filter_RegsFile  : > RAMGS0Filter1_RegsFile : > RAMGS1, fill=0x1111Filter2_RegsFile : > RAMGS2, fill=0x2222Filter3_RegsFile : > RAMGS3, fill=0x3333Filter4_RegsFile : > RAMGS4, fill=0x4444Difference_RegsFile : >RAMGS5, fill=0x3333#if defined(__TI_EABI__).TI.ramfunc : {} LOAD = FLASH3,RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3,LOAD_START(RamfuncsLoadStart),LOAD_SIZE(RamfuncsLoadSize),LOAD_END(RamfuncsLoadEnd),RUN_START(RamfuncsRunStart),RUN_SIZE(RamfuncsRunSize),RUN_END(RamfuncsRunEnd),ALIGN(8)#else.TI.ramfunc : {} LOAD = FLASH3,RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3,LOAD_START(_RamfuncsLoadStart),LOAD_SIZE(_RamfuncsLoadSize),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),RUN_SIZE(_RamfuncsRunSize),RUN_END(_RamfuncsRunEnd),ALIGN(8)#endif

}

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

测试文件为driverlib\f2838x\examples\c28x\flash\flashapi_ex1_programming.c

//#############################################################################
//
// FILE:flashapi_ex1_programming.c
//
// TITLE:  Flash programming example
//
//! \addtogroup driver_example_list
//! <h1> Flash Programming with AutoECC, DataAndECC, DataOnly and EccOnly </h1>
//!
//! This example demonstrates how to program Flash using API's following options
//! 1. AutoEcc generation
//! 2. DataOnly and EccOnly
//! 3. DataAndECC
//!
//! \b External \b Connections \n
//!  - None.
//!
//! \b Watch \b Variables \n
//!  - None.
//!
//
//#############################################################################
// $Copyright:
// Copyright (C) 2022 Texas Instruments Incorporated - http://www.ti.com
//
// Redistribution and use in source and binary forms, with or without 
// modification, are permitted provided that the following conditions 
// are met:
// 
//Redistributions of source code must retain the above copyright 
//notice, this list of conditions and the following disclaimer.
// 
//Redistributions in binary form must reproduce the above copyright
//notice, this list of conditions and the following disclaimer in the 
//documentation and/or other materials provided with the
//distribution.
// 
//Neither the name of Texas Instruments Incorporated nor the names of
//its contributors may be used to endorse or promote products derived
//from this software without specific prior written permission.
// 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// $
//#############################################################################

//
// Included Files
//
#include "driverlib.h"
#include "device.h"

//
// Include Flash API include file
//
#include "F021_F2838x_C28x.h"

// Include Flash API example header file
//
#include "flash_programming_f2838x_c28x.h"

//
// Defines
//

//
// Length (in 16-bit words) of data buffer used for program
//
#define  WORDS_IN_FLASH_BUFFER0x100

//
// Globals
//

//
// Data Buffers used for program operation using the flash API program function
//
#pragma  DATA_SECTION(Buffer,"DataBufferSection");
uint16Buffer[WORDS_IN_FLASH_BUFFER];
uint32*Buffer32 = (uint32 *)Buffer;


//
// Prototype of the functions used in this example
//
void Example_Error(Fapi_StatusType status);
void Example_Done(void);
void Example_CallFlashAPI(void);
void FMSTAT_Fail(void);
void ECC_Fail(void);
void Example_EraseSector(void);

void Example_ProgramUsingAutoECC(void);
void Example_ProgramUsingDataOnlyECCOnly(void);
void Example_ProgramUsingDataAndECC(void);

//
// Main
//
void main(void)
{//// Initialize device clock and peripherals// Copy the Flash initialization code from Flash to RAM// Copy the Flash API from Flash to RAM// Configure Flash wait-states, fall back power mode, performance features// and ECC//Device_init();//// Initialize GPIO//Device_initGPIO();//// Initialize PIE and clear PIE registers. Disables CPU interrupts.//Interrupt_initModule();//// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).//Interrupt_initVectorTable();//// Enable Global Interrupt (INTM) and realtime interrupt (DBGM)//EINT;ERTM;//// At 200MHz, execution wait-states for external oscillator is 3. Modify the// wait-states when the system clock frequency is changed.//Flash_initModule(FLASH0CTRL_BASE, FLASH0ECC_BASE, 3);//// Pump access must be gained by the core using pump semaphore//
#ifdef CPU1Flash_claimPumpSemaphore(FLASH_CPU1_WRAPPER);
#elif defined(CPU2)Flash_claimPumpSemaphore(FLASH_CPU2_WRAPPER);
#endif//// Flash API functions should not be executed from the same bank on which// erase/program operations are in progress.// Also, note that there should not be any access to the Flash bank on// which erase/program operations are in progress.  Hence below function// is mapped to RAM for execution.//Example_CallFlashAPI();//// Release the pump access//Flash_releasePumpSemaphore();//// Example is done here//Example_Done();
}


//*****************************************************************************
//  Example_CallFlashAPI
//
//  This function will interface to the flash API.
//  Flash API functions used in this function are executed from RAM in this
//  example.
//*****************************************************************************
#ifdef __cplusplus
#pragma CODE_SECTION(".TI.ramfunc");
#else
#pragma CODE_SECTION(Example_CallFlashAPI, ".TI.ramfunc");
#endif
void Example_CallFlashAPI(void)
{uint16 i = 0;Fapi_StatusType  oReturnCheck;//// Initialize the Flash API by providing the Flash register base address// and operating frequency(in MHz).// This function is required to initialize the Flash API based on System// frequency before any other Flash API operation can be performed.// This function must also be called whenever System frequency or RWAIT is// changed.//oReturnCheck = Fapi_initializeAPI(F021_CPU0_BASE_ADDRESS,DEVICE_SYSCLK_FREQ/1000000U);if(oReturnCheck != Fapi_Status_Success){//// Check Flash API documentation for possible errors//Example_Error(oReturnCheck);}//// Initialize the Flash banks and FMC for erase and program operations.// Fapi_setActiveFlashBank() function sets the Flash banks and FMC for// further Flash operations to be performed on the banks.//oReturnCheck = Fapi_setActiveFlashBank(Fapi_FlashBank0);if(oReturnCheck != Fapi_Status_Success){//// Check Flash API documentation for possible errors//Example_Error(oReturnCheck);}//// Fill a buffer with data to program into the flash.//for(i=0; i < WORDS_IN_FLASH_BUFFER; i++){Buffer[i] = i;}//// Program the sector using AutoECC option//Example_ProgramUsingAutoECC();//// Program the sector using DataOnly and ECCOnly options//Example_ProgramUsingDataOnlyECCOnly();//// Erase the sector before programming//Example_EraseSector();//// Program the sector using DataAndECC option//Example_ProgramUsingDataAndECC();//// Erase the sector for cleaner exit from the example.//Example_EraseSector();

}

//*****************************************************************************
//  Example_ProgramUsingAutoECC
//
//  Example function to Program data in Flash using "AutoEccGeneration" option.
//  Flash API functions used in this function are executed from RAM in this
//  example.
//*****************************************************************************
#ifdef __cplusplus
#pragma CODE_SECTION(".TI.ramfunc");
#else
#pragma CODE_SECTION(Example_ProgramUsingAutoECC, ".TI.ramfunc");
#endif
void Example_ProgramUsingAutoECC(void)
{uint32 u32Index = 0;uint16 i = 0;Fapi_StatusType  oReturnCheck;Fapi_FlashStatusType  oFlashStatus;Fapi_FlashStatusWordType  oFlashStatusWord;//// A data buffer of max 8 16-bit words can be supplied to the program// function.// Each word is programmed until the whole buffer is programmed or a// problem is found. However to program a buffer that has more than 8// words, program function can be called in a loop to program 8 words for// each loop iteration until the whole buffer is programmed.//// Remember that the main array flash programming must be aligned to// 64-bit address boundaries and each 64 bit word may only be programmed// once per write/erase cycle.  Meaning the length of the data buffer// (3rd parameter for Fapi_issueProgrammingCommand() function) passed// to the program function can only be either 4 or 8.//// Program data in Flash using "AutoEccGeneration" option.// When AutoEccGeneration option is used, Flash API calculates ECC for the// given 64-bit data and programs it along with the 64-bit main array data.// Note that any unprovided data with in a 64-bit data slice// will be assumed as 1s for calculating ECC and will be programmed.//// Note that data buffer (Buffer) is aligned on 64-bit boundary for verify// reasons.//// Monitor ECC address for the sector below while programming with// AutoEcc mode.//// In this example, the number of bytes specified in the flash buffer// are programmed in the flash sector below along with auto-generated// ECC.//for(i=0, u32Index = Bzero_Sector6_start;(u32Index < (Bzero_Sector6_start + WORDS_IN_FLASH_BUFFER));i+= 8, u32Index+= 8){oReturnCheck = Fapi_issueProgrammingCommand((uint32 *)u32Index,Buffer+i,8, 0, 0, Fapi_AutoEccGeneration);//// Wait until the Flash program operation is over//while(Fapi_checkFsmForReady() == Fapi_Status_FsmBusy);if(oReturnCheck != Fapi_Status_Success){//// Check Flash API documentation for possible errors//Example_Error(oReturnCheck);}//// Read FMSTAT register contents to know the status of FSM after// program command to see if there are any program operation related// errors//oFlashStatus = Fapi_getFsmStatus();if(oFlashStatus != 0){////Check FMSTAT and debug accordingly//FMSTAT_Fail();}//// Verify the programmed values.  Check for any ECC errors.//oReturnCheck = Fapi_doVerify((uint32 *)u32Index,4, Buffer32+(i/2),&oFlashStatusWord);if(oReturnCheck != Fapi_Status_Success){//// Check Flash API documentation for possible errors//Example_Error(oReturnCheck);}}
}

//*****************************************************************************
//  Example_ProgramUsingDataOnlyECCOnly
//
//  Example function to Program data in Flash using "DataOnly" option and ECC
//  using "EccOnly" option.
//  Flash API functions used in this function are executed from RAM in this
//  example.
//*****************************************************************************
#ifdef __cplusplus
#pragma CODE_SECTION(".TI.ramfunc");
#else
#pragma CODE_SECTION(Example_ProgramUsingDataOnlyECCOnly, ".TI.ramfunc");
#endif
void Example_ProgramUsingDataOnlyECCOnly(void)
{uint32 u32Index = 0;uint16 i = 0, ECC_B = 0, ECC_LB = 0, ECC_HB = 0;uint64 *LData, *HData, dataLow, dataHigh;Fapi_StatusType  oReturnCheck;Fapi_FlashStatusType  oFlashStatus;Fapi_FlashStatusWordType  oFlashStatusWord;//// Program data using "DataOnly" option and ECC using "EccOnly" option.//// When DataOnly option is used, Flash API will program only the data// portion in Flash at the address specified.//// When EccOnly option is used, Flash API will program only the ECC portion// in Flash ECC memory space (Flash main array address should be provided// for this function and not the corresponding ECC address).// Fapi_calculateEcc is used to calculate the corresponding ECC of the data.//// Note that data buffer (Buffer) is aligned on 64-bit boundary for verify// reasons.//// In this example, 0x100 bytes are programmed in Flash Sector6// along with the specified ECC.//for(i=0, u32Index = Bzero_Sector6_start;(u32Index < (Bzero_Sector6_start + WORDS_IN_FLASH_BUFFER));i+= 8, u32Index+= 8){//// Point LData to the lower 64 bit data// andHData to the higher 64 bit data//LData = (uint64 *)(Buffer32 + i/2);HData = (uint64 *)(Buffer32 + i/2 + 2);//// Calculate ECC for lower 64 bit and higher 64 bit data//ECC_LB = Fapi_calculateEcc(u32Index,*LData);ECC_HB = Fapi_calculateEcc(u32Index+4,*HData);ECC_B = ((ECC_HB<<8) | ECC_LB);oReturnCheck = Fapi_issueProgrammingCommand((uint32 *)u32Index,Buffer+i,8, 0, 0, Fapi_DataOnly);//// Wait until the Flash program operation is over//while(Fapi_checkFsmForReady() == Fapi_Status_FsmBusy);if(oReturnCheck != Fapi_Status_Success){//// Check Flash API documentation for possible errors//Example_Error(oReturnCheck);}//// Read FMSTAT register contents to know the status of FSM after// program command to see if there are any program operation related// errors//oFlashStatus = Fapi_getFsmStatus();if(oFlashStatus != 0){//Check FMSTAT and debug accordinglyFMSTAT_Fail();}oReturnCheck = Fapi_issueProgrammingCommand((uint32 *)u32Index, 0, 0,&ECC_B, 2, Fapi_EccOnly);//// Wait until the Flash program operation is over//while(Fapi_checkFsmForReady() == Fapi_Status_FsmBusy);if(oReturnCheck != Fapi_Status_Success){//// Check Flash API documentation for possible errors//Example_Error(oReturnCheck);}//// Read FMSTAT register contents to know the status of FSM after// program command to see if there are any program operation related// errors//oFlashStatus = Fapi_getFsmStatus();if(oFlashStatus != 0){//// Check FMSTAT and debug accordingly//FMSTAT_Fail();}Flash_enableECC(FLASH0ECC_BASE);//// Read back the programmed data to check if there are any ECC failures//dataLow = *(uint64 *)(u32Index);Flash_ErrorStatus errorStatusLow = Flash_getLowErrorStatus(FLASH0ECC_BASE);if((errorStatusLow != FLASH_NO_ERR) || (dataLow != *LData)){ECC_Fail();}dataHigh = *(uint64 *)(u32Index + 4);Flash_ErrorStatus errorStatusHigh = Flash_getHighErrorStatus(FLASH0ECC_BASE);if((errorStatusHigh != FLASH_NO_ERR) || (dataHigh != *HData)){ECC_Fail();}//// Verify the programmed values.  Check for any ECC errors.//oReturnCheck = Fapi_doVerify((uint32 *)u32Index,4, Buffer32+(i/2),&oFlashStatusWord);if(oReturnCheck != Fapi_Status_Success){//// Check Flash API documentation for possible errors//Example_Error(oReturnCheck);}}
}

//*****************************************************************************
//  Example_ProgramUsingDataAndECC
//
//  Example function to Program data in Flash using "DataAndEcc" option.
//  Flash API functions used in this function are executed from RAM in this
//  example.
//*****************************************************************************
#ifdef __cplusplus
#pragma CODE_SECTION(".TI.ramfunc");
#else
#pragma CODE_SECTION(Example_ProgramUsingDataAndECC, ".TI.ramfunc");
#endif
void Example_ProgramUsingDataAndECC(void)
{uint32 u32Index = 0;uint16 i = 0, ECC_B = 0, ECC_LB = 0, ECC_HB = 0;uint64 *LData, *HData, dataLow, dataHigh;Fapi_StatusType  oReturnCheck;Fapi_FlashStatusType  oFlashStatus;Fapi_FlashStatusWordType  oFlashStatusWord;//// Program data and ECC in Flash using "DataAndEcc" option.// When DataAndECC option is used, Flash API will program both the supplied// data and ECC in Flash at the address specified.// Fapi_calculateEcc is used to calculate the corresponding ECC of the data.//// Note that data buffer (Buffer) is aligned on 64-bit boundary for verify// reasons.//// In this example, 0x100 bytes are programmed in Flash Sector6// along with the specified ECC.//for(i=0, u32Index = Bzero_Sector6_start;(u32Index < (Bzero_Sector6_start + WORDS_IN_FLASH_BUFFER));i+= 8, u32Index+= 8){//// Point LData to the lower 64 bit data// andHData to the higher 64 bit data//LData = (uint64 *)(Buffer32 + i/2);HData = (uint64 *)(Buffer32 + i/2 + 2);//// Calculate ECC for lower 64 bit and higher 64 bit data//ECC_LB = Fapi_calculateEcc(u32Index,*LData);ECC_HB = Fapi_calculateEcc(u32Index+4,*HData);ECC_B = ((ECC_HB<<8) | ECC_LB);oReturnCheck = Fapi_issueProgrammingCommand((uint32 *)u32Index,Buffer+i,8, &ECC_B, 2, Fapi_DataAndEcc);//// Wait until the Flash program operation is over//while(Fapi_checkFsmForReady() == Fapi_Status_FsmBusy);if(oReturnCheck != Fapi_Status_Success){//// Check Flash API documentation for possible errors//Example_Error(oReturnCheck);}//// Read FMSTAT register contents to know the status of FSM after// program command to see if there are any program operation related// errors//oFlashStatus = Fapi_getFsmStatus();if(oFlashStatus != 0){//// Check FMSTAT and debug accordingly//FMSTAT_Fail();}Flash_enableECC(FLASH0ECC_BASE);//// Read back the programmed data to check if there are any ECC failures//dataLow = *(uint64 *)(u32Index);Flash_ErrorStatus errorStatusLow = Flash_getLowErrorStatus(FLASH0ECC_BASE);if((errorStatusLow != FLASH_NO_ERR) || (dataLow != *LData)){ECC_Fail();}dataHigh = *(uint64 *)(u32Index + 4);Flash_ErrorStatus errorStatusHigh = Flash_getHighErrorStatus(FLASH0ECC_BASE);if((errorStatusHigh != FLASH_NO_ERR) || (dataHigh != *HData)){ECC_Fail();}//// Verify the programmed values.  Check for any ECC errors.//oReturnCheck = Fapi_doVerify((uint32 *)u32Index,4, Buffer32+(i/2),&oFlashStatusWord);if(oReturnCheck != Fapi_Status_Success){//// Check Flash API documentation for possible errors//Example_Error(oReturnCheck);}}

}

//*****************************************************************************
//  Example_EraseSector
//
//  Example function to Erase data of a sector in Flash.
//  Flash API functions used in this function are executed from RAM in this
//  example.
//*****************************************************************************
#ifdef __cplusplus
#pragma CODE_SECTION(".TI.ramfunc");
#else
#pragma CODE_SECTION(Example_EraseSector, ".TI.ramfunc");
#endif
void Example_EraseSector(void)
{Fapi_StatusType  oReturnCheck;Fapi_FlashStatusType  oFlashStatus;Fapi_FlashStatusWordType  oFlashStatusWord;//// Erase the sector that is programmed in the above example// Erase Sector6//oReturnCheck = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector,(uint32 *)Bzero_Sector6_start);//// Wait until FSM is done with erase sector operation//while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}if(oReturnCheck != Fapi_Status_Success){//// Check Flash API documentation for possible errors//Example_Error(oReturnCheck);}//// Read FMSTAT register contents to know the status of FSM after// erase command to see if there are any erase operation related errors//oFlashStatus = Fapi_getFsmStatus();if(oFlashStatus != 0){//// Check Flash API documentation for FMSTAT and debug accordingly// Fapi_getFsmStatus() function gives the FMSTAT register contents.// Check to see if any of the EV bit, ESUSP bit, CSTAT bit or// VOLTSTAT bit is set (Refer to API documentation for more details).//FMSTAT_Fail();}//// Verify that Sector6 is erased//oReturnCheck = Fapi_doBlankCheck((uint32 *)Bzero_Sector6_start,Sector64KB_u32length,&oFlashStatusWord);if(oReturnCheck != Fapi_Status_Success){//// Check Flash API documentation for error info//Example_Error(oReturnCheck);}
}

//******************************************************************************
// For this example, just stop here if an API error is found
//******************************************************************************
void Example_Error(Fapi_StatusType status)
{////  Error code will be in the status parameter//__asm("ESTOP0");
}

//******************************************************************************
//  For this example, once we are done just stop here
//******************************************************************************
void Example_Done(void)
{__asm("ESTOP0");
}

//******************************************************************************
// For this example, just stop here if FMSTAT fail occurs
//******************************************************************************
void FMSTAT_Fail(void)
{__asm("ESTOP0");
}

//******************************************************************************
// For this example, just stop here if ECC fail occurs
//******************************************************************************
void ECC_Fail(void)
{__asm("ESTOP0");
}

//
// End of File
//

BOOT MODE设置为FLASH启动

使用MCU063B-开发板

Ben Qin:

你好,可定位到主程序中的具体语句吗?你对例程有任何的修改吗?

,

KuiDa Li:

谢谢回复

我对例程没有修改。

点击单步调试后就报错了

,

Ben Qin:

你的C2000Ware版本是什么?

KuiDa Li 说:使用的CMD文件为2838x_FLASH_Ink_cpu1.cmd

cmd文件是这个吗?

,

KuiDa Li:

我的C2000Ware版本是最新的,4.03

我现在将CMD文件更换为2838x_flash_api_Ink.cmd后,还是出现同样的错误。

请问上图中的CPU1_FLASH文件夹里需要添加什么文件?谢谢

,

Ben Qin:

你好,我这边调试没有问题。

不要用standalone模式,用第一个。

KuiDa Li 说:请问上图中的CPU1_FLASH文件夹里需要添加什么文件?谢谢

不需要操作,是自动生成的。

,

KuiDa Li:

非常感谢,本人是个新手,问题已解决了。

我应该在predefined symbols中添加“_FLASH”

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28388D: 进行flash实验时,出现错误:Break at address "0x3fe96f" with no debug information available, or outside of program code.
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1