📄 dataflash_.h
字号:
}
}
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
}
}
}
//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
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
}
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
}
}
/*****************************************************************************
*
* 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
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
}
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
}
}
/*****************************************************************************
*
* 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
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[i]); //write byte pointed at by *BufferPtr to dataflash buffer 1 location
//BufferPtr++; //point to next element in AVR buffer
}
}
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
}
}
}
//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
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
}
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
}
DF_CS_inactive; //initiate flash page programming
DF_CS_active;
while(!(Read_DF_status() & 0x80)); //monitor the status register, wait until busy-flag is high
}
/*****************************************************************************
*
* 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
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 + -