📄 intel.c
字号:
} } else if (usByteWidth == 2) { for(i = 0; i < pInfo->pQuery->NumEraseBlocks; i++) { for(j = 0; j< pInfo->pQuery->sBlockInfo[i].blocks; j++) { if(iEraseBase >= pInfo->pQuery->sBlockInfo[i].block_size*2) { *pulSectorBase = *pulSectorBase + pInfo->pQuery->sBlockInfo[i].block_size*2; iEraseBase = iEraseBase - pInfo->pQuery->sBlockInfo[i].block_size*2; } else { *piCurEraseRegion = i; *piCurEraseBlock = j; return 0; } } } } else { // No such parameter. return 1; } return 1; }//****************************************************************************// Name : IntelFlashErase// Description: This routine erase the sectors of intel.// Arguments : iOffset - the offset address.// len - the length.// Return : 0 - succuss.// 1 - failure.// Note(s) ://****************************************************************************int IntelFlashErase(struct FlashInfo *pInfo, int iOffset, int len){ volatile unsigned short *ptr16 = (volatile unsigned short *)pInfo->FlashBase; volatile unsigned long *ptr32 = (volatile unsigned long *)pInfo->FlashBase; unsigned short usByteWidth = pInfo->ByteWidth; long i, j,iIdx; //long iEraseLen = len; //long iEraseBase = iOffset; unsigned long pulSectorBase=0,pulSectorEnd=0; int piCurEraseRegionStart=0,piCurEraseBlockStart=0,piCurEraseRegionEnd=0,piCurEraseBlockEnd=0; if(GetSectorIndex(pInfo,iOffset,&pulSectorBase, &piCurEraseRegionStart, &piCurEraseBlockStart)==1) return 1; if(GetSectorIndex(pInfo,iOffset+len,&pulSectorEnd, &piCurEraseRegionEnd, &piCurEraseBlockEnd)==1) return 1; if (usByteWidth == 1) { if(piCurEraseRegionStart!=piCurEraseRegionEnd) { for(i = piCurEraseRegionStart; i <= piCurEraseRegionEnd; i++) { if(i==piCurEraseRegionStart) { for(j = piCurEraseBlockStart; j< pInfo->pQuery->sBlockInfo[i].blocks; j++) { IntelFlashEraseSector(pInfo,pulSectorBase); // //#if 1 for(iIdx = 0; iIdx < (pInfo->pQuery->sBlockInfo[i].block_size>>1); iIdx++) { if(*(ptr16 + (pulSectorBase >> 1) + iIdx) != 0xffff) { return 1; } } //#endif pulSectorBase = pulSectorBase + pInfo->pQuery->sBlockInfo[i].block_size; } } else if(i==piCurEraseRegionEnd) { for(j = 0; j<= piCurEraseBlockEnd; j++) { IntelFlashEraseSector(pInfo,pulSectorBase); // //#if 1 for(iIdx = 0; iIdx < (pInfo->pQuery->sBlockInfo[i].block_size>>1); iIdx++) { if(*(ptr16 + (pulSectorBase >> 1) + iIdx) != 0xffff) { return 1; } } //#endif pulSectorBase = pulSectorBase + pInfo->pQuery->sBlockInfo[i].block_size; } } else { for(j = 0; j< pInfo->pQuery->sBlockInfo[i].blocks; j++) { IntelFlashEraseSector(pInfo,pulSectorBase); // //#if 1 for(iIdx = 0; iIdx < (pInfo->pQuery->sBlockInfo[i].block_size>>1); iIdx++) { if(*(ptr16 + (pulSectorBase >> 1) + iIdx) != 0xffff) { return 1; } } //#endif pulSectorBase = pulSectorBase + pInfo->pQuery->sBlockInfo[i].block_size; } } } } else { for(j = piCurEraseBlockStart; j<= piCurEraseBlockEnd; j++) { IntelFlashEraseSector(pInfo,pulSectorBase); // //#if 1 for(iIdx = 0; iIdx < (pInfo->pQuery->sBlockInfo[piCurEraseRegionStart].block_size>>1); iIdx++) { if(*(ptr16 + (pulSectorBase >> 1) + iIdx) != 0xffff) { return 1; } } //#endif pulSectorBase = pulSectorBase + pInfo->pQuery->sBlockInfo[piCurEraseRegionStart].block_size; } } return 0; } // //32 bit // else if (usByteWidth == 2) { if(piCurEraseRegionStart!=piCurEraseRegionEnd) { for(i = piCurEraseRegionStart; i <= piCurEraseRegionEnd; i++) { if(i==piCurEraseRegionStart) { for(j = piCurEraseBlockStart; j< pInfo->pQuery->sBlockInfo[i].blocks; j++) { IntelFlashEraseSector(pInfo,pulSectorBase); // //#if 1 for(iIdx = 0; iIdx < ((pInfo->pQuery->sBlockInfo[i].block_size*2)>>2); iIdx++) { if(*(ptr32 + (pulSectorBase >> 2) + iIdx) != 0xffffffff) { return 1; } } //#endif pulSectorBase = pulSectorBase + pInfo->pQuery->sBlockInfo[i].block_size*2; } } else if(i==piCurEraseRegionEnd) { for(j = 0; j<= piCurEraseBlockEnd; j++) { IntelFlashEraseSector(pInfo,pulSectorBase); // //#if 1 for(iIdx = 0; iIdx < ((pInfo->pQuery->sBlockInfo[i].block_size*2)>>2); iIdx++) { if(*(ptr32 + (pulSectorBase >> 2) + iIdx) != 0xffffffff) { return 1; } } //#endif pulSectorBase = pulSectorBase + pInfo->pQuery->sBlockInfo[i].block_size*2; } } else { for(j = 0; j< pInfo->pQuery->sBlockInfo[i].blocks; j++) { IntelFlashEraseSector(pInfo,pulSectorBase); // //#if 1 for(iIdx = 0; iIdx < ((pInfo->pQuery->sBlockInfo[i].block_size*2)>>2); iIdx++) { if(*(ptr32 + (pulSectorBase >> 2) + iIdx) != 0xffffffff) { return 1; } } //#endif pulSectorBase = pulSectorBase + pInfo->pQuery->sBlockInfo[i].block_size*2; } } } } else { for(j = piCurEraseBlockStart; j<= piCurEraseBlockEnd; j++) { IntelFlashEraseSector(pInfo,pulSectorBase); // //#if 1 for(iIdx = 0; iIdx < ((pInfo->pQuery->sBlockInfo[piCurEraseRegionStart].block_size*2)>>2); iIdx++) { if(*(ptr32 + (pulSectorBase >> 2) + iIdx) != 0xffffffff) { return 1; } } //#endif pulSectorBase = pulSectorBase + pInfo->pQuery->sBlockInfo[piCurEraseRegionStart].block_size*2; } } return 0; } else { // No such parameter. return 1; } return 0;}/*int IntelFlashErase(struct FlashInfo *pInfo, int iOffset, int len){ volatile unsigned short *ptr16 = (volatile unsigned short *)pInfo->FlashBase; volatile unsigned long *ptr32 = (volatile unsigned long *)pInfo->FlashBase; unsigned short usByteWidth = pInfo->ByteWidth; long i, j,iIdx; int iEraseLen = len; int iEraseBase = iOffset; if (usByteWidth == 1) { for(i = 0; i < pInfo->pQuery->NumEraseBlocks; i++) { for(j = 0; j< pInfo->pQuery->sBlockInfo[i].blocks; j++) { if(iEraseLen > pInfo->pQuery->sBlockInfo[i].block_size) { iEraseLen = iEraseLen - pInfo->pQuery->sBlockInfo[i].block_size; IntelFlashEraseSector(pInfo,iEraseBase); // //for(iIdx = 0; iIdx < (pInfo->pQuery->sBlockInfo[i].block_size>>1); iIdx++) //{ // if(*(ptr16 + (iEraseBase >> 1) + iIdx) != 0xffff) // { // return 1;; // } //} iEraseBase=iEraseBase + pInfo->pQuery->sBlockInfo[i].block_size; } else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -