📄 rom.c
字号:
#include "ROM_H.H"
void rom_init(void)
{
}
void rom_cs(bit flag)
{ if(flag==0)
{ P40=1;
P41=0;
P42=0;
}
else
{ P40=1;
P41=1;
P42=1;
}
}
uint READ_ROM_ID(void)
{
uint rrom_id;
ROM_RD=1;
rom_cs(0);
ROM_CLE=1;//COMMAND
ROM_ALE=0;
ROM_DATAPORT=0x90;
ROM_WR=0;
ROM_WR=1;
ROM_BUSY=1;
while(ROM_BUSY==0);
ROM_CLE=0;
ROM_ALE=1;
ROM_DATAPORT=00;
ROM_WR=0;
ROM_WR=1;
ROM_BUSY=1;
while(ROM_BUSY==0);
ROM_DATAPORT=0xff;
ROM_CLE=0; //read the data?!
ROM_ALE=0;//
ROM_RD=0;
rrom_id=ROM_DATAPORT;
ROM_RD=1;
ROM_BUSY=1;
while(ROM_BUSY==0);
ROM_RD=0;
rrom_id=(rrom_id<<8)|ROM_DATAPORT;
ROM_RD=1;
ROM_BUSY=1;
while(ROM_BUSY==0);
rom_cs(1);
return(rrom_id);
}
void rom_write_com(unsigned char value)
{
ROM_CLE=1;//COMMAND
ROM_ALE=0;
ROM_RD=1;
rom_cs(0);
ROM_DATAPORT=value;
ROM_WR=0;
delay10ms(1);
ROM_WR=1;
ROM_BUSY=1;
while(ROM_BUSY==0);
rom_cs(1);
}
void rom_write_addcol(unsigned char value)
{
ROM_RD=1;
ROM_ALE=1;//ADDRESS
ROM_CLE=0;
rom_cs(0);
ROM_DATAPORT=value;
ROM_WR=0;
delay10ms(1);
ROM_WR=1;
ROM_BUSY=1;
while(ROM_BUSY==0);
rom_cs(1);
}
void rom_write_addrow(unsigned int value)
{
ROM_RD=1;
ROM_ALE=1;//ADDRESS
ROM_CLE=0;
rom_cs(0);
ROM_DATAPORT=(uchar)value;
ROM_WR=0;
delay10ms(1);
ROM_WR=1;
ROM_BUSY=1;
while(ROM_BUSY==0);
ROM_DATAPORT=(uchar)(value>>8);
ROM_WR=0;
delay10ms(1);
ROM_WR=1;
ROM_BUSY=1;
while(ROM_BUSY==0);
rom_cs(1);
}
void rom_write_data(unsigned char value)
{
ROM_CLE=0; //value
ROM_ALE=0;//
ROM_RD=1;
rom_cs(0);
ROM_DATAPORT=value;
ROM_WR=0;
delay10ms(1);
ROM_WR=1;
ROM_BUSY=1;
while(ROM_BUSY==0);
rom_cs(1);
}
void rom_rd_wr_data_start(uchar value,uchar addcol,uint addrow)
{ rom_write_com(value);
rom_write_addcol(addcol);
rom_write_addrow(addrow);
}
void rom_check_busy(void) //NOT BUSY RETURN
{
unsigned char value;
value=0;
while((value&0x40)==0)//is busy? yes-->check again
{ rom_write_com(0x70);//get status
ROM_DATAPORT=0xff;
ROM_CLE=0; //read the data?!
ROM_ALE=0;//
ROM_WR=1;
rom_cs(0);
ROM_RD=0;
value=ROM_DATAPORT;
ROM_RD=1;
ROM_BUSY=1;
while(ROM_BUSY==0);
rom_cs(1);
}
}
uchar rom_check_option()
{
unsigned char value;
value=0;
do
{
rom_write_com(0x70);//get status
ROM_DATAPORT=0xff;
ROM_CLE=0; //read the data?!
ROM_ALE=0;//
ROM_WR=1;
rom_cs(0);
ROM_RD=0;
value=ROM_DATAPORT;
ROM_RD=1;
ROM_BUSY=1;
while(ROM_BUSY==0);
rom_cs(1);
}
while((value&0x40)==0);
if((value&0x1)==0)
return(0);
else
return(1);
}
//-------------->Erase whole block data<--------------------
unsigned char rom_erase_block(unsigned int add)
{
unsigned char value;
rom_write_com(0x60);
// rom_write_addrow(add%32);
rom_write_addcol((add&0x7)<<5);
rom_write_addcol(add>>3);
rom_write_com(0xd0);
//--busy check!
value=0;
rom_write_com(0x70);//get status
rom_cs(0);
ROM_DATAPORT=0xff;
ROM_CLE=0; //read the data?!
ROM_ALE=0;
ROM_WR=1;
ROM_RD=0;
value=ROM_DATAPORT;
ROM_RD=1;
ROM_BUSY=1;
while(ROM_BUSY==0);
rom_cs(1);
delay5us(10);
if((value&1)==0)
return 0;//erase ok
else
return 1;//erase error
}
//-------------->write whole block data------<--------------
void rom_write_block_start(unsigned char addcol,unsigned int addrow)
{
rom_rd_wr_data_start(ROM_WR_MODE,addcol,addrow); //----after this can write data to flash.............---
}
unsigned char rom_write_block_end()
{
rom_write_com(0x10);
return 0;
}
void rom_read_block_start(unsigned char addcol,unsigned int addrow)
{
rom_rd_wr_data_start(ROM_RD_MODE1,addcol,addrow);
}
uchar rom_read_block_byte(void)
{
uchar value;
delay5us(2);
P2=0Xff;
ROM_DATAPORT=0XFF;
rom_cs(0);
ROM_WR=1;
ROM_ALE=0;
ROM_CLE=0;
ROM_RD=0;
value=ROM_DATAPORT;
ROM_RD=1;
ROM_BUSY=1;
while(ROM_BUSY==0);
rom_cs(1);
ROM_DATAPORT=0XFF;
return(value);
}
uint rom_read_block_word(void)
{
uint value1,value2;
value1=rom_read_block_byte();
value2=rom_read_block_byte();
value1=value1|(value2<<8);
return(value1);
}
uchar xdata *read_page(uint page)
{ uint jj;
uchar xdata ii[528];
rom_read_block_start(0,page);
for(jj=0;jj<528;jj++)
{ ii[jj]=rom_read_block_byte();
}
return ii;
}
uchar rom_write_page(uint addcow,uchar xdata *p)
{ uint rom_count;
rom_write_block_start(0,addcow);
for(rom_count=0;rom_count<PAGE_MODE;rom_count++)
{ rom_write_block_data(*(p+rom_count));
}
rom_write_block_end();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -