📄 flash.c.bak
字号:
unsigned char SPI_WRITE_BYTE(unsigned long lAddr,unsigned char inch)
{
unsigned char cTemp;
unsigned char NACK;
SPI_WREN();
cTemp = SPI_READ_STATUS();
if(!(cTemp&WEL_ON))
{
return 0;
}
NACK = 0xff;
while(NACK--)
{
SPI_WREN();
cTemp =SPI_READ_STATUS();
if(!(cTemp&BUSY_ON))
{
break;
}
else
{
delay_ms(1);
}
}
if(!NACK)
{
return 0;
}
CE_LOW;
CLK_LOW;
WAIT_TBF;
SPI2BUF = SST_WBYTE;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = (lAddr&0xffffff) >> 16;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = (lAddr&0xffff) >> 8;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = lAddr&0xff;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = inch;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
CLK_HIG;
CE_HIG;
return 1;
}
unsigned char SPI_READ_BYTE(unsigned long lAddr)
{
unsigned char cTemp;
CE_LOW;
CLK_LOW;
WAIT_TBF;
SPI2BUF = SST_RBYTE;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = (lAddr&0xffffff) >> 16;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = (lAddr&0xffff) >> 8;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = lAddr&0xff;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = WRITE_NULL;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
CLK_HIG;
CE_HIG;
return cTemp;
}
void SPI_HISPEED_READ(unsigned long lAddr,unsigned int leng,unsigned char *buf)
{
unsigned char cTemp;
unsigned int loop;
CE_LOW;
CLK_LOW;
WAIT_TBF;
SPI2BUF = SST_RBYTE;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = (lAddr&0xffffff) >> 16;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = (lAddr&0xffff) >> 8;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
SPI2BUF = lAddr&0xff;
WAIT_TBF;
WAIT_RBF;
cTemp = SPI2BUF;
for(loop = 0; loop <leng;loop++)
{
SPI2BUF = WRITE_NULL;
WAIT_TBF;
WAIT_RBF;
buf[loop] = SPI2BUF;
}
CLK_HIG;
CE_HIG;
return ;
}
/************************************************************************/
/* PROCEDURE: Read_Status_Register */
/* */
/* This procedure read the status register and returns the byte. */
/* */
/* Input: */
/* None */
/* */
/* Returns: */
/* byte */
/************************************************************************/
/************************************************************************/
/* PROCEDURE: Wait_Busy */
/* */
/* This procedure waits until device is no longer busy (can be used by */
/* Byte-Program, Sector-Erase, Block-Erase, Chip-Erase). */
/* */
/* Input: */
/* None */
/* */
/* Returns: */
/* Nothing */
/************************************************************************/
/************************************************************************/
/* PROCEDURE: Chip_Erase */
/* */
/* This procedure erases the entire Chip. */
/* */
/* Input: */
/* None */
/* */
/* Returns: */
/* Nothing */
/************************************************************************/
/************************************************************************/
/* PROCEDURE: Sector_Erase */
/* */
/* 擦除整条记录 */
/* */
/* */
/* Input: */
/* Index, */
/* */
/* Returns: */
/* Nothing */
/************************************************************************/
/************************************************************************/
/* PROCEDURE: ReadECG_To_Buffer */
/* */
/* 获得指定页数据记录的某个ECG数据 */
/* */
/* */
/* Input: */
/* Index, point */
/* */
/* Returns: */
/* Byte */
/************************************************************************/
unsigned char Read_ECG_Point(unsigned long Index,unsigned long point)
{
unsigned char Byte;
volatile unsigned long adr=0;
unsigned long NewIndex;
NewIndex=Index<<1;
adr =NewIndex<<12;
adr =adr|point;
Byte = SPI_READ_BYTE(adr) ;
return Byte;
}
/************************************************************************/
/* PROCEDURE: Record_Info_To_Buffer */
/* */
/* 获得指定页数据记录的目录信息 并保存到 Record_Info_Buf */
/* */
/* */
/* Input: */
/* Index */
/* */
/* Returns: */
/* Record_Info_Buf */
/************************************************************************/
void Read_Record_Info_To_Buffer(unsigned long Index)
{
unsigned char tmp;
unsigned int i,j=0;
volatile unsigned long adr=0;
unsigned long NewIndex;
NewIndex = (Index<<1)+1;
adr =NewIndex<<12;
adr =adr|0xDAC;
for(i=0;i<16;i++)
{
tmp= SPI_READ_BYTE(adr);
Record_Info_Buf[j++]=tmp;
adr++;
}
mov_buf_to_record();
}
/************************************************************************/
/* PROCEDURE: Read_Index_Info_To_Buffer */
/* */
/* 获得指定页数据记录的目录信息 并保存到 Index_Info_Buf */
/* */
/* */
/* Input: */
/* Index */
/* */
/* Returns: */
/* Index_Info_Buf */
/************************************************************************/
void Read_Index_Info_To_Buffer(unsigned long Index)
{
unsigned char tmp;
unsigned int i,j=0;
unsigned long adr=0;
adr = Index<<12;
for(i=0;i<MAX_Records+1;i++)
{
tmp= SPI_READ_BYTE(adr);
Index_Info_Buf[j++]=tmp;
adr++;
}
}
/************************************************************************/
/* PROCEDURE: Read_Setup_Info_To_Buffer */
/* */
/* 获得指定页数据记录的目录信息 并保存到 Index_Info_Buf */
/* */
/* */
/* Input: */
/* Index */
/* */
/* Returns: */
/* Index_Info_Buf */
/************************************************************************/
void Read_Setup_Info_To_Buffer(unsigned long Index)
{
unsigned char tmp;
unsigned int i,j=0;
unsigned long adr=0;
adr = Index<<12;
for(i=0;i<30;i++)
{
tmp= SPI_READ_BYTE(adr);
Setup_Info_Buf[j++]=tmp;
adr++;
}
mov_buf_to_setup();
}
/************************************************************************/
/* PROCEDURE: Write_ECG_Point */
/* */
/* 一次往指定位置存两个ECG数据 */
/* */
/* */
/* Input: */
/* Index,point,Data1,Data2 */
/* */
/* Returns: */
/* Nothing */
/************************************************************************/
void Write_ECG_Point(unsigned long Index,unsigned long point,unsigned char Data1,unsigned char Data2)
{
volatile unsigned long adr=0;
unsigned long NewIndex;
NewIndex=Index<<1;
adr = NewIndex<<12;
adr =adr|point;
SPI_WRITE_BYTE(adr,Data1);
}
/************************************************************************/
/* PROCEDURE: Write_Record_Buf */
/* */
/* 将记录信息存到对应的扇区 */
/* */
/* */
/* Input: */
/* Index,Record_Info_Buf */
/* */
/* Returns: */
/* Nothing */
/************************************************************************/
void Write_Record_Buf(unsigned long Index)
{
volatile unsigned long adr=0;
unsigned char i,j=0;
unsigned long NewIndex;
unsigned long my;
my = Index;
NewIndex = (my<<1)+1;
//Sector_Erase(NewIndex);
adr = NewIndex<<12;
delay_ms(1000);
adr =adr|0xDAC;
mov_record_to_buf();
delay_ms(1000);
for(i=0;i<16;i++)
{
SPI_WRITE_BYTE(adr,Record_Info_Buf[j++]);
delay_ms(1);
adr++;
}
/* NewIndex = (my<<1)+1;
adr =NewIndex<<12;
adr =adr|0xDAC;
for(i=0;i<16;i++)
{
tmp= SPI_READ_BYTE(adr);
Record_Info_Buf[j++]=tmp;
adr++;
}
mov_buf_to_record(); */
}
/************************************************************************/
/* PROCEDURE: Write_Index_Buf */
/* */
/* 将索引信息存到指定的扇区 */
/* */
/* */
/* Input: */
/* Index,Index_Info_Buf[MAX_Records] */
/* */
/* Returns: */
/* Nothing */
/************************************************************************/
void Write_Index_Buf(unsigned long Index)
{
unsigned long adr=0;
unsigned char i,j=0;
adr = Index<<12;
for(i=0;i<MAX_Records+1;i++)
{
SPI_WRITE_BYTE(adr,Index_Info_Buf[j++]);
adr++;
}
}
/************************************************************************/
/* PROCEDURE: Write_Setup_Buf */
/* */
/* 将配置信息存到指定的扇区 */
/* */
/* */
/* Input: */
/* Index,Setup_Info_Buf[32] */
/* */
/* Returns: */
/* Nothing */
/************************************************************************/
void Write_Setup_Buf(unsigned long Index)
{
unsigned long adr=0;
unsigned char i,j=0;
adr = Index<<12;
mov_setup_to_buf();
for(i=0;i<30;i++)
{
SPI_WRITE_BYTE(adr,Setup_Info_Buf[j++]);
adr++;
}
}
/************************************************************************/
/* PROCEDURE: Tran_Sector_to_Sector */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -