📄 psdflash.h
字号:
/*--------------------------------------------------------------------------
PSDflash.H
--------------------------------------------------------------------------*/
#ifndef __PSDflash_H__
#define __PSDflash_H__
# define FLASH_COMMON1_XAAA (volatile uchar xdata*) 0x8aaa
# define FLASH_COMMON1_X555 (volatile uchar xdata*) 0x8555
# define FLASH_COMMON2_XAAA (volatile uchar xdata*) 0xaaaa
# define FLASH_COMMON2_X555 (volatile uchar xdata*) 0xa555
# define NVM_DATA_POLL 0x80 //数据轮询位DQ7
# define NVM_DATA_TOGGLE 0x40 //数据触发位DQ6
# define NVM_ERROR 0x20 //超时错误位DQ5
# define FALSE 0
# define TRUE 1
static void Delay1(unsigned int n)
{
unsigned int i;
for (i=0;i<n; i++);
}
//在FLASH中写入一个字节,用数据轮询的方式检测写入状态
unsigned char flash_write_1(volatile unsigned char xdata* addr, unsigned char dat)
{
unsigned char done ;
unsigned char error ;
unsigned char err ;
unsigned char poll ;
unsigned char readback ;
done = FALSE;
err=FALSE;
*(FLASH_COMMON1_X555)=0xaa ; // 开启主FLASH,写入0XAA 到地址0XX555
*(FLASH_COMMON1_XAAA)= 0x55 ; // 开启主FLASH,写入 0X55 到地址0XX555
*(FLASH_COMMON1_X555)=0xa0 ; // 写入0XA0来编程字节
*(addr) = dat ; // 写入数据字节到FLASH
dat =dat & NVM_DATA_POLL ; // 获取先前数据的D7位
do
{
poll= *(addr) ; // 读取编程字节的状态字节
error=poll & NVM_ERROR; // 保存DQS位的错误标志位
poll = poll & NVM_DATA_POLL; // 从FLASH中读取的轮询字节获取DQ7位
if ( dat ==poll)
done = TRUE;
else if (error == NVM_ERROR)
err = TRUE ;
}
while( (done==FALSE) && (err == FALSE));
if ( err == TRUE)
{
poll = *(addr);
poll = poll & NVM_DATA_POLL;
if (dat == poll)
done= TRUE;
*(FLASH_COMMON1_X555) = 0XF0;
}
readback = *(addr) ;
return (readback == dat);
}
//-----------------------------------------
unsigned char flash_write_2(volatile unsigned char xdata* addr, unsigned char dat)
{
unsigned char done ;
unsigned char error ;
unsigned char err ;
unsigned char poll ;
unsigned char readback ;
done = FALSE;
err=FALSE;
*(FLASH_COMMON2_X555)=0xaa ; // 开启主FLASH,写入0XAA 到地址0XX555
*(FLASH_COMMON2_XAAA)=0x55 ; // 开启主FLASH,写入 0X55 到地址0XX555
*(FLASH_COMMON2_X555)=0xa0 ; // 写入0XA0来编程字节
*(addr) = dat ; // 写入数据字节到FLASH
dat =dat & NVM_DATA_POLL ; // 获取先前数据的D7位
do
{
poll= *(addr) ; // 读取编程字节的状态字节
error=poll & NVM_ERROR; // 保存DQS位的错误标志位
poll = poll & NVM_DATA_POLL; // 从FLASH中读取的轮询字节获取DQ7位
if ( dat ==poll)
done = TRUE;
else if (error == NVM_ERROR)
err = TRUE ;
}
while( (done==FALSE) && (err == FALSE));
if ( err == TRUE)
{
poll = *(addr);
poll = poll & NVM_DATA_POLL;
if (dat == poll)
done= TRUE;
*(FLASH_COMMON2_X555)=0xf0;
}
readback = *(addr) ;
return (readback == dat);
}
//-----------------------------------------
//擦FLASH所有扇区
void flash_erase_all( void)
{
*(FLASH_COMMON1_X555) = 0xaa ;
*(FLASH_COMMON1_XAAA) = 0x55 ;
*(FLASH_COMMON1_X555) = 0x80 ;
*(FLASH_COMMON1_X555) = 0xaa ;
*(FLASH_COMMON1_XAAA) = 0x55 ;
*(FLASH_COMMON1_X555) = 0x10 ;
Delay1(5000);
Delay1(5000);
Delay1(5000);
Delay1(5000);
*(FLASH_COMMON2_X555) = 0xaa ;
*(FLASH_COMMON2_XAAA) = 0x55 ;
*(FLASH_COMMON2_X555) = 0x80 ;
*(FLASH_COMMON2_X555) = 0xaa ;
*(FLASH_COMMON2_XAAA) = 0x55 ;
*(FLASH_COMMON2_X555) = 0x10 ;
Delay1(5000);
Delay1(5000);
Delay1(5000);
Delay1(5000);
}
//-----------------------------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -