⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.txt

📁 K9F1208U0M 的ALE、CLE分别由DSP 的A1 和A0 控制。DSP的低8位数据线直接与闪存的I/O0-I/O7 相连
💻 TXT
字号:
#define FLASH_D   (int *)0x08fff0;  //***************数据寄存器******************
#define FLASH_A  (int *) 0x08fff2;  //***************地址寄存器******************  
#define FLASH_C   (int *)0x08fff1;  //***************命令寄存器******************
int data[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//k9f1208uob最小周期60ns
void page_program_flash(int C_PageBin,int C_PageEnd,int C_BlockBin,int C_MaxBlock)   //页编程子程序
{   
      int i;
      int temp;
      int *FLASH_E;
      FLASH_E=FLASH_C; //写页编程命令80H,可将数据写入到FLASH缓冲区,  ALE=0,CLE=1 ,WE=0,CE=0
      *FLASH_E=0x80;
      delay(2);
      FLASH_E=FLASH_A;  //待编程存储器的地址ALE=1,CLE=0,WE=0
      *FLASH_E=C_PageBin;    //A0~A7
      delay(1);
      *FLASH_E=C_PageEnd;    //A9~A16
      delay(1);
      *FLASH_E=C_BlockBin;   //A17~A24
      delay(1);
      *FLASH_E=C_MaxBlock;   //A25
      delay(1);
      FLASH_E=FLASH_D;            //ALE=0,CLE=0,WE=0
      delay(1);  //延时10ns
      //for(i=0;i<5;i++)
      for(i=0;i<20;i++)
      {  *FLASH_E=i; 
        delay(4); }  //0--20数据送入缓冲区     
      //*FLASH_E=200;
      FLASH_E=FLASH_C;     //ALE=0,CLE=1 ,WE=0,CE=0
      *FLASH_E=0x10; 
      delay(6);
      while(GpioDataRegs.GPGDAT.bit.GPIOG4==0);       //检测R/B状态                  //R/B状态为DSP的90脚,请定义GPIO90
      do{    FLASH_E=FLASH_C;
             *FLASH_E=0x70;     //输入状态信息
             delay(1);
             FLASH_E=FLASH_D;   //数据返回信息                                                                                                                                                                                                               
             delay(4);            //延时50s
             temp=*FLASH_E;
             delay(1);
             temp=temp&0x41;
            }while(temp!=0x40);  //检测D0位  为1出错继续查询,0正常结束
     
}
void block_flash(int  C_blockbin,int C_Blockend,int C_MaxBlock)              //**************擦除块子程序****************
{    
      int temp;
     int *FLASH_E;
      FLASH_E=FLASH_C;
      *FLASH_E=0x60;
      delay(1);
      FLASH_E=FLASH_A;
      
      *FLASH_E=C_blockbin;    //A9~A16
      delay(1);
      *FLASH_E=C_Blockend;   //A17~A24
      delay(1);
      *FLASH_E=C_MaxBlock;   //A25   //块地址
      delay(1);
      FLASH_E=FLASH_C;
      *FLASH_E=0xd0;
      delay(1);
      while(GpioDataRegs.GPGDAT.bit.GPIOG4==0);  //检测R/B状态
     do{     FLASH_E=FLASH_C;
             *FLASH_E=0x70; 
             delay(1);
             FLASH_E=FLASH_D;
             delay(5);
             temp=*FLASH_E;
			 delay(1);
             temp=temp&0x41;
            }while(temp!=0x40);    //返回擦除信息
}
void page_read_flash(int C_PageBin,int C_PageEnd,int C_BlockBin,int C_MaxBlock)     //***************页读子程序**************
{    
      int i=0;
      int q=0;
      int *FLASH_E;
      
      FLASH_E=FLASH_C;
      *FLASH_E=0x00;
      delay(1);
      FLASH_E=FLASH_A;
      *FLASH_E=C_PageBin;    //A0~A7
      delay(1);
      *FLASH_E=C_PageEnd;    //A9~A16
      delay(1);
      *FLASH_E=C_BlockBin;   //A17~A24
      delay(1);
      *FLASH_E=C_MaxBlock;    //A25
	 
	  delay(1);
	  //while(GpioDataRegs.GPGDAT.bit.GPIOG4==0);  //检测R/B状态    
      FLASH_E=FLASH_D;
      delay(3);    //延时20ns
	  
	  
      for(i=0;i<20;i++)
      { data[q]=*FLASH_E;
      q++;
      delay(4); }    //数据从缓冲区输出
      FLASH_E=FLASH_C;
}
void inti_flash()             //***********初始化flash子程序*********
{     int *FLASH_E;
      FLASH_E=FLASH_C;
      *FLASH_E=0xff;
      delay(1);
}
void RD_flash_ID()             //***********读取flashID子程序*********
{     int i;
      int *FLASH_E;
      FLASH_E=FLASH_C;
      *FLASH_E=0x90;
	  for(i=0;i<20;i++)
      { data[i]=*FLASH_E;
      }    //数据从缓冲区输出
}
void delay(int n)
{int i;
 for(i=0;i<n;i++)
  {asm(" NOP");}
}
//         15路通道存储地址编码列表  调用前擦除相应块
//00 00 00 00	           //起始地址block0         15路通道A0---A25位地址
//00 40 01 00	           //起始地址block10
//00 80 02 00              //起始地址block20
//00 c0 03 00	           //起始地址block30
//00 00 05 00              //起始地址block40
//00 40 06 00              //起始地址block50
//00 80 07 00              //起始地址block60
//00 c0 08 00              //起始地址block70
//00 00 0a 00              //起始地址block80
//00 40 0b 00              //起始地址block90
//00 80 0c 00              //起始地址block100
//00 c0 0d 00              //起始地址block110
//00 00 0f 00              //起始地址block120
//00 40 0h 00              //起始地址block130
//00 80 11 00              //起始地址block140

void RWFLASH(int n)            //************写FLASH****************/
{     //inti_flash();    //初始化FLASH
      CACHUFLASH(n);
      switch(n)                         //选择相应块进行操作
      {case 0: page_program_flash(0x00,0x00,0x00,0x00);
	   break;
	   case 1: page_program_flash(0x00,0x40,0x01,0x00); 
	   break; 
       case 2: page_program_flash(0x00,0x80,0x02,0x00);
       break;  
       case 3: page_program_flash(0x00,0xc0,0x03,0x00); 
	   break;
	   case 4: page_program_flash(0x00,0x00,0x05,0x00);
	   break; 
	   case 5: page_program_flash(0x00,0x40,0x06,0x00);
	   break; 
	   case 6: page_program_flash(0x00,0x80,0x07,0x00); 
	   break;
	   case 7: page_program_flash(0x00,0xc0,0x08,0x00); 
	   break;
	   case 8: page_program_flash(0x00,0x00,0x0a,0x00); 
	   break;
	   case 9: page_program_flash(0x00,0x40,0x0b,0x00); 
	   break;
	   case 10: page_program_flash(0x00,0x80,0x0c,0x00); 
	   break;
	   case 11: page_program_flash(0x00,0xc0,0x0d,0x00); 
	   break;
	   case 12: page_program_flash(0x00,0x00,0x0f,0x00); 
	   break;
	   case 13: page_program_flash(0x00,0x40,0x10,0x00); 
	   break;
	   case 14: page_program_flash(0x00,0x80,0x11,0x00); 
	   break;
	  }
}
	   

void RDFLASH(int n)              //************读FLASH****************/
{     //inti_flash();
      switch(n)
      {case 0: page_read_flash(0x00,0x00,0x00,0x00);
	   break;
	   case 1: page_read_flash(0x00,0x40,0x01,0x00);
	   break;  
       case 2: page_read_flash(0x00,0x80,0x02,0x00); 
       break; 
       case 3: page_read_flash(0x00,0xc0,0x03,0x00); 
	   break;
	   case 4: page_read_flash(0x00,0x00,0x05,0x00);
	   break; 
	   case 5: page_read_flash(0x00,0x40,0x06,0x00);
	   break; 
	   case 6: page_read_flash(0x00,0x80,0x07,0x00);
	   break; 
	   case 7: page_read_flash(0x00,0xc0,0x08,0x00);
	   break; 
	   case 8: page_read_flash(0x00,0x00,0x0a,0x00); 
	   break;
	   case 9: page_read_flash(0x00,0x40,0x0b,0x00); 
	   break;
	   case 10: page_read_flash(0x00,0x80,0x0c,0x00);
	   break; 
	   case 11: page_read_flash(0x00,0xc0,0x0d,0x00);
	   break; 
	   case 12: page_read_flash(0x00,0x00,0x0f,0x00);
	   break; 
	   case 13: page_read_flash(0x00,0x40,0x10,0x00);
	   break; 
	   case 14: page_read_flash(0x00,0x80,0x11,0x00); 
	   break;
	  }
}
void CACHUFLASH(int n)                         //************擦除FLASH****************/
{     inti_flash();
      switch(n)
      {case 0:  block_flash(0x00,0x00,0x00);
	   break;
	   case 1:  block_flash(0x40,0x01,0x00);
	   break;  
       case 2:  block_flash(0x80,0x02,0x00); 
       break; 
       case 3:  block_flash(0xc0,0x03,0x00); 
	   break;
	   case 4:  block_flash(0x00,0x05,0x00); 
	   break;
	   case 5:  block_flash(0x40,0x06,0x00);
	   break; 
	   case 6:  block_flash(0x80,0x07,0x00); 
	   break;
	   case 7:  block_flash(0xc0,0x08,0x00);
	   break; 
	   case 8:  block_flash(0x00,0x0a,0x00);
	   break; 
	   case 9:  block_flash(0x40,0x0b,0x00);
	   break; 
	   case 10:  block_flash(0x80,0x0c,0x00);
	   break; 
	   case 11:  block_flash(0xc0,0x0d,0x00);
	   break; 
	   case 12:  block_flash(0x00,0x0f,0x00);
	   break; 
	   case 13:  block_flash(0x40,0x10,0x00);
	   break; 
	   case 14:  block_flash(0x80,0x11,0x00); 
	   break;
	  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -