Part Number: TMS320F28379S
Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE
Tool/software: TI C/C++ Compiler
Hey,
I am working with the Flash API for the TMS320F28379S. I am trying to program Flash, but cannot because the code goes to an unknown location after Fapi_SetActiveFlashBank. I have mainly took the code from the example from control suite:
void Program_FlashAPI(void)
{
Fapi_StatusType oReturnCheck;
volatile Fapi_FlashStatusType oFlashStatus;
Fapi_FlashStatusWordType oFlashStatusWord;
//uint16 au16DataBuffer[8] = {0x0001, 0x0203, 0x0405, 0x0607, 0x0809, 0x0A0B, 0x0C0D, 0x0E0F};
//uint32 *DataBuffer32 = (uint32 *)FlashMirrorBuffer;
uint32 u32Index = 0;
uint16 i = 0;
EALLOW;
PUMPREQUEST = 0x5A5A0002; // Give pump ownership to FMC0(Bank0)
oReturnCheck = Fapi_initializeAPI(F021_CPU0_W0_BASE_ADDRESS, 200);
if(oReturnCheck != Fapi_Status_Success)
{Example_Error(oReturnCheck);}
oReturnCheck = Fapi_setActiveFlashBank(Fapi_FlashBank0);
if(oReturnCheck != Fapi_Status_Success)
{Example_Error(oReturnCheck);}
oReturnCheck = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, (uint32 *)FLASH_SectorE_start);
while(Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
oReturnCheck = Fapi_doBlankCheck((uint32 *)FLASH_SectorE_start, FLASH_64KSectorE_u32length, &oFlashStatusWord);
if(oReturnCheck != Fapi_Status_Success)
{
// Example_Error(oReturnCheck);
}
// Program Sector E
for(i=0, u32Index = FLASH_SectorE_start; (u32Index < (FLASH_SectorE_start + WORDS_IN_FLASH_BUFFER)) &&
(oReturnCheck == Fapi_Status_Success); i+= 8, u32Index+=8)
{
//
// Issue program command
//
oReturnCheck = Fapi_issueProgrammingCommand((uint32 *)u32Index, (uint16 *)EEPROM_52.Buffer+i, 8, 0, 0, Fapi_DataOnly);
//
// Wait until the Flash program operation is over
//
while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
if(oReturnCheck != Fapi_Status_Success)
{Example_Error (oReturnCheck);}
// oFlashStatus = Fapi_getFsmStatus();
// if(oFlashStatus != 0)
// {
//
//Check FMSTAT and debug accordingly
//
//FMSTAT_Fail();
// }
//
// Verify the programmed values
//
// oReturnCheck = Fapi_doVerify((uint32 *)u32Index, 4, FLASH_SectorE_start + i, &oFlashStatusWord);
// if(oReturnCheck != Fapi_Status_Success)
// {
//
// Check Flash API documentation for possible errors
//
// Example_Error(oReturnCheck);
// }
}
PUMPREQUEST = 0x5A5A0000;
EDIS;
//
// Example is done here
//
///Example_Done();
}
The linker has already had this modification done to it:
#ifdef __TI_COMPILER_VERSION__
#if __TI_COMPILER_VERSION__ >= 15009000
GROUP
{
.TI.ramfunc
{ -l F021_API_F2837xS_FPU32.lib}
} LOAD = FLASHD,
RUN = RAMD0,
LOAD_START(_RamfuncsLoadStart),
LOAD_SIZE(_RamfuncsLoadSize),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
RUN_SIZE(_RamfuncsRunSize),
RUN_END(_RamfuncsRunEnd),
PAGE = 0
#else
GROUP
{
ramfuncs
{ -l F021_API_F2837xS_FPU32.lib}
} LOAD = FLASHD,
RUN = RAMD0,
LOAD_START(_RamfuncsLoadStart),
LOAD_SIZE(_RamfuncsLoadSize),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
RUN_SIZE(_RamfuncsRunSize),
RUN_END(_RamfuncsRunEnd),
PAGE = 0
#endif
#endif
Why does SetFlashBank cause the code to get lost?