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?