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

📄 mem_rdwr.c

📁 windows下烧写flash的工具
💻 C
📖 第 1 页 / 共 2 页
字号:
    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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -