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时会发生该错误。 传递给该函数的数据也是有效的。
感谢任何帮助调试。