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

📄 rom.c

📁 8051带32Mflash的源代码
💻 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 + -