Thread 中讨论的其他器件:EK-TM4C1294XL
工具与软件:
我将写入引导加载程序并将程序数据写入闪存(从地址0x0001 0000开始)这正常运行、直到我点击地址0x0002 0000、然后程序在原始中断状态寄存器中检测到访问错误。 我已经检查了 FMPREn 和 FMPPEn 寄存器、发现所有的位都被置位。 我还检查了应该进行写入的闪存地址、发现它全为0、而不是要写入的数据。 以下是用于写入闪存的代码。
BOOL amd_WriteWord(volatile ULONG* pulDest, ULONG* pulSource)
{
BOOL bOK = TRUE;
union
{
UBYTE ubByte[4];
ULONG ulWord;
} atTemp;
MAP_IntMasterDisable();
patFlash->FCMISC = (FLASH_FCMISC_AMISC | FLASH_FCMISC_VOLTMISC |
FLASH_FCMISC_ERMISC);
patFlash->FMA = pulDest;
atTemp.ubByte[0] = *((UBYTE*)pulSource);
atTemp.ubByte[1] = *((UBYTE*)pulSource+1);
atTemp.ubByte[2] = *((UBYTE*)pulSource+2);
atTemp.ubByte[3] = *((UBYTE*)pulSource+3);
patFlash->FMD = atTemp.ulWord;
patFlash->FMC = FLASH_FMC_WRKEY | FLASH_FMC_WRITE;
while (patFlash->FMC & FLASH_FMC_WRITE) {} //wait for the write to complete
if (patFlash->FCRIS & (FLASH_FCRIS_ARIS | FLASH_FCRIS_VOLTRIS |
FLASH_FCRIS_INVDRIS | FLASH_FCRIS_PROGRIS))
{
bOK = FALSE;
}
MAP_IntMasterEnable();
return(bOK);
}
当 pulDest = 0x0002 0000时会发生该错误。 传递给该函数的数据也是有效的。

感谢任何帮助调试。



