主题中讨论的其他器件: C2000WARE
工具/软件:Code Composer Studio
您好、
我的器件利用 TMS320F28379S 上的闪存 API。 但是、每当我调用这两行来复位微处理器时:
WdRegs.WDCR.ALL = 0x28;
WdRegs.WDCR.ALL = 0x00;
器件最终在 NMI ISR 例程中冻结。
在尝试覆盖闪存后、Flash0EccRegs 中出现几个错误、例如 ERR_STATUS 读取0x00060002。 SINGLE_ERR_ADDR_LOW 读取为0x00088008。 SINGLE_ERR_ADDR_HIGH 读取0x00088004。 下面列出了写入闪存的代码、它主要取自控制套件中的示例。
void Program_FlashAPI (void) { Fapi_StatusType oReturnCheck; volatile Fapi_FlashStatusType oFlashStatus; Fapi_FlashStatusWordType oFlashStatusWord; UINT32 u32Index = 0; UINT16 I = 0; EALLOW; PUMPREQUEST = 0x5A5A0002; //将泵所有权授予 FMC0 (Bank0) oReturnCheck = Fapi_initiatileAPI (F021_CPU0_W0_BASE_ADDRESS、194); if (oReturnCheck!= Fapi_Status_Success) {Example_Error (oSecurnCheck);} oReturnapi= Fash_Status_Success_Success_Flash ! (Fsection_Check_FoFoFnSturapi_Check= Fost_Dion_Dion_Diftorex!(FnF) (u32Index <(flash_SectorE_start + wors_in_flash_buffer))&& (oReturnCheck = Fapi_Status_Success);i+= 8、u32Index+=8) { // 发布程序命令 // oReturnCheck = Fapi_issueProgramming Command ((((Uint32 *、uint8)、ueEEPROM 命令/u32 *、uint8)、uinteBuffer fapi_DataOnly); // 等待闪存程序操作完成// while (fapi_checkFsmForReady()!= Fapi_Status_FsmReady){} if (oReturnCheck!= Fapi_Status_Success) {example_Error (oFlashurnCheck);} oFlashStatus = Fapi_Status_FsmReady){= Fapi/ FAILn ! /(// if)(/fstat/funebug (/f) // //验证编程值 // // oReturnCheck = fapi_doVerify (((uint32 *) u32Index、4、flash_Sectore_start + i、&oFlashStatusWord); //if (oReturnCheck!= fapi_Status_Success) //{ // 检查闪存 API 文档 ;//检查0xAQUEST/错误= 0xA5PURN;//检查可能的错误:// E0Xn // 此处完成示例 // //Example_Done (); }
读取闪存时也会出现几个错误、其中存储了0x0000、将读取为0x0200。 在读取闪存时、我只需使用此子例程来读取指向的信息:
void Load_Flash_Buffer (void) { uint16 i; uint16 * Flash_ptr; //指向闪 存 Flash_ptr 中某个位置的指针=(uint16*) EEPROM_Copy; for (i=0;i < 256;i++) { EEPROM_52. Buffer[i]=((unsigned char)* Flash_ptr)& 0xFF); Flash_PTR++; }
引发这些错误的原因是否具体、除了控制套件示例之外、我还应该遵循标准代码来写入和读取闪存中的某个位置?