📄 mem_rdwr.c
字号:
return S2410_GetDataByte();
}
U16 MRW_Rd16Q(U32 addr,int en_nBE,U32 bs)
{
S2410_SetPin(DATA0_7_CON ,HIGH);
S2410_SetPin(DATA8_15_CON ,HIGH);
S2410_SetPin(DATA16_23_CON ,HIGH);
S2410_SetPin(DATA24_31_CON ,HIGH);
S2410_SetAddr(addr);
S2410_Assert_nGCS(addr);
S2410_SetPin(nOE,LOW);
if(en_nBE)
{
if(bs&(1<<0))S2410_SetPin(nBE0,LOW);
if(bs&(1<<1))S2410_SetPin(nBE1,LOW);
}
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(nOE,HIGH);
S2410_Deassert_nGCS(addr);
if(en_nBE)
{
S2410_SetPin(nBE0,HIGH);
S2410_SetPin(nBE1,HIGH);
}
JTAG_ShiftDRState(outCellValue,inCellValue);
return S2410_GetDataHW();
}
U32 MRW_Rd32Q(U32 addr,int en_nBE,U32 bs)
{
S2410_SetPin(DATA0_7_CON ,HIGH);
S2410_SetPin(DATA8_15_CON ,HIGH);
S2410_SetPin(DATA16_23_CON ,HIGH);
S2410_SetPin(DATA24_31_CON ,HIGH);
S2410_SetAddr(addr);
S2410_Assert_nGCS(addr);
S2410_SetPin(nOE,LOW);
if(en_nBE)
{
if(bs&(1<<0))S2410_SetPin(nBE0,LOW);
if(bs&(1<<1))S2410_SetPin(nBE1,LOW);
if(bs&(1<<2))S2410_SetPin(nBE2,LOW);
if(bs&(1<<3))S2410_SetPin(nBE3,LOW);
}
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(nOE,HIGH);
S2410_Deassert_nGCS(addr);
if(en_nBE)
{
S2410_SetPin(nBE0,HIGH);
S2410_SetPin(nBE1,HIGH);
S2410_SetPin(nBE2,HIGH);
S2410_SetPin(nBE3,HIGH);
}
JTAG_ShiftDRState(outCellValue,inCellValue);
return S2410_GetDataWord();
}
void MRW_Wr8Q(U32 addr,U8 data)
{
S2410_SetPin(DATA0_7_CON ,LOW);
S2410_SetPin(DATA8_15_CON ,LOW);
S2410_SetPin(DATA16_23_CON ,LOW);
S2410_SetPin(DATA24_31_CON ,LOW);
S2410_SetAddr(addr);
S2410_Assert_nGCS(addr);
S2410_SetPin(nWE,LOW);
S2410_SetDataByte(data);
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(nWE,HIGH);
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(DATA0_7_CON ,HIGH);
S2410_SetPin(DATA8_15_CON ,HIGH);
S2410_SetPin(DATA16_23_CON ,HIGH);
S2410_SetPin(DATA24_31_CON ,HIGH);
S2410_Deassert_nGCS(addr);
JTAG_ShiftDRStateNoTdo(outCellValue);
}
void MRW_Wr8QQ(U32 addr,U8 data)
{
S2410_SetPin(DATA0_7_CON ,LOW);
S2410_SetPin(DATA8_15_CON ,LOW);
S2410_SetPin(DATA16_23_CON ,LOW);
S2410_SetPin(DATA24_31_CON ,LOW);
S2410_SetAddr(addr);
S2410_Assert_nGCS(addr);
S2410_SetPin(nWE,LOW);
S2410_SetDataByte(data);
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(nWE,HIGH);
JTAG_ShiftDRStateNoTdo(outCellValue);
#if 0
S2410_SetPin(DATA0_7_CON ,HIGH);
S2410_SetPin(DATA8_15_CON ,HIGH);
S2410_SetPin(DATA16_23_CON ,HIGH);
S2410_SetPin(DATA24_31_CON ,HIGH);
S2410_Deassert_nGCS(addr);
JTAG_ShiftDRStateNoTdo(outCellValue);
#endif
}
void MRW_Wr16Q(U32 addr,U16 data,int en_nBE,U32 bs)
{
S2410_SetPin(DATA0_7_CON ,LOW);
S2410_SetPin(DATA8_15_CON ,LOW);
S2410_SetPin(DATA16_23_CON ,LOW);
S2410_SetPin(DATA24_31_CON ,LOW);
S2410_SetAddr(addr);
S2410_Assert_nGCS(addr);
S2410_SetPin(nWE,LOW);
if(bs&(1<<0))S2410_SetPin(nBE0,LOW); //used as nWBE/nBE
if(bs&(1<<1))S2410_SetPin(nBE1,LOW);
S2410_SetDataHW(data);
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(nWE,HIGH);
if(!en_nBE)
{
S2410_SetPin(nBE0,HIGH); //nWBE is deasserted here.
S2410_SetPin(nBE1,HIGH);
}
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(DATA0_7_CON ,HIGH); //nBE is deasserted here.
S2410_SetPin(DATA8_15_CON ,HIGH);
S2410_SetPin(DATA16_23_CON ,HIGH);
S2410_SetPin(DATA24_31_CON ,HIGH);
S2410_Deassert_nGCS(addr);
if(en_nBE)
{
S2410_SetPin(nBE0,HIGH);
S2410_SetPin(nBE1,HIGH);
}
JTAG_ShiftDRStateNoTdo(outCellValue);
}
void MRW_Wr16QQ(U32 addr,U16 data,int en_nBE,U32 bs)
// Very fast version nGCS is never inactive for speed-up.
{
S2410_SetPin(DATA0_7_CON ,LOW);
S2410_SetPin(DATA8_15_CON ,LOW);
S2410_SetPin(DATA16_23_CON ,LOW);
S2410_SetPin(DATA24_31_CON ,LOW);
S2410_SetAddr(addr);
S2410_Assert_nGCS(addr);
S2410_SetPin(nWE,LOW);
if(bs&(1<<0))S2410_SetPin(nBE0,LOW); //used as nWBE/nBE
if(bs&(1<<1))S2410_SetPin(nBE1,LOW);
S2410_SetDataHW(data);
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(nWE,HIGH);
if(!en_nBE)
{
S2410_SetPin(nBE0,HIGH); //nWBE is deasserted here.
S2410_SetPin(nBE1,HIGH);
}
JTAG_ShiftDRStateNoTdo(outCellValue);
#if 0
S2410_SetPin(DATA0_7_CON ,HIGH); //nBE is deasserted here.
S2410_SetPin(DATA8_15_CON ,HIGH);
S2410_SetPin(DATA16_23_CON ,HIGH);
S2410_SetPin(DATA24_31_CON ,HIGH);
S2410_Deassert_nGCS(addr);
if(en_nBE)
{
S2410_SetPin(nBE0,HIGH);
S2410_SetPin(nBE1,HIGH);
}
JTAG_ShiftDRStateNoTdo(outCellValue);
#endif
}
void MRW_Wr32Q(U32 addr,U32 data,int en_nBE,U32 bs)
{
S2410_SetPin(DATA0_7_CON ,LOW);
S2410_SetPin(DATA8_15_CON ,LOW);
S2410_SetPin(DATA16_23_CON ,LOW);
S2410_SetPin(DATA24_31_CON ,LOW);
S2410_SetAddr(addr);
S2410_Assert_nGCS(addr);
S2410_SetPin(nWE,LOW);
if(bs&(1<<0))S2410_SetPin(nBE0,LOW); //used as nWBE/nBE
if(bs&(1<<1))S2410_SetPin(nBE1,LOW);
if(bs&(1<<2))S2410_SetPin(nBE2,LOW);
if(bs&(1<<3))S2410_SetPin(nBE3,LOW);
S2410_SetDataWord(data);
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(nWE,HIGH);
if(!en_nBE)
{
S2410_SetPin(nBE0,HIGH); //nWBE is deasserted here.
S2410_SetPin(nBE1,HIGH);
S2410_SetPin(nBE2,HIGH);
S2410_SetPin(nBE3,HIGH);
}
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(DATA0_7_CON ,HIGH);
S2410_SetPin(DATA8_15_CON ,HIGH);
S2410_SetPin(DATA16_23_CON ,HIGH);
S2410_SetPin(DATA24_31_CON ,HIGH);
S2410_Deassert_nGCS(addr);
if(en_nBE)
{
S2410_SetPin(nBE0,HIGH); //nBE is deasserted here.
S2410_SetPin(nBE1,HIGH);
S2410_SetPin(nBE2,HIGH);
S2410_SetPin(nBE3,HIGH);
}
JTAG_ShiftDRStateNoTdo(outCellValue);
}
void MRW_Wr32QQ(U32 addr,U32 data,int en_nBE,U32 bs)
{
S2410_SetPin(DATA0_7_CON ,LOW);
S2410_SetPin(DATA8_15_CON ,LOW);
S2410_SetPin(DATA16_23_CON ,LOW);
S2410_SetPin(DATA24_31_CON ,LOW);
S2410_SetAddr(addr);
S2410_Assert_nGCS(addr);
S2410_SetPin(nWE,LOW);
if(bs&(1<<0))S2410_SetPin(nBE0,LOW); //used as nWBE/nBE
if(bs&(1<<1))S2410_SetPin(nBE1,LOW);
if(bs&(1<<2))S2410_SetPin(nBE2,LOW);
if(bs&(1<<3))S2410_SetPin(nBE3,LOW);
S2410_SetDataWord(data);
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(nWE,HIGH);
if(!en_nBE)
{
S2410_SetPin(nBE0,HIGH); //nWBE is deasserted here.
S2410_SetPin(nBE1,HIGH);
S2410_SetPin(nBE2,HIGH);
S2410_SetPin(nBE3,HIGH);
}
JTAG_ShiftDRStateNoTdo(outCellValue);
#if 0
S2410_SetPin(DATA0_7_CON ,HIGH);
S2410_SetPin(DATA8_15_CON ,HIGH);
S2410_SetPin(DATA16_23_CON ,HIGH);
S2410_SetPin(DATA24_31_CON ,HIGH);
S2410_Deassert_nGCS(addr);
if(en_nBE)
{
S2410_SetPin(nBE0,HIGH); //nBE is deasserted here.
S2410_SetPin(nBE1,HIGH);
S2410_SetPin(nBE2,HIGH);
S2410_SetPin(nBE3,HIGH);
}
JTAG_ShiftDRStateNoTdo(outCellValue);
#endif
}
U8 MRW_Rd8(U32 addr)
{
S2410_SetPin(DATA0_7_CON ,HIGH);
S2410_SetPin(DATA8_15_CON ,HIGH);
S2410_SetPin(DATA16_23_CON ,HIGH);
S2410_SetPin(DATA24_31_CON ,HIGH);
S2410_SetAddr(addr);
S2410_Assert_nGCS(addr);
JTAG_ShiftDRStateNoTdo(outCellValue); //tCOS
S2410_SetPin(nOE,LOW);
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(nOE,HIGH);
S2410_Deassert_nGCS(addr);
JTAG_ShiftDRState(outCellValue,inCellValue);
return S2410_GetDataByte();
}
U16 MRW_Rd16(U32 addr,int en_nBE,U32 bs)
{
S2410_SetPin(DATA0_7_CON ,HIGH);
S2410_SetPin(DATA8_15_CON ,HIGH);
S2410_SetPin(DATA16_23_CON ,HIGH);
S2410_SetPin(DATA24_31_CON ,HIGH);
S2410_SetAddr(addr);
S2410_Assert_nGCS(addr);
if(en_nBE)
{
if(bs&(1<<0))S2410_SetPin(nBE0,LOW);
if(bs&(1<<1))S2410_SetPin(nBE1,LOW);
}
JTAG_ShiftDRStateNoTdo(outCellValue); //tCOS
S2410_SetPin(nOE,LOW);
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(nOE,HIGH);
S2410_Deassert_nGCS(addr);
if(en_nBE)
{
S2410_SetPin(nBE0,HIGH);
S2410_SetPin(nBE1,HIGH);
}
JTAG_ShiftDRState(outCellValue,inCellValue);
return S2410_GetDataHW();
}
U32 MRW_Rd32(U32 addr,int en_nBE,U32 bs)
{
S2410_SetPin(DATA0_7_CON ,HIGH);
S2410_SetPin(DATA8_15_CON ,HIGH);
S2410_SetPin(DATA16_23_CON ,HIGH);
S2410_SetPin(DATA24_31_CON ,HIGH);
S2410_SetAddr(addr);
S2410_Assert_nGCS(addr);
if(en_nBE)
{
if(bs&(1<<0))S2410_SetPin(nBE0,LOW);
if(bs&(1<<1))S2410_SetPin(nBE1,LOW);
if(bs&(1<<2))S2410_SetPin(nBE2,LOW);
if(bs&(1<<3))S2410_SetPin(nBE3,LOW);
}
JTAG_ShiftDRStateNoTdo(outCellValue); //tCOS
S2410_SetPin(nOE,LOW);
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(nOE,HIGH);
S2410_Deassert_nGCS(addr);
if(en_nBE)
{
S2410_SetPin(nBE0,HIGH);
S2410_SetPin(nBE1,HIGH);
S2410_SetPin(nBE2,HIGH);
S2410_SetPin(nBE3,HIGH);
}
JTAG_ShiftDRState(outCellValue,inCellValue);
return S2410_GetDataWord();
}
void MRW_Wr8(U32 addr,U8 data)
{
S2410_SetPin(DATA0_7_CON ,LOW);
S2410_SetPin(DATA8_15_CON ,LOW);
S2410_SetPin(DATA16_23_CON ,LOW);
S2410_SetPin(DATA24_31_CON ,LOW);
S2410_SetAddr(addr);
S2410_Assert_nGCS(addr);
S2410_SetDataByte(data);
JTAG_ShiftDRStateNoTdo(outCellValue); //tCOS
S2410_SetPin(nWE,LOW);
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(nWE,HIGH);
JTAG_ShiftDRStateNoTdo(outCellValue); //tCOH
S2410_SetPin(DATA0_7_CON ,HIGH);
S2410_SetPin(DATA8_15_CON ,HIGH);
S2410_SetPin(DATA16_23_CON ,HIGH);
S2410_SetPin(DATA24_31_CON ,HIGH);
S2410_Deassert_nGCS(addr);
JTAG_ShiftDRStateNoTdo(outCellValue);
}
void MRW_Wr16(U32 addr,U16 data,int en_nBE,U32 bs)
{
S2410_SetPin(DATA0_7_CON ,LOW);
S2410_SetPin(DATA8_15_CON ,LOW);
S2410_SetPin(DATA16_23_CON ,LOW);
S2410_SetPin(DATA24_31_CON ,LOW);
S2410_SetAddr(addr);
S2410_Assert_nGCS(addr);
if(en_nBE)
{
if(bs&(1<<0))S2410_SetPin(nBE0,LOW); //used as nBE
if(bs&(1<<1))S2410_SetPin(nBE1,LOW);
}
S2410_SetDataHW(data);
JTAG_ShiftDRStateNoTdo(outCellValue); //tCOS
if(!en_nBE)
{
if(bs&(1<<0))S2410_SetPin(nBE0,LOW); //used as nWBE
if(bs&(1<<1))S2410_SetPin(nBE1,LOW); //used as nWBE
}
S2410_SetPin(nWE,LOW);
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(nWE,HIGH);
if(!en_nBE)
{
S2410_SetPin(nBE0,HIGH); //nWBE is deasserted here.
S2410_SetPin(nBE1,HIGH);
}
JTAG_ShiftDRStateNoTdo(outCellValue); //tCOH
S2410_SetPin(DATA0_7_CON ,HIGH); //nBE is deasserted here.
S2410_SetPin(DATA8_15_CON ,HIGH);
S2410_SetPin(DATA16_23_CON ,HIGH);
S2410_SetPin(DATA24_31_CON ,HIGH);
S2410_Deassert_nGCS(addr);
if(en_nBE)
{
S2410_SetPin(nBE0,HIGH);
S2410_SetPin(nBE1,HIGH);
}
JTAG_ShiftDRStateNoTdo(outCellValue);
}
void MRW_Wr32(U32 addr,U32 data,int en_nBE,U32 bs)
{
S2410_SetPin(DATA0_7_CON ,LOW);
S2410_SetPin(DATA8_15_CON ,LOW);
S2410_SetPin(DATA16_23_CON ,LOW);
S2410_SetPin(DATA24_31_CON ,LOW);
S2410_SetAddr(addr);
S2410_Assert_nGCS(addr);
if(en_nBE)
{
if(bs&(1<<0))S2410_SetPin(nBE0,LOW); //used as nBE
if(bs&(1<<1))S2410_SetPin(nBE1,LOW);
if(bs&(1<<2))S2410_SetPin(nBE2,LOW);
if(bs&(1<<3))S2410_SetPin(nBE3,LOW);
}
S2410_SetDataWord(data);
JTAG_ShiftDRStateNoTdo(outCellValue); //tCOS
if(!en_nBE)
{
if(bs&(1<<0))S2410_SetPin(nBE0,LOW); //used as nWBE
if(bs&(1<<1))S2410_SetPin(nBE1,LOW);
if(bs&(1<<2))S2410_SetPin(nBE2,LOW);
if(bs&(1<<3))S2410_SetPin(nBE3,LOW);
}
S2410_SetPin(nWE,LOW);
JTAG_ShiftDRStateNoTdo(outCellValue);
S2410_SetPin(nWE,HIGH);
if(!en_nBE)
{
S2410_SetPin(nBE0,HIGH); //nWBE is deasserted here.
S2410_SetPin(nBE1,HIGH);
S2410_SetPin(nBE2,HIGH);
S2410_SetPin(nBE3,HIGH);
}
JTAG_ShiftDRStateNoTdo(outCellValue); //tCOH
S2410_SetPin(DATA0_7_CON ,HIGH);
S2410_SetPin(DATA8_15_CON ,HIGH);
S2410_SetPin(DATA16_23_CON ,HIGH);
S2410_SetPin(DATA24_31_CON ,HIGH);
S2410_Deassert_nGCS(addr);
if(en_nBE)
{
S2410_SetPin(nBE0,HIGH); //nBE is deasserted here.
S2410_SetPin(nBE1,HIGH);
S2410_SetPin(nBE2,HIGH);
S2410_SetPin(nBE3,HIGH);
}
JTAG_ShiftDRStateNoTdo(outCellValue);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -