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

📄 dataflash.c

📁 butterflylogger_src_20060822 for atmel avr
💻 C
📖 第 1 页 / 共 2 页
字号:
	DF_CS_inactive;								//make sure to toggle CS signal in order	DF_CS_active;								//to reset dataflash command decoder		if (1 == BufferNo)							//read byte(s) from buffer 1	{		DF_SPI_RW(Buf1Read);					//buffer 1 read op-code		DF_SPI_RW(0x00);						//don't cares		DF_SPI_RW((unsigned char)(IntPageAdr>>8));//upper part of internal buffer address		DF_SPI_RW((unsigned char)(IntPageAdr));	//lower part of internal buffer address		DF_SPI_RW(0x00);						//don't cares		for( i=0; i<No_of_bytes; i++)		{			*(BufferPtr) = DF_SPI_RW(0x00);		//read byte and put it in AVR buffer pointed to by *BufferPtr			BufferPtr++;						//point to next element in AVR buffer		}	}	#ifdef USE_BUFFER2	else	if (2 == BufferNo)							//read byte(s) from buffer 2	{		DF_SPI_RW(Buf2Read);					//buffer 2 read op-code		DF_SPI_RW(0x00);						//don't cares		DF_SPI_RW((unsigned char)(IntPageAdr>>8));//upper part of internal buffer address		DF_SPI_RW((unsigned char)(IntPageAdr));	//lower part of internal buffer address		DF_SPI_RW(0x00);						//don't cares		for( i=0; i<No_of_bytes; i++)		{			*(BufferPtr) = DF_SPI_RW(0x00);		//read byte and put it in AVR buffer pointed to by *BufferPtr			BufferPtr++;						//point to next element in AVR buffer		}	}#endif}//NB : Sjekk at (IntAdr + No_of_bytes) < buffersize, hvis ikke blir det bare ball..*//*******************************************************************************	Function name : Buffer_Write_Enable**	Returns :		None**	Parameters :	IntPageAdr	->	Internal page address to start writing from*					BufferAdr	->	Decides usage of either buffer 1 or 2*					*	Purpose :		Enables continous write functionality to one of the dataflash buffers*					buffers. NOTE : User must ensure that CS goes high to terminate*					this mode before accessing other dataflash functionalities *******************************************************************************/void Buffer_Write_Enable (unsigned char BufferNo, unsigned int IntPageAdr){	DF_CS_inactive;								//make sure to toggle CS signal in order	DF_CS_active;								//to reset dataflash command decoder		while(!(Read_DF_status() & 0x80));			//monitor the status register, wait until busy-flag is high		DF_CS_inactive;								//make sure to toggle CS signal in order	DF_CS_active;								//to reset dataflash command decoder		if (1 == BufferNo)							//write enable to buffer 1	{		DF_SPI_RW(Buf1Write);					//buffer 1 write op-code		DF_SPI_RW(0x00);						//don't cares		DF_SPI_RW((unsigned char)(IntPageAdr>>8));//upper part of internal buffer address		DF_SPI_RW((unsigned char)(IntPageAdr));	//lower part of internal buffer address	}	#ifdef USE_BUFFER2	else	if (2 == BufferNo)							//write enable to buffer 2	{		DF_SPI_RW(Buf2Write);					//buffer 2 write op-code		DF_SPI_RW(0x00);						//don't cares		DF_SPI_RW((unsigned char)(IntPageAdr>>8));//upper part of internal buffer address		DF_SPI_RW((unsigned char)(IntPageAdr));	//lower part of internal buffer address	}#endif}/*******************************************************************************	Function name : Buffer_Write_Byte**	Returns :		None**	Parameters :	IntPageAdr	->	Internal page address to write byte to*					BufferAdr	->	Decides usage of either buffer 1 or 2*					Data		->	Data byte to be written**	Purpose :		Writes one byte to one of the dataflash*					internal SRAM buffers*******************************************************************************//*void Buffer_Write_Byte (unsigned char BufferNo, unsigned int IntPageAdr, unsigned char Data){	DF_CS_inactive;								//make sure to toggle CS signal in order	DF_CS_active;								//to reset dataflash command decoder		while(!(Read_DF_status() & 0x80));			//monitor the status register, wait until busy-flag is high		DF_CS_inactive;								//make sure to toggle CS signal in order	DF_CS_active;								//to reset dataflash command decoder		if (1 == BufferNo)							//write byte to buffer 1	{		DF_SPI_RW(Buf1Write);					//buffer 1 write op-code		DF_SPI_RW(0x00);						//don't cares		DF_SPI_RW((unsigned char)(IntPageAdr>>8));//upper part of internal buffer address		DF_SPI_RW((unsigned char)(IntPageAdr));	//lower part of internal buffer address		DF_SPI_RW(Data);						//write data byte	}#ifdef USE_BUFFER2	else	if (2 == BufferNo)							//write byte to buffer 2	{		DF_SPI_RW(Buf2Write);					//buffer 2 write op-code		DF_SPI_RW(0x00);						//don't cares		DF_SPI_RW((unsigned char)(IntPageAdr>>8));//upper part of internal buffer address		DF_SPI_RW((unsigned char)(IntPageAdr));	//lower part of internal buffer address		DF_SPI_RW(Data);						//write data byte	}		#endif}*//*******************************************************************************	Function name : Buffer_Write_Str**	Returns :		None**	Parameters :	BufferNo	->	Decides usage of either buffer 1 or 2*					IntPageAdr	->	Internal page address*					No_of_bytes	->	Number of bytes to be written*					*BufferPtr	->	address of buffer to be used for copy of bytes*									from AVR buffer to dataflash buffer 1 (or 2)**	Purpose :		Copies one or more bytes to one of the dataflash*					internal SRAM buffers from AVR SRAM buffer*					pointed to by *BufferPtr*******************************************************************************//*void Buffer_Write_Str (unsigned char BufferNo, unsigned int IntPageAdr, unsigned int No_of_bytes, unsigned char *BufferPtr){	unsigned int i;		DF_CS_inactive;								//make sure to toggle CS signal in order	DF_CS_active;								//to reset dataflash command decoder		while(!(Read_DF_status() & 0x80));			//monitor the status register, wait until busy-flag is high		DF_CS_inactive;								//make sure to toggle CS signal in order	DF_CS_active;								//to reset dataflash command decoder		if (1 == BufferNo)							//write byte(s) to buffer 1	{		DF_SPI_RW(Buf1Write);					//buffer 1 write op-code		DF_SPI_RW(0x00);						//don't cares		DF_SPI_RW((unsigned char)(IntPageAdr>>8));//upper part of internal buffer address		DF_SPI_RW((unsigned char)(IntPageAdr));	//lower part of internal buffer address		for( i=0; i<No_of_bytes; i++)		{			DF_SPI_RW(*(BufferPtr));			//write byte pointed at by *BufferPtr to dataflash buffer 1 location			BufferPtr++;						//point to next element in AVR buffer		}	}#ifdef USE_BUFFER2	else	if (2 == BufferNo)							//write byte(s) to buffer 2	{		DF_SPI_RW(Buf2Write);					//buffer 2 write op-code		DF_SPI_RW(0x00);						//don't cares		DF_SPI_RW((unsigned char)(IntPageAdr>>8));//upper part of internal buffer address		DF_SPI_RW((unsigned char)(IntPageAdr));	//lower part of internal buffer address		for( i=0; i<No_of_bytes; i++)		{			DF_SPI_RW(*(BufferPtr));			//write byte pointed at by *BufferPtr to dataflash buffer 2 location			BufferPtr++;						//point to next element in AVR buffer		}	}#endif}//NB : Monitorer busy-flag i status-reg.//NB : Sjekk at (IntAdr + No_of_bytes) < buffersize, hvis ikke blir det bare ball..*//*******************************************************************************	Function name : Buffer_To_Page**	Returns :		None**	Parameters :	BufferAdr	->	Decides usage of either buffer 1 or 2*					PageAdr		->	Address of flash page to be programmed**	Purpose :		Transfers a page from dataflash SRAM buffer to flash*					******************************************************************************/void Buffer_To_Page (unsigned char BufferNo, unsigned int PageAdr){		DF_CS_inactive;												//make sure to toggle CS signal in order	DF_CS_active;												//to reset dataflash command decoder		while(!(Read_DF_status() & 0x80));							//monitor the status register, wait until busy-flag is high		DF_CS_inactive;												//make sure to toggle CS signal in order	DF_CS_active;												//to reset dataflash command decoder		if (1 == BufferNo)											//program flash page from buffer 1	{		DF_SPI_RW(Buf1ToFlashWE);								//buffer 1 to flash with erase op-code		DF_SPI_RW((unsigned char)(PageAdr >> (16 - PageBits)));	//upper part of page address		DF_SPI_RW((unsigned char)(PageAdr << (PageBits - 8)));	//lower part of page address		DF_SPI_RW(0x00);										//don't cares	}#ifdef USE_BUFFER2	else		if (2 == BufferNo)											//program flash page from buffer 2	{		DF_SPI_RW(Buf2ToFlashWE);								//buffer 2 to flash with erase op-code		DF_SPI_RW((unsigned char)(PageAdr >> (16 - PageBits)));	//upper part of page address		DF_SPI_RW((unsigned char)(PageAdr << (PageBits - 8)));	//lower part of page address		DF_SPI_RW(0x00);										//don't cares	}#endif		DF_CS_inactive;												//initiate flash page programming												}/*******************************************************************************	Function name : Cont_Flash_Read_Enable**	Returns :		None**	Parameters :	PageAdr		->	Address of flash page where cont.read starts from*					IntPageAdr	->	Internal page address where cont.read starts from**	Purpose :		Initiates a continuous read from a location in the DataFlash*					******************************************************************************/void Cont_Flash_Read_Enable (unsigned int PageAdr, unsigned int IntPageAdr){		DF_CS_inactive;																//make sure to toggle CS signal in order	DF_CS_active;																//to reset dataflash command decoder		while(!(Read_DF_status() & 0x80));											//monitor the status register, wait until busy-flag is high		DF_CS_inactive;																//make sure to toggle CS signal in order	DF_CS_active;																//to reset dataflash command decoder		DF_SPI_RW(ContArrayRead);													//Continuous Array Read op-code	DF_SPI_RW((unsigned char)(PageAdr >> (16 - PageBits)));						//upper part of page address	DF_SPI_RW((unsigned char)((PageAdr << (PageBits - 8))+ (IntPageAdr>>8)));	//lower part of page address and MSB of int.page adr.	DF_SPI_RW((unsigned char)(IntPageAdr));										//LSB byte of internal page address	DF_SPI_RW(0x00);															//perform 4 dummy writes	DF_SPI_RW(0x00);															//in order to intiate DataFlash	DF_SPI_RW(0x00);															//address pointers	DF_SPI_RW(0x00);}// *****************************[ End Of DATAFLASH.C ]*************************

⌨️ 快捷键说明

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