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

📄 extflash.c

📁 利用zigbee进行定位的程序
💻 C
字号:
//----------------------------------------------------////-------Institute Of  Computing Technology-----------////------------Chinese Academic  Science---------------////-----中国科学院计算技术研究所先进测试技术实验室-----////----------------------------------------------------///** * @copyright:nbicc_lpp * @this is this is extflash support  code * @author  *              zhouqiang      (zhouhongren@163.com) *               * @data:2005.12.29 * @version:0.0.1 * @updata:$ * */#include "extflash.h"//--------------------------------//FLASH_IN--so//FLASH_OUT--si//FLASH_CLK--sck//FLASH_SELECT----cs//--------------------------------   //OS_SET_FLASH_SELECT_PIN();inline void extflash_ini(void){	OS_MAKE_FLASH_SELECT_OUTPUT();  	OS_MAKE_FLASH_OUT_OUTPUT();	OS_MAKE_FLASH_IN_INPUT();       OS_MAKE_FLASH_CLK_OUTPUT();	          OS_SET_FLASH_SELECT_PIN();	flash_busy=0;       /*another method	//----------------------------	//initial uart1 to syn model	//----------------------------		 UCSR1B = 0x00; //disable while setting baud rate	 UCSR1A = 0x03;	 UCSR1C = 0x41;	 UBRR1L = 0x22; //set baud rate lo	 UBRR1H = 0x00; //set baud rate hi	 UCSR1B = 0x18;       //115200 	//----------------------------	*/}inline static  void sendonebyte(uint8_t byte){    	uint8_t  tempbyte;	tempbyte=byte;	{ os_atomic_t _nesc_atomic = os_atomic_start();   				 {	for (int i=0;i<8;i++)		{						OS_CLR_FLASH_CLK_PIN();						if (tempbyte&0x80)				{										PORTD|=_BV(PIND3);									}			else				{										PORTD&=~_BV(PIND3);									}						//printf("\nPD is %02x\n",PORTD);			OS_SET_FLASH_CLK_PIN();									tempbyte<<=1;		}              	}			 os_atomic_end(_nesc_atomic); }}inline static  uint8_t readonebyte(void){       	uint8_t tempbyte=0;	{ os_atomic_t _nesc_atomic = os_atomic_start();   				 {	for (int i=0;i<7;i++)		{			OS_CLR_FLASH_CLK_PIN();			OS_SET_FLASH_CLK_PIN();			//printf("\nPD is %02x\n",PIND);			if (PIND&_BV(PIND2))				tempbyte|=0x01;			else				tempbyte&=0xfe;			//OS_CLR_FLASH_CLK_PIN();						tempbyte<<=1;		}	OS_CLR_FLASH_CLK_PIN();       OS_SET_FLASH_CLK_PIN();	   		//printf("\nPD is %02x\n",PIND);	if (PIND&_BV(PIND2))		tempbyte|=0x01;	else		tempbyte&=0xfe;	//OS_CLR_FLASH_CLK_PIN();	//printf("\ntempbyte  is %02x\n",tempbyte);		}	os_atomic_end(_nesc_atomic); }	return tempbyte;					}void Continuous_Array_Read(uint16_t address,uint16_t page,uint8_t * buffer,uint16_t numbers){	extflash_head temphead;	uint8_t * tempbuffer;	tempbuffer=buffer;	uint16_t tempnumbers;	tempnumbers=numbers;	temphead._extflash_head.opcode=Continuou_Array_Read;	temphead._extflash_head.page=page&0x07ff;	temphead._extflash_head.block_byte=address&0x01ff;	//OS_CLR_FLASH_CLK_PIN();		OS_CLR_FLASH_SELECT_PIN();//选通flash		sendonebyte(temphead.v[3]);		sendonebyte(temphead.v[2]);		sendonebyte(temphead.v[1]);		sendonebyte(temphead.v[0]);				//------------------------------------		sendonebyte(0x00);		sendonebyte(0x00);		sendonebyte(0x00);		sendonebyte(0x00);		//------------------------------------		for (uint16_t i=0;i<tempnumbers;i++)			{				tempbuffer[i]=readonebyte();			}	OS_SET_FLASH_SELECT_PIN();	}void Main_Memory_PageRead(uint16_t page,uint16_t address,uint8_t * buffer,uint16_t numbers){	extflash_head temphead;	uint8_t  * tempbuffer=buffer;	uint16_t tempnumbers;	tempnumbers=numbers;	temphead._extflash_head.opcode=Main_Memory_Page_Read;	temphead._extflash_head.page=page&0x07ff;	temphead._extflash_head.block_byte=address&0x01ff;		OS_CLR_FLASH_SELECT_PIN();//选通flash			sendonebyte(temphead.v[3]);		sendonebyte(temphead.v[2]);		sendonebyte(temphead.v[1]);		sendonebyte(temphead.v[0]);		//for (int i=0;i<4;i++)		//	printf("\nsend %02x\n",temphead.v[i]);		sendonebyte(0x00);		sendonebyte(0x00);		sendonebyte(0x00);		sendonebyte(0x00);		//------------------------------------		for (uint16_t i=0;i<tempnumbers;i++)			{				tempbuffer[i]=readonebyte();			}			OS_SET_FLASH_SELECT_PIN();}void Buffer_Read(uint8_t buffernum,uint16_t address,uint16_t numbers,uint8_t* buffer)//use buffer1_read or buffer2_read{	extflash_head temphead;	uint8_t  * tempbuffer=buffer;	temphead._extflash_head.opcode=buffernum;	temphead._extflash_head.page=0x0000;	temphead._extflash_head.block_byte=address&0x01ff;		OS_CLR_FLASH_SELECT_PIN();//选通flash			sendonebyte(temphead.v[3]);		sendonebyte(temphead.v[2]);		sendonebyte(temphead.v[1]);		sendonebyte(temphead.v[0]);		//for (int i=0;i<4;i++)		//	printf("\nsend %02x\n",temphead.v[i]);		sendonebyte(0x00);		for (int i=0;i<numbers;i++)			{				tempbuffer[i]=readonebyte();			}			OS_SET_FLASH_SELECT_PIN();}uint8_t  Status_Register_Get(void){	extflash_head temphead;	uint8_t state=0;	temphead._extflash_head.opcode=Status_Register_Read;	temphead._extflash_head.page=0x0000;	temphead._extflash_head.block_byte=0x0000;	{ os_atomic_t _nesc_atomic = os_atomic_start();   				 {	OS_CLR_FLASH_SELECT_PIN();//选通flash			sendonebyte(temphead.v[3]);		state=readonebyte();						OS_SET_FLASH_SELECT_PIN();			}	os_atomic_end(_nesc_atomic); }	return state;}void Buffer_Write(uint8_t buffernum,uint16_t address,uint16_t numbers,uint8_t* buffer )//use buffer1_write or buffer2_write{	extflash_head temphead;	uint8_t  * tempbuffer=buffer;	uint16_t tempnumbers=numbers;	temphead._extflash_head.opcode=buffernum;	temphead._extflash_head.page=0x0000;	temphead._extflash_head.block_byte=address&0x01ff;		OS_CLR_FLASH_SELECT_PIN();//选通flash		sendonebyte(temphead.v[3]);		sendonebyte(temphead.v[2]);		sendonebyte(temphead.v[1]);		sendonebyte(temphead.v[0]);		//for (int i=0;i<4;i++)		//	printf("\nsend %02x\n",temphead.v[i]);		//printf("\nbegin write to buffer\n");		for (int i=0;i<tempnumbers;i++)			{				sendonebyte(tempbuffer[i]);			}	OS_SET_FLASH_SELECT_PIN();}void Buffer_To_Main_Erase(uint8_t buffernum,uint16_t page){	extflash_head temphead;		temphead._extflash_head.opcode=buffernum;	temphead._extflash_head.block_byte=0x0000;	temphead._extflash_head.page=page&0x07ff;		OS_CLR_FLASH_SELECT_PIN();//选通flash		sendonebyte(temphead.v[3]);		sendonebyte(temphead.v[2]);		sendonebyte(temphead.v[1]);		sendonebyte(temphead.v[0]);		//for (int i=0;i<4;i++)		//	printf("\nsend %02x\n",temphead.v[i]);		//printf("\nbegin write to buffer\n");			OS_SET_FLASH_SELECT_PIN();}void Buffer_To_Main_noErase(uint8_t buffernum,uint16_t page)//不推荐使用,使用前需要先pageerase{	extflash_head temphead;		temphead._extflash_head.opcode=buffernum;//use Buffer1_Main_noErase or Buffer2_Main_noErase	temphead._extflash_head.block_byte=0x0000;	temphead._extflash_head.page=page&0x07ff;		OS_CLR_FLASH_SELECT_PIN();//选通flash		sendonebyte(temphead.v[3]);		sendonebyte(temphead.v[2]);		sendonebyte(temphead.v[1]);		sendonebyte(temphead.v[0]);		OS_SET_FLASH_SELECT_PIN();}void PageErase(uint16_t page){	extflash_head temphead;		temphead._extflash_head.opcode=Page_Erase;	temphead._extflash_head.block_byte=0x0000;	temphead._extflash_head.page=page&0x07ff;		//OS_CLR_FLASH_CLK_PIN();		OS_CLR_FLASH_SELECT_PIN();//选通flash		sendonebyte(temphead.v[3]);		sendonebyte(temphead.v[2]);		sendonebyte(temphead.v[1]);		sendonebyte(temphead.v[0]);	OS_SET_FLASH_SELECT_PIN();}void Memory_Pageprogram_throuth_Buffer(uint8_t buffernum,uint16_t page,uint16_t address,uint16_t numbers,uint8_t * buffer){	extflash_head temphead;	uint16_t tempnumbers=numbers;	uint8_t *tempbuffer=buffer;	temphead._extflash_head.opcode=buffernum;	temphead._extflash_head.block_byte=address&0x01ff;	temphead._extflash_head.page=page&0x07ff;	OS_CLR_FLASH_SELECT_PIN();//选通flash		sendonebyte(temphead.v[3]);		sendonebyte(temphead.v[2]);		sendonebyte(temphead.v[1]);		sendonebyte(temphead.v[0]);		for (int i=0;i<tempnumbers;i++)			{				sendonebyte(tempbuffer[i]);			}	OS_SET_FLASH_SELECT_PIN();}//-----------------------------------------------------------------------------------////-----------Adiitional_Commands函数完成三个功能://-----------1.main memory page to buffer transfer//-----------2.main memory page to buffer compare//-----------3.auto page rewrite//-----------commandtype list://-------------------------1.Auto_Page_Rewrite_Buffer1 or Auto_Page_Rewrite_Buffer2//-------------------------2.Main_Pageto_Buffer1_compare or Main_Pageto_Buffer2_compare//-------------------------3.Main_Pageto_Buffer1 or Main_Pageto_Buffer2//-----------------------------------------------------------------------------------//void Adiitional_Commands(uint8_t commandtype,uint16_t page){	extflash_head temphead;		temphead._extflash_head.opcode=commandtype;	temphead._extflash_head.block_byte=0x0000;	temphead._extflash_head.page=page&0x07ff;			OS_CLR_FLASH_SELECT_PIN();//选通flash		sendonebyte(temphead.v[3]);		sendonebyte(temphead.v[2]);		sendonebyte(temphead.v[1]);		sendonebyte(temphead.v[0]);	OS_SET_FLASH_SELECT_PIN();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -