ZHCADD5A November 2023 – April 2024 TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1
EEPROM_Program_64_Bits() 函数提供将四个 16 位字编程到存储器中的功能。第一个参数 Num_Words 允许用户指定将写入多少个有效字。数据字应分配给 Write_Buffer 的前 4 个位置,以供 Fapi_issueProgrammingCommand 函数使用。如果函数调用中指定的字少于四个,则缺少的字将用 0xFFFF 填充。这样做是为了符合 ECC 要求。
首先,测试是否存在已满的 EEPROM 单元。
EEPROM_Get_64_Bit_Data_Address();
接下来,如果指定的字数少于 4,则写入缓冲区中将填充 1。
int i;
for(i = Num_Words; i < 4; i++)
{
Write_Buffer[i] = 0xFFFF;
}
接下来,对数据进行编程,并且指针递增到对数据进行编程的下一个位置。
// Clears status of previous Flash operation
ClearFSMStatus();
Fapi_setupBankSectorEnable(FLASH_WRAPPER_PROGRAM_BASE+FLASH_O_CMDWEPROTA, WE_Protection_A_Mask);
Fapi_setupBankSectorEnable(FLASH_WRAPPER_PROGRAM_BASE+FLASH_O_CMDWEPROTB, WE_Protection_B_Mask);
oReturnCheck = Fapi_issueProgrammingCommand((uint32*) Bank_Pointer,
Write_Buffer, 4, 0, 0,
Fapi_AutoEccGeneration);
// Wait for completion and check for any programming errors
EEPROM_CheckStatus(&oReturnCheck);
// Increment to next location
Bank_Pointer += 4;
编程完成后,将检查 Erase_Inactive_Unit 标志。如果设置,则非活动单元将被擦除,执行空白检查,并且写入/擦除保护掩码将被重新配置。
if (Erase_Inactive_Unit) {
// Erase inactive unit
Erase_Blank_Check = 1;
EEPROM_Erase();
Erase_Inactive_Unit = 0;
uint64 WE_Protection_AB_Mask = Configure_Protection_Masks(
FIRST_AND_LAST_SECTOR[EEPROM_ACTIVE_UNIT],
NUM_EEPROM_SECTORS);
WE_Protection_A_Mask = 0xFFFFFFFF ^ (uint32)WE_Protection_AB_Mask;
WE_Protection_B_Mask = 0x00000FFF ^ WE_Protection_AB_Mask >> 32;
}