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

📄 intel.c

📁 EP9315的wince下载程序。download.exe
💻 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 + -