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

📄 mem_rdwr.c

📁 三星6410的烧写工具源码
💻 C
📖 第 1 页 / 共 2 页
字号:
		S6410_SetPin(Xm0CSn3_OUT ,LOW);
	else if(raddr<0x38000000)
		S6410_SetPin(Xm0CSn4_OUT ,LOW);
	else if(raddr<0x40000000)
		S6410_SetPin(Xm0CSn5_OUT ,LOW);
}


void S6410_Deassert_nCS(U32 raddr)
{
	if(raddr<0x18000000)
		S6410_SetPin(Xm0CSn0_OUT ,HIGH);
	else if(raddr<0x20000000)
		S6410_SetPin(Xm0CSn1_OUT ,HIGH);
	else if(raddr<0x38000000)
		S6410_SetPin(Xm0CSn2_OUT ,HIGH);
	else if(raddr<0x30000000)
		S6410_SetPin(Xm0CSn3_OUT ,HIGH);
	else if(raddr<0x38000000)
		S6410_SetPin(Xm0CSn4_OUT ,HIGH);
	else if(raddr<0x40000000)
		S6410_SetPin(Xm0CSn5_OUT ,HIGH);
}




//***********************************************************
// Fast Version                   
// xxxQ: fast version by removing nRCS_to_nWEnOE setup time.
// xxxQQ: more fast version by omitting nRCS deassertion.
//***********************************************************
U8 MRW_Rd8Q(U32 raddr)
{
	S6410_ContRDataBus(LOW); // input
	S6410_SetRAddr(raddr);
	S6410_Assert_nCS(raddr);
	S6410_SetPin(Xm0OEn,LOW); 
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0OEn,HIGH);
	S6410_Deassert_nCS(raddr);
	JTAG_ShiftDRState(outCellValue,inCellValue); 
	
	return S6410_GetRDataByte();
}


U16 MRW_Rd16Q(U32 raddr,int en_nBE,U32 bs)
{
	S6410_ContRDataBus(LOW); // input
	S6410_SetRAddr(raddr);
	S6410_Assert_nCS(raddr);
	S6410_SetPin(Xm0OEn,LOW); 
	if(en_nBE)
	{
		if(bs&(1<<0))S6410_SetPin(Xm0DQM0_nBE0,LOW); 
		if(bs&(1<<1))S6410_SetPin(Xm0DQM1_nBE1,LOW); 
	}
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0OEn,HIGH);
	S6410_Deassert_nCS(raddr);
	if(en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); 
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}
	JTAG_ShiftDRState(outCellValue,inCellValue); 
	
	return S6410_GetRDataHW();
}


U32 MRW_Rd32Q(U32 raddr,int en_nBE,U32 bs)
{
	S6410_ContRDataBus(LOW); // input
	S6410_SetRAddr(raddr);
	S6410_Assert_nCS(raddr);
	S6410_SetPin(Xm0OEn,LOW); 
	if(en_nBE)
	{
		if(bs&(1<<0))S6410_SetPin(Xm0DQM0_nBE0,LOW); 
		if(bs&(1<<1))S6410_SetPin(Xm0DQM1_nBE1,LOW); 
	}
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0OEn,HIGH);
	S6410_Deassert_nCS(raddr);
	if(en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); 
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}
	JTAG_ShiftDRState(outCellValue,inCellValue); 
	
	return S6410_GetRDataWord();
}


void MRW_Wr8Q(U32 raddr,U8 rdata)
{
	S6410_ContRDataBus(HIGH); // output
	S6410_SetRAddr(raddr);
	S6410_Assert_nCS(raddr);
	S6410_SetPin(Xm0WEn,LOW); 
	S6410_SetRDataByte(rdata);
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0WEn,HIGH);
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_ContRDataBus(LOW); // input
	S6410_Deassert_nCS(raddr);
	JTAG_ShiftDRStateNoTdo(outCellValue); 
}


void MRW_Wr8QQ(U32 raddr,U8 rdata)
{
	S6410_ContRDataBus(HIGH); // output
	S6410_SetRAddr(raddr);
	S6410_Assert_nCS(raddr);
	S6410_SetPin(Xm0WEn,LOW); 
	S6410_SetRDataByte(rdata);
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0WEn,HIGH);
	JTAG_ShiftDRStateNoTdo(outCellValue); 
#if 0
	S6410_ContRDataBus(HIGH); // input
	S6410_Deassert_nCS(raddr);
	JTAG_ShiftDRStateNoTdo(outCellValue); 
#endif
}


void MRW_Wr16Q(U32 raddr,U16 rdata,int en_nBE,U32 bs)
{
	S6410_ContRDataBus(HIGH); // output
	S6410_SetRAddr(raddr);
	S6410_Assert_nCS(raddr);
	S6410_SetPin(Xm0WEn,LOW);
	if(bs&(1<<0))S6410_SetPin(Xm0DQM0_nBE0,LOW); //used as nWBE/nBE
	if(bs&(1<<1))S6410_SetPin(Xm0DQM1_nBE1,LOW); 
	S6410_SetRDataHW(rdata);
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0WEn,HIGH);
	if(!en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); //nWBE is deasserted here.
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_ContRDataBus(LOW); // input
	S6410_Deassert_nCS(raddr);
	if(en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); 
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}
	JTAG_ShiftDRStateNoTdo(outCellValue); 
}



void MRW_Wr16QQ(U32 raddr,U16 rdata,int en_nBE,U32 bs)
// Very fast version nCS is never inactive for speed-up.
{
	S6410_ContRDataBus(HIGH); // output
	S6410_SetRAddr(raddr);
	S6410_Assert_nCS(raddr);
	S6410_SetPin(Xm0WEn,LOW);
	
	if(bs&(1<<0))
		S6410_SetPin(Xm0DQM0_nBE0,LOW); //used as nWBE/nBE
	if(bs&(1<<1))
		S6410_SetPin(Xm0DQM1_nBE1,LOW); 
	
	S6410_SetRDataHW(rdata);
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0WEn,HIGH);
	if(!en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); //nWBE is deasserted here.
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}
	JTAG_ShiftDRStateNoTdo(outCellValue); 

#if 1
	S6410_ContRDataBus(HIGH); // input
	S6410_Deassert_nCS(raddr);
	if(en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); 
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}
	JTAG_ShiftDRStateNoTdo(outCellValue); 
#endif
}


void MRW_Wr32Q(U32 raddr,U32 rdata,int en_nBE,U32 bs)
{
	S6410_ContRDataBus(HIGH); // output
	S6410_SetRAddr(raddr);
	S6410_Assert_nCS(raddr);
	S6410_SetPin(Xm0WEn,LOW);

	if(bs&(1<<0))
		S6410_SetPin(Xm0DQM0_nBE0,LOW); //used as nWBE/nBE
	if(bs&(1<<1))
		S6410_SetPin(Xm0DQM1_nBE1,LOW); 
	
	S6410_SetRDataWord(rdata);
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0WEn,HIGH);
	if(!en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); //nWBE is deasserted here.
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}

	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_ContRDataBus(LOW); // input
	S6410_Deassert_nCS(raddr);
	if(en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); //nBE is deasserted here.
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}
	JTAG_ShiftDRStateNoTdo(outCellValue); 
}


void MRW_Wr32QQ(U32 raddr,U32 rdata,int en_nBE,U32 bs)
{
	S6410_ContRDataBus(HIGH); // output
	S6410_SetRAddr(raddr);
	S6410_Assert_nCS(raddr);
	S6410_SetPin(Xm0WEn,LOW);

	if(bs&(1<<0))
		S6410_SetPin(Xm0DQM0_nBE0,LOW); //used as nWBE/nBE
	if(bs&(1<<1))
		S6410_SetPin(Xm0DQM1_nBE1,LOW); 
	S6410_SetRDataWord(rdata);
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0WEn,HIGH);
	if(!en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); //nWBE is deasserted here.
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}

	JTAG_ShiftDRStateNoTdo(outCellValue); 

#if 0
	S6410_ContRDataBus(HIGH); // input
	S6410_Deassert_nCS(raddr);
	if(en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); //nBE is deasserted here.
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}
	JTAG_ShiftDRStateNoTdo(outCellValue); 
#endif
}


U8 MRW_Rd8(U32 raddr)
{
	S6410_ContRDataBus(LOW); // input
	S6410_SetRAddr(raddr);

	S6410_Assert_nCS(raddr);
	JTAG_ShiftDRStateNoTdo(outCellValue); //tCOS

	S6410_SetPin(Xm0OEn,LOW); 
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0OEn,HIGH);
	S6410_Deassert_nCS(raddr);
	JTAG_ShiftDRState(outCellValue,inCellValue); 
	return S6410_GetRDataByte();
}


U16 MRW_Rd16(U32 raddr,int en_nBE,U32 bs)
{
	S6410_ContRDataBus(LOW); // input
	S6410_SetRAddr(raddr);
	S6410_Assert_nCS(raddr);
	if(en_nBE)
	{
		if(bs&(1<<0))S6410_SetPin(Xm0DQM0_nBE0,LOW); 
		if(bs&(1<<1))S6410_SetPin(Xm0DQM1_nBE1,LOW); 
	}
	JTAG_ShiftDRStateNoTdo(outCellValue); //tCOS

	S6410_SetPin(Xm0OEn,LOW); 
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0OEn,HIGH);
	S6410_Deassert_nCS(raddr);
	if(en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); 
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}
	JTAG_ShiftDRState(outCellValue,inCellValue); 
	return S6410_GetRDataHW();
}


U32 MRW_Rd32(U32 raddr,int en_nBE,U32 bs)
{
	S6410_ContRDataBus(LOW); // input
	S6410_SetRAddr(raddr);
	S6410_Assert_nCS(raddr);
	if(en_nBE)
	{
		if(bs&(1<<0))S6410_SetPin(Xm0DQM0_nBE0,LOW); 
		if(bs&(1<<1))S6410_SetPin(Xm0DQM1_nBE1,LOW); 
	}
	JTAG_ShiftDRStateNoTdo(outCellValue); //tCOS

	S6410_SetPin(Xm0OEn,LOW); 
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0OEn,HIGH);
	S6410_Deassert_nCS(raddr);
	if(en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); 
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}
	JTAG_ShiftDRState(outCellValue,inCellValue); 
	return S6410_GetRDataWord();
}


void MRW_Wr8(U32 raddr,U8 rdata)
{
	S6410_ContRDataBus(HIGH); // output
	S6410_SetRAddr(raddr);
	S6410_Assert_nCS(raddr);
	S6410_SetRDataByte(rdata);
	JTAG_ShiftDRStateNoTdo(outCellValue); //tCOS

	S6410_SetPin(Xm0WEn,LOW); 
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0WEn,HIGH);
	JTAG_ShiftDRStateNoTdo(outCellValue); //tCOH

	S6410_ContRDataBus(LOW); // input
	S6410_Deassert_nCS(raddr);
	JTAG_ShiftDRStateNoTdo(outCellValue); 
}


void MRW_Wr16(U32 raddr,U16 rdata,int en_nBE,U32 bs)
{
	S6410_ContRDataBus(HIGH); // output
	S6410_SetRAddr(raddr);
	S6410_Assert_nCS(raddr);
	if(en_nBE)
	{
		if(bs&(1<<0))S6410_SetPin(Xm0DQM0_nBE0,LOW); //used as nBE
		if(bs&(1<<1))S6410_SetPin(Xm0DQM1_nBE1,LOW); 
	}
	S6410_SetRDataHW(rdata);
	JTAG_ShiftDRStateNoTdo(outCellValue); //tCOS

	if(!en_nBE)
	{
		if(bs&(1<<0))S6410_SetPin(Xm0DQM0_nBE0,LOW); //used as nWBE
		if(bs&(1<<1))S6410_SetPin(Xm0DQM1_nBE1,LOW); //used as nWBE
	}
	S6410_SetPin(Xm0WEn,LOW);
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0WEn,HIGH);
	if(!en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); //nWBE is deasserted here.
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}
	JTAG_ShiftDRStateNoTdo(outCellValue); //tCOH

	S6410_ContRDataBus(LOW); // input
	S6410_Deassert_nCS(raddr);
	if(en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); 
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}
	JTAG_ShiftDRStateNoTdo(outCellValue); 
}


void MRW_Wr32(U32 raddr,U32 rdata,int en_nBE,U32 bs)
{
	S6410_ContRDataBus(HIGH); // output
	S6410_SetRAddr(raddr);
	S6410_Assert_nCS(raddr);
	if(en_nBE)
	{
		if(bs&(1<<0))S6410_SetPin(Xm0DQM0_nBE0,LOW); //used as nBE
		if(bs&(1<<1))S6410_SetPin(Xm0DQM1_nBE1,LOW); 
	}
	S6410_SetRDataWord(rdata);
	JTAG_ShiftDRStateNoTdo(outCellValue); //tCOS

	if(!en_nBE)
	{
		if(bs&(1<<0))S6410_SetPin(Xm0DQM0_nBE0,LOW); //used as nWBE
		if(bs&(1<<1))S6410_SetPin(Xm0DQM1_nBE1,LOW); 
	}
	S6410_SetPin(Xm0WEn,LOW);
	JTAG_ShiftDRStateNoTdo(outCellValue); 

	S6410_SetPin(Xm0WEn,HIGH);
	if(!en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); //nWBE is deasserted here.
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}
	JTAG_ShiftDRStateNoTdo(outCellValue); //tCOH

	S6410_ContRDataBus(LOW); // input
	S6410_Deassert_nCS(raddr);
	if(en_nBE)
	{
		S6410_SetPin(Xm0DQM0_nBE0,HIGH); //nBE is deasserted here.
		S6410_SetPin(Xm0DQM1_nBE1,HIGH); 
	}
	JTAG_ShiftDRStateNoTdo(outCellValue); 
}

⌨️ 快捷键说明

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