📄 flash.c
字号:
#include <glodef.h>
#define BASE 0x01400000
unsigned int Flash_Program(unsigned char * Program_Addr, unsigned char *Source);
unsigned int polling(unsigned char data, unsigned char *address);
unsigned int Flash_Program(unsigned char * Program_Addr, unsigned char *Source)
{
unsigned char * Flash_Addr;
unsigned char data;
unsigned int return_code, Cmd_Addr;
Cmd_Addr = (0x555 << 2);
Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
data = 0xAA;
*Flash_Addr = data;
Cmd_Addr = (0x2aa << 2);
Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
data = 0x55;
*Flash_Addr = data;
Cmd_Addr = (0x555<< 2);
Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
data = 0xA0;
*Flash_Addr = data;
Flash_Addr = (unsigned char*)(BASE + Program_Addr);
data = *Source;
*Flash_Addr = data;
return_code = polling(data, Flash_Addr);
return return_code;
}
/**************************************************************************/
/* polling(): */
/* */
/* NOTE: polling till the command is finished */
/* INPUT : the address location and the data written on the flash */
/* OUTPUT : result of polling (1 for pass and 0 for fail ) */
/* */
/**************************************************************************/
unsigned int polling(unsigned char data, unsigned char *address)
{
unsigned int return_code;
unsigned char *ptr;
unsigned char temp;
ptr = address;
/*data &= 0x80;*/
while(1)
{
temp = *ptr;
if((temp & 0x80) == (data & 0x80)) /* check whether DQ7 = data */
{
return_code = 1; /* if 'yes', PASS */
break;
}
else if((temp & 0x20) == (data & 0x20)) /* chech whether time is out, DQ5 = 1 --> timeout */
{
if((*ptr & 0x80) == data)
return_code = 1;
else
return_code = 0;
break;
}
}
return return_code;
} /* Polling End */
unsigned int Flash_Erash_Chip()
{
unsigned char * Flash_Addr;
unsigned char cmd;
unsigned int return_code,Cmd_Addr;
Cmd_Addr = (0x555 << 2);
Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
cmd = 0xAA;
*Flash_Addr = cmd;
Cmd_Addr = (0x2AA << 2);
Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
cmd = 0x55;
*Flash_Addr = cmd;
Cmd_Addr = (0x555<<2);
Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
cmd = 0x80;
*Flash_Addr = cmd;
Cmd_Addr = (0x555<<2);
Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
cmd = 0xAA;
*Flash_Addr = cmd;
Cmd_Addr = (0x2AA<<2);
Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
cmd = 0x55;
*Flash_Addr = cmd;
Cmd_Addr = (0x555<<2);
Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
cmd = 0x10;
*Flash_Addr = cmd;
return_code = polling(0xFF, Flash_Addr);
return return_code;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -