📄 k9f1g08.h
字号:
#include "config.h"
/////////////////////////////////////////
//////////////////端口定义
//////////////////////////////////////////////
#define DATA (uint32)0x0ff<<8
#define Flash_WE 20////
#define Flash_RE 25/////
#define Flash_CE 2///
#define Flash_CLE 3///
#define Flash_ALE 26/////
#define Flash_RB 24
/////////////////////////////////////////////
/////////////delay
///////////////////////////////////////////
void delay(uint8 time)
{
uint8 i,j;
for(i=0;i<time;i++)
for(j=0;j<0x01;j++);
}
/////////////////////////////////////////////////////////////////
/////////存储器初始化
//////////////////////////////////////////////////////////////
void init_flash()
{IODIR |=((1 << Flash_WE)|(1 << Flash_RE)|(1 << Flash_CE)|(1 << Flash_CLE)|(1 <<
Flash_ALE))|DATA ; //全部输出
IODIR&=(~ (1 << Flash_RB));
IOSET= (1 << Flash_WE)|(1 << Flash_RE)|(1 << Flash_CE);
IOCLR= ((1 << Flash_CLE)|(1 << Flash_ALE));
}
////////////////////////////////////////////////////////////
//////////////写命令
///////////////////////////////////////////////////////////////////
void flash_write_cmd(uint8 cmd)
{
init_flash();
IOSET= (1 << Flash_CLE); //写命令允许
while(!(IO0PIN& (1 << Flash_RB)))
delay(1);
IO0PIN=(IO0PIN& (~(DATA)))|(cmd<<8); //写命令
IOCLR=1 << Flash_CE;
delay(1) ;
IOCLR=( 1 << Flash_WE); //写允许下降沿
delay(1) ;
IOSET=( 1 << Flash_WE);
delay(1) ;
if(cmd!=0x10)
IOCLR=(1 << Flash_CLE);
}
//////////////////////////////////////////////////////////////////////
//////////////写地址num是写地址的次数
//////////////////////////////////////////////////////////////////////
void flash_write_addr(uint32 addr,uint8 num)
{
uint8 Addr1[4];
uint8 i;
Addr1[0]=addr&0xff;
Addr1[1]=(addr>>8)&0xff;
Addr1[2]=(addr>>12)&0xff;
Addr1[3]=(addr>>20)&0xff;
IOSET=( 1 << Flash_ALE);
while(!(IO0PIN& (1 << Flash_RB)))
delay(1);
for(i=0;i<num;i++)
{ IO0PIN=(IO0PIN& (~(DATA)))|(uint32)(Addr1[i]<<8);
delay(1);
IOCLR=(1 << Flash_WE);
delay(1);
IOSET=( 1 << Flash_WE);
delay(1);
}
IOCLR= (1 << Flash_ALE);
}
//////////////////////////////////////////////////////////////////////
////////////////////////读数据WWRR=0读 wwwrr=1写
/////////////////////////////////////////////////////////////////
void flash_read_w(uint8 *string,uint32 rwnumber,uint8 wwrr)
{ uint32 G_s_Number;
if(wwrr==0)
IODIR&=~(DATA|(1 << Flash_RB));
while(!((IO0PIN) &(1 << Flash_RB)))
delay(1);
for(G_s_Number = 0 ; G_s_Number <rwnumber ; G_s_Number++)
{ if(wwrr==0)
{delay(1);
IOCLR= (1 << Flash_RE);
delay(1);
*string++ = ((DATA & IO0PIN)>>8);
IOSET=( 1 << Flash_RE);
}
else
{IO0PIN=(IO0PIN& (~(DATA)))|(*string++<<8);
delay(1);
IOCLR=(1 << Flash_WE);
delay(1);
IOSET= (1 << Flash_WE);
delay(1);
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////读状态
/////////////////////////////////////////////////////////////////////////////////////////////
void Flash_Read_STATUS(uint8 *String)
{init_flash();
IOCLR=(1 << Flash_CE);
flash_write_cmd(0x90);
flash_write_addr(0x00,1);
flash_read_w(String,4,0);
IOSET=(1 << Flash_CE);
}
//////////////////////////////////////////////////////////////////////////////////////////
///////////////////////这个读的
//////////////////////////////////////////////////////////////////////////////////////
void Flash_Read(uint32 addr,uint8 *String,uint32 ReadNumber)
{
init_flash();
IOCLR=(1 << Flash_CE);
while(!(IO0PIN& (1 << Flash_RB)))
delay(1);
flash_write_cmd(0x00);
flash_write_addr(addr,4);
flash_write_cmd(0x30);
flash_read_w(String,ReadNumber,0);
IOSET=(1 << Flash_CE);
}
////////////////////////////////////////////////////////
////////////////////////program
///////////////////////////////////////////////////////////
uint8 Flash_Program(uint32 Addr,uint8 *String, uint32 Bytes)
{
uint8 re[5];
init_flash();
IOCLR=(1 << Flash_CE);
while(!(IO0PIN& (1 << Flash_RB)))
delay(1);
flash_write_cmd(0x80);
flash_write_addr(Addr,4);
flash_read_w(String,Bytes,1);
flash_write_cmd(0x10);
while(!(( IO0PIN) & (1 << Flash_RB)))
delay(1);
flash_write_cmd(0x70);
flash_read_w(re,1,0);
if(re[0]==0)
{IOSET=(1 << Flash_CE);
return 0;
}
else
{IOSET=(1 << Flash_CE);
return 1;
}
}
//////////////////////////////////////////////////////////////
///////////擦除
/////////////////////////////////////////////////////////////
uint8 Flash_Erase(uint8 Block_High,uint8 Block_Low)
{ uint32 addr;
uint8 re[5];
init_flash();
IOCLR=(1 << Flash_CE);
while(!(IO0PIN& (1 << Flash_RB)))
delay(1);
flash_write_cmd(0x60);
addr=(Block_High<<8|Block_Low);
flash_write_addr(addr,2);
flash_write_cmd(0xd0);
while(!(IO0PIN & (1 << Flash_RB)))
delay(1);
flash_write_cmd(0x70);
flash_read_w(re,1,0);
if(re[0]==0)
{IOCLR=(1 << Flash_CE);
return 0;
}
else
{IOCLR=(1 << Flash_CE);
return 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -