📄 wr39l040.c
字号:
//---------------------------------------------------------------
//040片选信号使能
//---------------------------------------------------------------
void CE_Enable_040()
{
P2OUT &=~BIT0;
return;
}
//---------------------------------------------------------------
//040片选信号低电平
//---------------------------------------------------------------
void CE_Disable_040()
{
P2OUT |=BIT0;
return;
}
//---------------------------------------------------------------
//040输出使能
//---------------------------------------------------------------
void OE_Enable_040()
{
P2OUT &=~BIT1;
return;
}
//---------------------------------------------------------------
//040输出disable
//---------------------------------------------------------------
void OE_Disable_040()
{
P2OUT |=BIT1;
return;
}
//---------------------------------------------------------------
//040写入使能
//---------------------------------------------------------------
void WE_Enable_040()
{
P2OUT &=~BIT2;
return;
}
//---------------------------------------------------------------
//040写入disable
//---------------------------------------------------------------
void WE_Disable_040()
{
P2OUT |=BIT2;
return;
}
//---------------------------------------------------------------
//373LE enable
//---------------------------------------------------------------
void lE_Enable_373()
{
P3OUT |=BIT2;
return;
}
//---------------------------------------------------------------
//373LEdisable
//---------------------------------------------------------------
void LE_Disable_373()
{
P3OUT &=~BIT2;
return;
}
//----------------------------
//write a byte to w39l040
//----------------------------
void writebyte040000(uchar nVal)
{
uchar i;
P5DIR =0XFF;
P5OUT =nVal;
OE_Disable_040();
CE_Enable_040();
WE_Enable_040();
for(i=0; i<10; i++);
WE_Disable_040();
CE_Disable_040();
}
//------------------------------------------------------------------------------
// write address to w39l040
//------------------------------------------------------------------------------
void writeaddr(ulong nAddr)
{
uchar i;
i=(nAddr>>8)&0xff;
P4OUT =i;
lE_Enable_373();
LE_Disable_373();
P4OUT =nAddr&0xff;
if(nAddr & 0x10000)
{
P2OUT |=BIT5;
}
else
{
P2OUT &=~BIT5;
}
if(nAddr & 0x20000)
{
P2OUT |=BIT3;
}
else
{
P2OUT &=~BIT3;
}
if(nAddr & 0x40000)
{
P2OUT |=BIT4;
}
else
{
P2OUT &=~BIT4;
}
}
//--------------------------------------
//写入W39L040预处理
//--------------------------------------
void write040pre()
{
ulong addr[3]={0x5555,0x2aaa,0x5555};
uchar nVal[3]={0xaa,0x55,0xa0};
uchar i;
for(i=0;i<3;i++)
{
writeaddr(addr[i]);
writebyte040000(nVal[i]);
}
}
//------------------------------------------------------------------------------
// W39L040写程序
//------------------------------------------------------------------------------
void write040(ulong addr39,uchar nVal)
{
writeaddr(addr39);
writebyte040000(nVal);
}
//------------------------------------------------------------------------------
// read byte from 040
//------------------------------------------------------------------------------
uchar read040(ulong addr39)
{
uchar test;
uchar i;
P5DIR =0;
writeaddr(addr39);
WE_Disable_040();
CE_Enable_040();
OE_Enable_040();
for(i=0; i<5; i++)
{
test =P5IN;
}
CE_Disable_040();
OE_Disable_040();
return test;
}
void erasesector040(ulong addr399)
{
write040(0x5555,0xaa);
write040(0x2aaa,0x55);
write040(0x5555,0x80);
write040(0x5555,0xaa);
write040(0x2aaa,0x55);
write040(addr399,0x30);
Delay_ms(1000);
}
/******擦除第七扇区*******/
void erasesector7()
{
if(FLAG1 & gb_era7)
{
FLAG1 &=~ gb_era7;
erasesector040(0x70000);
}
}
/******************************************************/
/***********片擦除*************************************/
/******************************************************/
void erasechip040()
{
write040(0x5555,0xaa);
write040(0x2aaa,0x55);
write040(0x5555,0x80);
write040(0x5555,0xaa);
write040(0x2aaa,0x55);
write040(0x5555,0x10);
Delay_ms(8000);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -