SPRUJ27C November 2022 – November 2023 TMS320F280033 , TMS320F280034 , TMS320F280034-Q1 , TMS320F280036-Q1 , TMS320F280036C-Q1 , TMS320F280037 , TMS320F280037-Q1 , TMS320F280037C , TMS320F280037C-Q1 , TMS320F280038-Q1 , TMS320F280038C-Q1 , TMS320F280039 , TMS320F280039-Q1 , TMS320F280039C , TMS320F280039C-Q1
Issues a command to the Flash State Machine. See the description for the list of commands that can be issued by this function.
Synopsis
Fapi_StatusType Fapi_issueAsyncCommand(
Fapi_FlashStateCommandsType oCommand)
Parameters
oCommand [in] | Command to issue to the FSM |
Description
This function issues a command to the Flash State Machine for commands not requiring any additional information (such as address). Typical commands are Clear Status, Program Resume, Erase Resume and Clear_More. This function does not wait until the command is over; it just issues the command and returns back. Hence, the user application must wait for the FMC to complete the given command before returning to any kind of Flash accesses. The Fapi_checkFsmForReady() function can be used to monitor the status of an issued command.
Below are the details of these commands:
Return Value
Sample Implementation
#include “F021_F28003x_C28x.h”
#define CPUCLK_FREQUENCY 120 /* 120 MHz System frequency */
int main(void)
{
//
// Initialize System Control
//
Device_init();
//
// Call Flash Initialization to setup flash waitstates
// This function must reside in RAM
//
Flash_initModule(FLASH0CTRL_BASE, FLASH0ECC_BASE, DEVICE_FLASH_WAITSTATES);
//
// Jump to RAM and call the Flash API functions
//
Example_CallFlashAPI();
}
#pragma CODE_SECTION(Example_CallFlashAPI, ramFuncSection);
void Example_CallFlashAPI(void)
{
Fapi_StatusType oReturnCheck;
Fapi_FlashStatusType oFlashStatus;
uint16 au16DataBuffer[8] = {0x0001, 0x0203, 0x0405, 0x0607, 0x0809, 0x0A0B, 0x0C0D, 0x0E0F};
uint32 *DataBuffer32 = (uint32 *)au16DataBuffer;
uint32 u32Index = 0;
//
// Bank0 operations
//
EALLOW;
//
// This function is required to initialize the Flash API based on
// System frequency before any other Flash API operation can be performed
// Note that the FMC register base address and system frequency are passed as the parameters
//
oReturnCheck = Fapi_initializeAPI(F021_CPU0_BASE_ADDRESS, CPUCLK_FREQUENCY);
if(oReturnCheck != Fapi_Status_Success)
{
Example_Error(oReturnCheck);
}
//
// Fapi_setActiveFlashBank function initializes Flash banks
// and FMC for erase and program operations.
//
oReturnCheck = Fapi_setActiveFlashBank(Fapi_FlashBank0);
if(oReturnCheck != Fapi_Status_Success)
{
Example_Error(oReturnCheck);
}
//
// Issue an async command
//
oReturnCheck = Fapi_issueAsyncCommand(Fapi_ClearMore);
//
// Wait until the Fapi_ClearMore operation is over
//
while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
if(oReturnCheck != Fapi_Status_Success)
{
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();
}
//
// * User code for further Bank0 flash operations *
//
.
.
.
.
EDIS;
//
// Example is done here
//
Example_Done();
}