ZHCADD5A November 2023 – April 2024 TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1
EEPROM_UpdateBankStatus() 函数的功能是更新 EEPROM 组状态。此函数由 EEPROM_Write() 函数调用。首先读取 EEPROM 组状态,以确定如何继续。
Bank_Status[0] = *(Bank_Pointer);
Page_Status[0] = *(Page_Pointer);
如果此状态表示 EEPROM 组为空,则状态会更改为当前并进行编程。
// Set Bank Status to Current Bank
Bank_Status[0] = CURRENT_BANK;
Bank_Status[1] = CURRENT_BANK;
Bank_Status[2] = CURRENT_BANK;
Bank_Status[3] = CURRENT_BANK;
// 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);
// Program Bank Status to current bank
oReturnCheck = Fapi_issueProgrammingCommand((uint32*) Bank_Pointer,
Bank_Status, 4, 0, 0,
Fapi_AutoEccGeneration);
// Wait for completion and check for any programming errors
EEPROM_CheckStatus(&oReturnCheck);
// Set Page Pointer to first page of current bank
Page_Counter = 0;
Page_Pointer = Bank_Pointer + 8;
如果状态不为空,则接下来检查是否存在其中的所有页面都被使用的当前 EEPROM 组(已满 EEPROM 组)。在这种情况下,当前 EEPROM 组状态将更新以显示 EEPROM 组已满,并且下一个 EEPROM 组状态将更新为当前以允许对下一个 EEPROM 组进行编程。最后,页面指针会更新为新 EEPROM 组的第一页。
// Set Bank Status to Used Bank
Bank_Status[0] = CURRENT_BANK;
Bank_Status[1] = CURRENT_BANK;
Bank_Status[2] = CURRENT_BANK;
Bank_Status[3] = CURRENT_BANK;
// 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);
// Program Bank Status to full bank
oReturnCheck = Fapi_issueProgrammingCommand((uint32*) Bank_Pointer + 2,
Bank_Status, 4, 0, 0,
Fapi_AutoEccGeneration);
// Wait for completion and check for any programming errors
EEPROM_CheckStatus(&oReturnCheck);
// Increment Bank Pointer to next bank
Bank_Pointer += Bank_Size;
// Set Bank Status to Current Bank
Bank_Status[0] = CURRENT_BANK;
Bank_Status[1] = CURRENT_BANK;
Bank_Status[2] = CURRENT_BANK;
Bank_Status[3] = CURRENT_BANK;
// 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);
// Program Bank Status to current bank
oReturnCheck = Fapi_issueProgrammingCommand((uint32*) Bank_Pointer,
Bank_Status, 4, 0, 0,
Fapi_AutoEccGeneration);
// Wait for completion and check for any programming errors
EEPROM_CheckStatus(&oReturnCheck);
// Set Page Pointer to first page of current bank
Page_Counter = 0;
Page_Pointer = Bank_Pointer + 8;