mem_rdwr.c
来自「深圳市微逻辑电子有限公司 巨果• Kingmos® 系统核心」· 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 + -
显示快捷键?