📄 flash_m16.h
字号:
/*对FLASH进行读写的函数
* 器件:AVR AT MEAG16 373锁存
* FLASHROM:W49F002U
* PA0~7,PC0~7地址和数据线
* PD5 读始能 PD6 写始能 PD7 ALE
*
*/
#define ALE_HIGH() PORTD |=0X01; //定义ALE管脚
#define ALE_LOW() PORTD &=0XFE;
#define W_EN_HIGH() PORTD |=0B00000010; //定义写始能
#define W_EN_LOW() PORTD &=0B11111101;
#define R_EN_HIGH() PORTD |=0B00000100; //定义读始能
#define R_EN_LOW() PORTD &=0B11111011;
//**************************************************************/
unsigned char FlashRead(long int data_adress); //定义FLASH读函数
void FlashWrite(unsigned int data_adress,unsigned char data);//定义FLASH写函数
void ChipErase(void); //片擦除
void SectoErase(char sector); //区擦除
void BootBlockLockout(void);
void AdressSend(long int adress);
void DataIN(long int data_adress,char data);
/***************************************************************/
//按BIT读FLASHROM
unsigned char FlashRead(long int data_adress)
{
char data;
R_EN_HIGH(); //读始能关闭
W_EN_HIGH(); //写始能关闭
AdressSend(data_adress); //送地址
R_EN_LOW(); //读始能打开,低电平有效
DDRA =0X00; //
data =PINA; //从A口读数据
return data; //返回数据
}
//按BIT写FLASHROM
void FlashWrite(unsigned int data_adress,unsigned char data)
{
DataIN(0x5555,0XAA);
DataIN(0x2AAA,0X55);
DataIN(0x5555,0XA0);
DataIN(data_adress,data);
}
//片擦除
void ChipErase(void)
{
R_EN_HIGH(); //读始能关闭
DataIN(0x5555,0XAA);
DataIN(0x2AAA,0X55);
DataIN(0x5555,0X80);
DataIN(0x5555,0XAA);
DataIN(0x2AAA,0X55);
DataIN(0x5555,0X10);
}
//送地址到FLASH和373
void AdressSend(long int adress)
{
ALE_HIGH(); //ALE设置为高
DDRA =0XFF; //设定A口为输出
DDRC =0XFF; //设定C口为输出
DDRD =0XFF; //设定D口为输出
PORTA =adress&0xff; //送底8位地址A0~A7 PA0~7
PORTC =(adress>>8)&0xff; //送中间8位地址A8~A15 PC0~7
PORTD =(PORTD&0xE7)|((adress>>13)&0x18); //送地址A16~A17 PD3~4
ALE_LOW(); //锁存数据
}
void DataIN(long int data_adress,char data)
{
W_EN_HIGH(); //写始能关闭
AdressSend(data_adress); //送地址
W_EN_LOW(); //写始能打开,低电平有效
DDRA =0XFF;
PORTA =data;
W_EN_HIGH(); //写始能关闭
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -