ZHCUAO0C 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
对闪存 API 进行初始化
概要
Fapi_StatusType Fapi_initializeAPI(
Fapi_FmcRegistersType *poFlashControlRegister,
uint32 u32HclkFrequency)
参数
poFlashControlRegister [in] | 指向闪存控制器寄存器基地址的指针。使用 F021_CPU0_BASE_ADDRESS。 |
u32HclkFrequency [in] | 以 MHz 为单位的系统时钟频率 |
说明
在执行任何其他闪存 API 操作之前,需要使用该函数来对闪存 API 进行初始化。如果更改系统频率或 RWAIT,也必须调用该函数。
对闪存控制寄存器基地址在该函数内部进行了硬编码,不使用用户提供的值(传递给该函数的第一个参数)。但是,如果内部硬编码值与用户提供的值不匹配,即使仍然正常执行初始化步骤,也会向用户返回警告。
返回值
实现示例
#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;
//
// 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
//
// This function must also be called whenever System frequency or RWAIT is changed.
//
oReturnCheck = Fapi_initializeAPI(F021_CPU0_BASE_ADDRESS, CPUCLK_FREQUENCY);
if(oReturnCheck != Fapi_Status_Success)
{
Example_Error(oReturnCheck);
}
//
// Fapi_setActiveFlashBank function initializes Flash bank
// and FMC for erase and program operations.
//
oReturnCheck = Fapi_setActiveFlashBank(Fapi_FlashBank0);
if(oReturnCheck != Fapi_Status_Success)
{
Example_Error(oReturnCheck);
}
//
// Erase Program
//
/* User code for further Bank flash operations */
.
.
.
.
//
// Example is done here
//
Example_Done();
}