我遇到的問題是PIC32MX795F512L的引導加載程序正在工作。Pic32引導加載程序寫入內存
我基於微芯片網站上的示例代碼。
下面是我應該編寫內存的代碼段,我已經驗證了引導加載程序到目前爲止(解析十六進制文件就好了,數據到達了這一點,但沒有寫入內存):
#define NVMOP_WORD_PGM 0x4001
// Write the data into flash.
Result = NVMemWriteWord(ProgAddress, WrData);
// Assert on error. This must be caught during debug phase.
if(Result != 0)
{
ASSERT(Result==0);
}
UINT NVMemWriteWord(void* address, UINT data)
{
UINT res;
NVMADDR = KVA_TO_PA((unsigned int)address);
// Load data into NVMDATA register
NVMDATA = data;
// Unlock and Write Word
res = NVMemOperation(NVMOP_WORD_PGM);
return res;
}
UINT __attribute__((nomips16)) NVMemOperation(UINT nvmop)
{
int int_status;
int susp;
// Disable DMA & Disable Interrupts
#ifdef _DMAC
int_status = INTDisableInterrupts();
susp = DmaSuspend();
#else
int_status = INTDisableInterrupts();
#endif // _DMAC
// Enable Flash Write/Erase Operations
NVMCON = nvmop;//NVMCON_WREN | nvmop;
// Data sheet prescribes 6us delay for LVD to become stable.
// To be on the safer side, we shall set 7us delay.
delay_us(7);
NVMKEY = 0xAA996655;
NVMKEY = 0x556699AA;
NVMCONSET = NVMCON_WR;
// Wait for WR bit to clear
while(NVMCON & 0x8000);//NVMCON_WR);
// Disable Flash Write/Erase operations
NVMCONCLR = NVMCON_WREN;
// Enable DMA & Enable Interrupts
#ifdef _DMAC
DmaResume(susp);
INTRestoreInterrupts(int_status);
#else
INTRestoreInterrupts(int_status);
#endif // _DMAC
// Return Error Status
return(NVMemIsError());
}
的一個程序地址的正被裝入實施例是:用0x9D033358數據是2403000E
配置位被設置在代碼和如下:
地址設置
1FC02FF0 FCFFFFFF
1FC02FF4 FFF8FFDF
1FC02FF8 FF69CC5B
1FC02FFC 7FFFFFFF
不能告訴你什麼都做位,但閃光燈位被設置爲可寫和代碼保護是禁用。
在嘗試執行程序字(寫入)操作之前,您是否執行了擦除塊操作? –
謝謝。解決了這個問題。添加一個答案,我可以+1你 – user2076574
這是一個錯誤發佈問題的解決方案。請張貼它作爲你自己的答案。回答自己的問題是可以的。 –