⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intel.c

📁 嵌入式系统 EP93xx处理器
💻 C
📖 第 1 页 / 共 3 页
字号:
        }    }    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 + -