?? flash.txt
字號:
#define FLASH_D (int *)0x08fff0; //***************數(shù)據(jù)寄存器******************
#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,可將數(shù)據(jù)寫入到FLASH緩沖區(qū), 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數(shù)據(jù)送入緩沖區(qū)
//*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狀態(tài) //R/B狀態(tài)為DSP的90腳,請定義GPIO90
do{ FLASH_E=FLASH_C;
*FLASH_E=0x70; //輸入狀態(tài)信息
delay(1);
FLASH_E=FLASH_D; //數(shù)據(jù)返回信息
delay(4); //延時50s
temp=*FLASH_E;
delay(1);
temp=temp&0x41;
}while(temp!=0x40); //檢測D0位 為1出錯繼續(xù)查詢,0正常結(jié)束
}
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狀態(tài)
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狀態(tài)
FLASH_E=FLASH_D;
delay(3); //延時20ns
for(i=0;i<20;i++)
{ data[q]=*FLASH_E;
q++;
delay(4); } //數(shù)據(jù)從緩沖區(qū)輸出
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;
} //數(shù)據(jù)從緩沖區(qū)輸出
}
void delay(int n)
{int i;
for(i=0;i<n;i++)
{asm(" NOP");}
}
// 15路通道存儲地址編碼列表 調(diào)用前擦除相應(yīng)塊
//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) //選擇相應(yīng)塊進(jì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;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -