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

📄 ha_emi.c

📁 MP3的代码很实用 MP3的代码很实用
💻 C
📖 第 1 页 / 共 2 页
字号:
	
	i = (U32)(size << 14);
	j=i+0x249B;                                                         //suradd and desadd not add up
	*(RP)tempcontrol = j;
	
	*(RP)tempconfig =0x31d;						//channel enable!
	
	
	*(RP)EMIADDR_NANDCOM = 0x80000000;					//write begin!
	
	#ifndef RELEASE
	i = *(RP)EMIADDR_NANDCOM;
	if( i!= 0x0000001 )
	{
		HA_EMI_WRIT(gloabalvar_add,EMIADDR_NANDCOM);
		gloabalvar_add = gloabalvar_add + 4;
	}
	#endif
	

	
	i = *(RP)EMIADDR_NANDIDLE;                         //judge Nand flash compish actions
	while((i&0x1) != 0x1)
	{  i = *(RP)EMIADDR_NANDIDLE; }
	
	
	
   return gloabalvar_add;
    
}


U32 Dma_Nand_Erase(U32 nand_Add, U32 gloabalvar_add)
{
	U32 i;
	*(RP)EMIADDR_NANDCONF = 0x0100aaa;                              //3 addresss mode
	#ifndef RELEASE
	i = *(RP)EMIADDR_NANDCONF;
	if( i!= 0x02000aaa )
	{
		HA_EMI_WRIT(gloabalvar_add,EMIADDR_NANDCONF);
		gloabalvar_add = gloabalvar_add + 4;
	}
	#endif
	
	*(RP)EMIADDR_NANDADDR = (nand_Add >> 8);
	#ifndef RELEASE
	i = *(RP)EMIADDR_NANDADDR;
	if( i!= (nand_Add >> 8))
	{
		HA_EMI_WRIT(gloabalvar_add, EMIADDR_NANDADDR);
		gloabalvar_add = gloabalvar_add + 4;
	}
	#endif
	
	
	*(RP)EMIADDR_NANDCOM = 0x80000060;
	#ifndef RELEASE
	i = *(RP)EMIADDR_NANDCOM;
	if( i!= 0x80000060 )
	{
		HA_EMI_WRIT(gloabalvar_add, EMIADDR_NANDCOM);
		gloabalvar_add = gloabalvar_add + 4;
	}
	#endif	
	
	
	i = *(RP)EMIADDR_NANDIDLE;                         //judge Nand flash compish actions
	while((i&0x1) != 0x1)
	{  i = *(RP)EMIADDR_NANDIDLE; }
	
	return gloabalvar_add;
}	





U32 Dma_Nand_StatusRead(U32 gloabalvar_add)
{
	U32 i;
                                            
	*(RP)EMIADDR_NANDCONF = EMIADDR_NANDCONF_VAL;                    //re_config
	#ifndef RELEASE
	i = *(RP)EMIADDR_NANDCONF;
	if( i!= EMIADDR_NANDCONF_VAL )
	{
		HA_EMI_WRIT(gloabalvar_add, EMIADDR_NANDCONF);
		gloabalvar_add = gloabalvar_add + 4;
	}
	#endif
	
	*(RP)EMIADDR_NANDCOM = 0x80000070;                               //read status command
	#ifndef RELEASE
	i = *(RP)EMIADDR_NANDCOM;
	if( i!= 0x80000070 )
	{
		HA_EMI_WRIT(gloabalvar_add, EMIADDR_NANDCOM);
		gloabalvar_add = gloabalvar_add + 4;
	}
	#endif	
	
	i = *(RP)EMIADDR_NANDSTATUS;	   	
        while((i&0x100) != 1)
	{
		i = *(RP)EMIADDR_NANDSTATUS;
	}

   	/////////////////read status end//////////////////////// 
   	
   	
   	
   	
   	
   	
   	
	return gloabalvar_add;
}



/*
ER HA_NandFlash(void)
{
	U32 i,j,k,p;
	U8 q,r;
	j = 0x28060000;                                                  //int error base
	
    i = *(RP)EMIADDR_NANDIDLE;                                       //wait till nand idle 
	while(i != 0x0)                                                  //0x0 represent idle
	{
	    i = *(RP)EMIADDR_NANDIDLE;
	}
	
   	k =( *(RP)EMIADDR_NANDCOM) & 0xff;	
   	
   	if( k == 0x80)
   	{
   		HA_NandFlash_BadBlcokHandler();
   	}
   	else if( k == 0x60)
   	{
   		HA_NandFlash_BadBlcokHandler();
   	}
   	else if( k == 0x00 )
   	{
   		i = *(RP)DMACdesAdd - 0x80;                             //find init address fo DMA trans
   		p = *(RP)EMIADDR_NANDERRORADDR1 + i;                    //find actual error address
   		q = *(RP)EMIADDR_NANDERRORADDR2 & 0xf;
   		r = 0x1;	
   		while(q != 0x1)
   		{
   			r = r <<1 ;
   			q = q -0x1;
   		}
   		
   		i = (      ((*(RP8)p ) & (~r))   |  (( ~ ((*(RP8)p ) & r)) & r)    )   ;
   		              
                *(RP8)p = i;                                             //correct bit write back to error adress
         }
      
    	*(RP)EMIADDR_NANDINTR = 0xff;                                    //clean int
   
    	return 0;
    	
}
   
   
   
   
   
   
U32 HA_NandFlash_IdRead(U32 gloabalvar_add)  
{
	
	U32 i;
                                            
	*(RP)EMIADDR_NANDCONF = EMIADDR_NANDCONF_VAL;                    //re_config
	#ifndef RELEASE
	i = *(RP)EMIADDR_NANDCONF;
	if( i!= EMIADDR_NANDCONF_VAL )
	{
		HA_EMI_WRIT(gloabalvar_add, EMIADDR_NANDCONF);
		gloabalvar_add = gloabalvar_add + 4;
	}
	#endif
	
	*(RP)EMIADDR_NANDCOM = 0x80000090;                               //read status command
	#ifndef RELEASE
	i = *(RP)EMIADDR_NANDCOM;
	if( i!= 0x80000090 )
	{
		HA_EMI_WRIT(gloabalvar_add, EMIADDR_NANDCOM);
		gloabalvar_add = gloabalvar_add + 4;
	}
	#endif	
	
	*(RP)0x58003f00 = *(RP)EMI_NAND_DATA;                                          //read ID

   	/////////////////read ID end//////////////////////// 
   	
   	i = *(RP)EMIADDR_NANDIDLE;                         //judge Nand flash compish actions
	while((i&0x1) != 0x1)
	{  i = *(RP)EMIADDR_NANDIDLE; }
	
	
   	*(RP)0x58003f00 = *(RP)EMI_NAND_DATA;                                          //read ID
   	
   	
	return gloabalvar_add;
}
 
   
   
   */
   
   
ER HA_NandFlash_BadBlcokHandler(void)
{
	return 0;
}	



U32 Nand_Reset(U32 gloabalvar_add)               
{                                                                               
	U32 i;  

	
	*(RP)EMIADDR_NANDCOM = 0x800000ff;					
	#ifndef RELEASE
	i = *(RP)EMIADDR_NANDCOM;
	if( i!= 0x000000ff )
	{
		HA_EMI_WRIT(gloabalvar_add,EMIADDR_NANDCOM);
		gloabalvar_add = gloabalvar_add + 4;
	}
	#endif
	
	
	i = *(RP)EMIADDR_NANDIDLE;                         //judge Nand flash compish actions
	while((i&0x1) != 0x1)
	{  i = *(RP)EMIADDR_NANDIDLE; }
	
	
   return gloabalvar_add;
    
}	







////////////////////////////////////////////////////Nor flash /////////////////////////////////////////////////
ER NorFlash_clearSR(void)
{
	*(RP)0x0000000 = 0x500050;
	return 1;
}




ER NorFlash_idlejud(U32 address)
{
	U32 temp;
	
	*(RP)address = 0x700070;
	temp = *(RP)address;
	while( temp != 0x800080 )
	{
		temp = *(RP)address ;
	}
	return 1;
}
	
	
ER NorFlash_Normal(U32 address)
{
	U32 temp;
	*(RP)address = 0xff00ff;
	//temp = NorFlash_idlejud(address);
	return 1;
}





ER NorFlash_unlock( U32 address)
{
	U32 temp;
	
	*(RP)address = 0x600060;
	
	
	*(RP)address = 0xd000d0;
		
	temp = NorFlash_idlejud(address);
	return 1;
}



ER NorFlash_bolckerase(U32 blockadd)
{
	U32 temp;
	
	*(RP)blockadd = 0x200020;
	*(RP)blockadd = 0xd000d0;
	
	temp = NorFlash_idlejud(blockadd);
	
	temp = NorFlash_clearSR( );			       //Clear SR
	return 1;
}


ER NorFlash_read( U32 address)
{
	U32 temp,i;
	
	//*(RP)address = 0xff;
	//*(RP)address = 0x200020;
	//*(RP)address = 0xd000d0;
	
	i = *(RP)address;
	
	temp = NorFlash_idlejud(address);
	
	printf("return of read is 0x%x", i);
	return i;
}



ER NorFlash_write( U32 Pageadd, U32 data )
{
	U32 temp;
		
	*(RP)Pageadd = 0x400040;
	*(RP)Pageadd = data;
	
	temp = NorFlash_idlejud(Pageadd);
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -