mem_rdwr.c

来自「深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心」· C语言 代码 · 共 864 行 · 第 1/2 页

C
864
字号
    else if(addr<0x10000000)	S2410_SetPin(nGCS1 ,LOW);    else if(addr<0x18000000)	S2410_SetPin(nGCS2 ,LOW);    else if(addr<0x20000000)	S2410_SetPin(nGCS3 ,LOW);    else if(addr<0x28000000)	S2410_SetPin(nGCS4 ,LOW);    else if(addr<0x30000000)	S2410_SetPin(nGCS5 ,LOW);    else if(addr<0x38000000)	S2410_SetPin(nGCS6 ,LOW);    else if(addr<0x40000000)	S2410_SetPin(nGCS7 ,LOW);}void S2410_Deassert_nGCS(U32 addr){    if(addr<0x8000000)	S2410_SetPin(nGCS0 ,HIGH);    else if(addr<0x10000000)	S2410_SetPin(nGCS1 ,HIGH);    else if(addr<0x18000000)	S2410_SetPin(nGCS2 ,HIGH);    else if(addr<0x20000000)	S2410_SetPin(nGCS3 ,HIGH);    else if(addr<0x28000000)	S2410_SetPin(nGCS4 ,HIGH);    else if(addr<0x30000000)	S2410_SetPin(nGCS5 ,HIGH);    else if(addr<0x38000000)	S2410_SetPin(nGCS6 ,HIGH);    else if(addr<0x40000000)	S2410_SetPin(nGCS7 ,HIGH);}U8 MRW_Rd8Q(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);    S2410_SetPin(nOE,LOW);     JTAG_ShiftDRStateNoTdo(outCellValue);         S2410_SetPin(nOE,HIGH);    S2410_Deassert_nGCS(addr);    JTAG_ShiftDRState(outCellValue,inCellValue);     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_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_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); }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 + =
减小字号Ctrl + -
显示快捷键?