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

📄 at450xx.c

📁 45db041读写程序 MCU:LPC932 编译环境KEIL
💻 C
字号:
#include <REG932.H>           // SFR declarations
#include	"at450xx.h"
#define uchar unsigned char
#define uint unsigned int
#define byte unsigned char
#define ulong unsigned long 
/****************************************************************************
* 名称:SPI0_SendByte()
* 功能:SPI发送字节.
* 入口参数:发送的字节
* 出口参数:无
* 说明:须等待发送完毕
****************************************************************************/
void SPI0_SendByte(unsigned char ch)
{
  SPIF = 0xc0;
  SPI0DAT = ch;
  while (!(SPIF&0x80));       // wait for data transfer to be completed
} 
/****************************************************************************
* 名称:SPI0_GetByte()
* 功能:SPI发送字节.
* 入口参数:无
* 出口参数:接收到的字节
* 说明:须等待接收完毕
****************************************************************************/
unsigned char SPI0_GetByte(void)
{
  SPIF = 0xc0;
  SPI0DAT = 0;
  while (!(SPIF &0x80));
  return SPI0DAT;   // read data from SPI
}

//读缓存
//从缓冲区1的指定位置(0-263)中读入指定字节
void FlashBuffer1Read(unsigned int star_addr,unsigned int len, unsigned char *buffer) 
{                           
    unsigned int i;
           DF_RDY_BUSY;                   // check if flash is busy
           DF_CHIP_SELECT;                     // enable DataFlash
           SPI0_SendByte(BUFFER_1_READ);         //缓冲区1为d4H 缓冲区2为d6H
           SPI0_SendByte(0);
           SPI0_SendByte((unsigned char)(star_addr>>8));
           SPI0_SendByte((unsigned char)star_addr);
           SPI0_SendByte(0);
           for (i=0;i<len;i++)
           {
                   *buffer++ = SPI0_GetByte(); // read data from SPI
        	}
         DF_CHIP_NOSELECT;
}
//读缓存
//从缓冲区2的指定位置(0-263)中读入指定字节
void FlashBuffer2Read(unsigned int star_addr,unsigned int len, unsigned char *buffer) 
{                           
    unsigned int i;
           DF_RDY_BUSY;            // check if flash is busy
           DF_CHIP_SELECT;                  // enable DataFlash
           SPI0_SendByte(BUFFER_2_READ);            //缓冲区1为d4H 缓冲区2为d6H
           SPI0_SendByte(0);
           SPI0_SendByte((unsigned char)(star_addr>>8));
           SPI0_SendByte((unsigned char)star_addr);
           SPI0_SendByte(0);
           for (i=0;i<len;i++)
           {
                   *buffer++ = SPI0_GetByte();             // read data from SPI
        }
         DF_CHIP_NOSELECT;
}

//读主存至缓存
//从Flash读一页至缓存1#####################################################
void PageToBuffer1(uint	page)       
{
DF_RDY_BUSY;            // check if flash is busy
DF_CHIP_SELECT;            // enable DataFlash
SPI0_SendByte(PAGE_TO_B1_XFER); // transfer next page to buffer1
SPI0_SendByte((unsigned char)(page >> 7));
SPI0_SendByte((unsigned char)(page << 1));
SPI0_SendByte(0);                        
DF_CHIP_NOSELECT;
}
//读主存至缓存
//从Flash读一页至缓存2
void PageToBuffer2(uint	page)   
{
DF_RDY_BUSY;            // check if flash is busy
DF_CHIP_SELECT;            // enable DataFlash
SPI0_SendByte(PAGE_TO_B2_XFER); // transfer next page to buffer1
SPI0_SendByte((unsigned char)(page >> 7));
SPI0_SendByte((unsigned char)(page << 1));
SPI0_SendByte(0);                        
DF_CHIP_NOSELECT;
}


//擦除+缓存写主存
//直接将缓存1写入Flash一页(先擦除)
void FlashBuffer1ProgAutoErase(uint	page) 
{
DF_RDY_BUSY;            // check if flash is busy
DF_CHIP_SELECT;
SPI0_SendByte(B1_TO_PAGE_WITH_ERASE);
SPI0_SendByte((unsigned char)(page >> 7));
SPI0_SendByte((unsigned char)(page << 1));
SPI0_SendByte(0x00);
DF_CHIP_NOSELECT;
}

//擦除+缓存写主存
//直接将缓存2写入Flash一页(先擦除)
void FlashBuffer2ProgAutoErase(uint	page) 
{
DF_RDY_BUSY;            // check if flash is busy
DF_CHIP_SELECT;
SPI0_SendByte(B2_TO_PAGE_WITH_ERASE);
SPI0_SendByte((unsigned char)(page >> 7));
SPI0_SendByte((unsigned char)(page << 1));
SPI0_SendByte(0x00);
DF_CHIP_NOSELECT;
}
//写缓存
//向缓冲区1的指定位置(0-263)写入指定字节
void FlashBuffer1Write(unsigned int start_addr, unsigned int len,unsigned char *buffer)
{
uint i;
DF_RDY_BUSY;            // check if flash is busy
DF_CHIP_SELECT;                              //缓冲区1为84H 缓冲区2为87H
SPI0_SendByte(BUFFER_1_WRITE);
SPI0_SendByte(0x00);
SPI0_SendByte((unsigned char)(start_addr>>8));
SPI0_SendByte((unsigned char)start_addr);
for (i=0;i<len;i++)
	SPI0_SendByte(*buffer++);
DF_CHIP_NOSELECT;
}
//写缓存
//向缓冲区2的指定位置(0-263)写入指定字节
void FlashBuffer2Write(unsigned int start_addr, unsigned int len,unsigned char *buffer) 
{
uint i;
DF_RDY_BUSY;            // check if flash is busy
DF_CHIP_SELECT;                              //缓冲区1为84H 缓冲区2为87H
SPI0_SendByte(BUFFER_2_WRITE);
SPI0_SendByte(0x00);
SPI0_SendByte((unsigned char)(start_addr>>8));
SPI0_SendByte((unsigned char)start_addr);
for (i=0;i<len;i++)
     SPI0_SendByte(*buffer++);
DF_CHIP_NOSELECT;
}


⌨️ 快捷键说明

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