📄 flash.c
字号:
#include "myfile.h"
uchar far rg_Flash1_addr _at_ 0x800000;
uchar far rg_Flash1_aaa _at_ 0x800aaa;
uchar far rg_Flash1_555 _at_ 0x800555;
uchar far rg_Flash2_addr _at_ 0x800000;
uchar far rg_Flash2_aaa _at_ 0xa00aaa;
uchar far rg_Flash2_555 _at_ 0xa00555;
uchar FlashProgram(ulong addr,uchar cshu);
uchar FlashErase(ulong addr);
uchar FlashBlockErase(ulong addr);
uchar FlashEraseChip(ulong addr);
void FlashReadGroup(ulong cl_AddrStar,uchar *pcl_DataStar,uchar cl_Len);
uchar FlashProgramGroup(ulong cl_AddrStar,uchar *pcl_DataStar,uchar cl_Len);
extern void delay(uchar shu);
////////////////////////////////////////////////////////
//返回值 =0 ---操作正确
// !=0 ---操作失败
///////////////////////////////////////////////////////
uchar FlashProgram(ulong addr,uchar cshu)
{
uchar cl_Buffer1;
uchar cl_Return;
uchar far *prl_Flash1;
uchar far *prl_Flash2;
uint cl_Count;
//初始化返回值//
cl_Return = 0x55;
prl_Flash1 = &rg_Flash1_addr;
prl_Flash2 = &rg_Flash1_addr;
cl_Buffer1 = P4;
cl_Buffer1 &= 0x4;
if(cl_Buffer1 != 0)
{
if(addr < 200000)
{
prl_Flash1 = &rg_Flash1_aaa;
*prl_Flash1 = 0xaa;
prl_Flash1 = &rg_Flash1_555;
*prl_Flash1 = 0x55;
prl_Flash1 = &rg_Flash1_aaa;
*prl_Flash1 = 0xa0;
prl_Flash1 = &rg_Flash1_addr;
prl_Flash1 += addr;
*prl_Flash1 = cshu;
cl_Count = 0x0;
do
{
cl_Buffer1 = P4;
cl_Buffer1 &= 0x4;
}while ((cl_Buffer1 == 0) && (cl_Count < 65535));
if(cl_Count > 65534)
{
cl_Buffer1 = *prl_Flash1;
cl_Buffer1 &= 0x20;
if(cl_Buffer1 != 0)
{
cl_Return = 0x55;
}
else
{
cl_Return = 0x0;
}
}
else
{
cl_Return = 0x0;
}
}
else
{
prl_Flash2 = &rg_Flash2_aaa;
*prl_Flash2 = 0xaa;
prl_Flash2 = &rg_Flash2_555;
*prl_Flash2 = 0x55;
prl_Flash2 = &rg_Flash2_aaa;
*prl_Flash2 = 0xa0;
prl_Flash2 = &rg_Flash2_addr;
prl_Flash2 += addr;
*prl_Flash2 = cshu;
cl_Count = 0x0;
do
{
cl_Buffer1 = P4;
cl_Buffer1 &= 0x4;
}while ((cl_Buffer1 == 0) && (cl_Count < 65535));
if(cl_Count > 65534)
{
cl_Buffer1 = *prl_Flash2;
cl_Buffer1 &= 0x20;
if(cl_Buffer1 != 0)
{
cl_Return = 0x55;
}
else
{
cl_Return = 0x0;
}
}
else
{
cl_Return = 0x0;
}
}
}
return(cl_Return);
}
//////////////////////////////////////////////////////
//
//
//////////////////////////////////////////////////////
uchar FlashEraseChip(ulong addr)
{
uchar cl_Buffer1;
uchar cl_Return;
uchar far *prl_Flash1;
uchar far *prl_Flash2;
prl_Flash1 = &rg_Flash1_addr;
prl_Flash2 = &rg_Flash1_addr;
cl_Buffer1 = P4;
cl_Buffer1 &= 0x4;
//返回值预置为无效值//
cl_Return = 0x55;
if(cl_Buffer1 != 0)
{
if(addr > 0x200000)
{
prl_Flash1 = &rg_Flash1_aaa;
*prl_Flash1 = 0xaa;
prl_Flash1 = &rg_Flash1_555;
*prl_Flash1 = 0x55;
prl_Flash1 = &rg_Flash1_aaa;
*prl_Flash1 = 0x80;
*prl_Flash1 = 0xaa;
prl_Flash1 = &rg_Flash1_555;
*prl_Flash1 = 0x55;
prl_Flash1 = &rg_Flash1_aaa;
*prl_Flash1 = 0x10;
delay(100);
//judg erase over
do
{
cl_Buffer1 = P4;
cl_Buffer1 &= 0x4;
}while (cl_Buffer1 == 0);
}
else
{
prl_Flash2 = &rg_Flash2_aaa;
*prl_Flash2 = 0xaa;
prl_Flash2 = &rg_Flash2_555;
*prl_Flash2 = 0x55;
prl_Flash2 = &rg_Flash2_aaa;
*prl_Flash2 = 0x80;
*prl_Flash2 = 0xaa;
prl_Flash2 = &rg_Flash2_555;
*prl_Flash2 = 0x55;
prl_Flash2 = &rg_Flash2_aaa;
*prl_Flash2 = 0x10;
delay(100);
//judg erase over
do
{
cl_Buffer1 = P4;
cl_Buffer1 &= 0x4;
}while (cl_Buffer1 == 0);
}
}
return(cl_Return);
}
///////////////////////////////////////////////////////
//
//
///////////////////////////////////////////////////////
uchar FlashBlockErase(ulong addr)
{
uchar cl_Buffer1;
uchar cl_Return;
uchar far *prl_Flash1;
uchar far *prl_Flash2;
prl_Flash1 = &rg_Flash1_addr;
prl_Flash2 = &rg_Flash2_addr;
cl_Buffer1 = P4;
cl_Buffer1 &= 0x4;
//返回值预置为无效值//
cl_Return = 0x55;
if(cl_Buffer1 != 0)
{
if(addr > 0x200000)
{
prl_Flash1 = &rg_Flash1_aaa;
*prl_Flash1 = 0xaa;
prl_Flash1 = &rg_Flash1_555;
*prl_Flash1 = 0x55;
prl_Flash1 = &rg_Flash1_aaa;
*prl_Flash1 = 0x80;
*prl_Flash1 = 0xaa;
prl_Flash1 = &rg_Flash1_555;
*prl_Flash1 = 0x55;
prl_Flash1 = &rg_Flash1_addr;
prl_Flash1 += addr;
*prl_Flash1 = 0x30;
delay(1);
//judg erase over
do
{
cl_Buffer1 = P4;
cl_Buffer1 &= 0x4;
}while (cl_Buffer1 == 0);
}
else
{
prl_Flash2 = &rg_Flash2_aaa;
*prl_Flash2 = 0xaa;
prl_Flash1 = &rg_Flash2_555;
*prl_Flash2 = 0x55;
prl_Flash2 = &rg_Flash2_aaa;
*prl_Flash2 = 0x80;
*prl_Flash2 = 0xaa;
prl_Flash2 = &rg_Flash1_555;
*prl_Flash2 = 0x55;
prl_Flash2 = &rg_Flash2_addr;
prl_Flash2 += addr;
*prl_Flash2 = 0x30;
delay(1);
//judg erase over
do
{
cl_Buffer1 = P4;
cl_Buffer1 &= 0x4;
}while (cl_Buffer1 == 0);
}
}
return(cl_Return);
}
///////////////////////////////////////////////////////
//返回值 =0 ---操作正确
// !=0 ---操作失败
///////////////////////////////////////////////////////
/*
uchar ProgramJudgFlash1(uchar cshu)
{
uchar far *prl_Flash1;
uchar cl_Status1;
uchar cl_Status2;
uchar cl_Return;
prl_Flash1 = &rg_Flash1_addr;
do
{
delay(1);
cl_Status1 = *prl_Flash1;
cl_Status2 = cl_Status1;
//DQ7 poll bit
cl_Status1 &= 0x80;
cshu &= 0x80;
//DQ5 error bit
cl_Status2 &= 0x20;
if(cl_Status1 == cshu)
{
cl_Return = 0;
}
else if(cl_Status2 != 0)
{
cl_Status1 = *prl_Flash1;
cl_Status1 &= 0x80;
if(cl_Status1 == cshu)
{
cl_Return = 0;
}
else
{
cl_Return = 0x55;
}
//reset error
*prl_Flash1 = 0xf0;
}
//判断是否写完("cl_Status" flash的状态寄存器)
} while((cl_Status1 != cshu) && (cl_Status2 == 0));
return(cl_Return);
}
*/
//////////////////////////////////////////////////////////
//返回值 =0 ---操作正确
// !=0 ---操作失败
/////////////////////////////////////////////////////////
/*
uchar ProgramJudgFlash2(uchar cshu)
{
uchar far *prl_Flash2;
uchar cl_Status1;
uchar cl_Status2;
uchar cl_Return;
prl_Flash2 = &rg_Flash1_addr;
do
{
cl_Status1 = *prl_Flash2;
cl_Status2 = cl_Status1;
//DQ7 poll bit
cl_Status1 &= 0x80;
cshu &= 0x80;
//DQ5 error bit
cl_Status2 &= 0x20;
if(cl_Status1 == cshu)
{
cl_Return = 0;
}
else if(cl_Status2 != 0)
{
cl_Status1 = *prl_Flash2;
cl_Status1 &= 0x80;
if(cl_Status1 == cshu)
{
cl_Return = 0;
}
else
{
cl_Return = 0x55;
}
//reset error
*prl_Flash2 = 0xf0;
}
//判断是否写完("cl_Status" flash的状态寄存器)
} while((cl_Status1 != cshu) && (cl_Status2 == 0));
return(cl_Return);
}
*/
////////////////////////////////////////////////////////////////
//
//
///////////////////////////////////////////////////////////////
void FlashReadGroup(ulong cl_AddrStar,uchar *pcl_DataStar,uchar cl_Len)
{
uchar i;
uchar cl_Buffer1;
uchar far *prl_Flash1;
uchar far *prl_Flash2;
prl_Flash1 = &rg_Flash1_addr;
prl_Flash2 = &rg_Flash2_addr;
cl_Buffer1 = P4;
cl_Buffer1 &= 0x4;
if(cl_Buffer1 != 0)
{
if(cl_AddrStar < 0x1fffff)
{
// reset read mode
*prl_Flash1 = 0xf0;
prl_Flash1 += cl_AddrStar;
for(i = 0;i < cl_Len;i ++)
{
*pcl_DataStar = *prl_Flash1;
prl_Flash1 ++;
pcl_DataStar ++;
}
}
else
{
// reset read mode
*prl_Flash2 = 0xf0;
prl_Flash2 += cl_AddrStar;
for(i = 0;i < cl_Len;i ++)
{
*pcl_DataStar = *prl_Flash2;
prl_Flash2 ++;
pcl_DataStar ++;
}
}
}
}
/////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////
uchar FlashProgramGroup(ulong cl_AddrStar,uchar *pcl_DataStar,uchar cl_Len)
{
uchar i;
uchar cl_Buffer;
for(i = 0;i < cl_Len;i ++)
{
cl_Buffer = FlashProgram(cl_AddrStar,*pcl_DataStar);
pcl_DataStar ++;
cl_AddrStar ++;
}
return (cl_Buffer);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -