📄 mem_rdwr.c
字号:
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 + -