📄 at450xx.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 + -