📄 针对两种flash所写的读写程序.txt
字号:
针对两种flash所写的读写程序
公布我原来写的针对两种flash所写的读写程序,用的单片机是51系列!
/*
;***************************************************************************
; JUE TEAM.
;***************************************************************************
Revision History:
Rev Date Author
____________________________________________________________________________
1.0 2002/10/3 JUEZHU
Build.
flash operation service routines.
;---------------------------------------------------------------------------
*/
/**********************
* INCLUDE FILES *
**********************/
#include "global.h"
#ifdef W516REG
#include "w516reg.h"
#else
#include "w58reg.h"
#endif
#include "comm.h"
#include "lcd.h"
#include "flash.h"
/**********************
* IMPORTED DATA *
**********************/
UINT8 ddat;
/**********************
* LOCAL MACROS *
**********************/
#define BANKSIZE 0x2000
#define FLASHCS 0xe000
/**********************
* FUNCTION PROTOTYPES *
**********************/
#ifdef FLASH29C40 //for 29c040
/*********************************************************
* NAME : protect()
* read one byte from watchdog X5045.
*
* Returns : mbByte
*
* Parameter Description
* --------------------------------------------------------
* Externals Usage
* --------------------------------------------------------
* Additional information:
* none
*********************************************************/
void protect(void)
{
//load data AAH into address 0x5555h
P4=0x02;
P1=0x00;
XBYTE[0xF555]=0xaa;
//load data 55H into address 0x2AAAh
P4=0x01;
P1=0x00;
XBYTE[0xEAAA]=0x55;
//load data AAH into address 0x5555h
P4=0x02;
P1=0x00;
XBYTE[0xF555]=0xa0;
}
/*********************************************************
* NAME : FlashWriteSector()
* write one setor to the flash AT29C040A
*
* Returns : NONE
*
* Parameter Description
* --------------------------------------------------------
*tdwAddr the wroten address of the flash
*tbDataStr data string
* Externals Usage
* --------------------------------------------------------
* Additional information:
* none
*********************************************************/
void FlashWriteSector(UINT32 tdwAddr,UINT8 *tbDataStr)
{
UINT8 mbBank;
UINT16 mwRamOffset;
UINT16 i;
BIT flaga;
flaga=EA;
EA=0;
mwRamOffset=tdwAddr%BANKSIZE;
mbBank=tdwAddr/BANKSIZE;
mwRamOffset|=0xE000;
protect();
for(i=0;i<256;i++)
{
P4=mbBank&0x0f;
P1=mbBank>>4;
XBYTE[mwRamOffset]=*tbDataStr;
tbDataStr++;
mwRamOffset++;
}
DelayMS(40);
EA=flaga;
}
/*********************************************************
* NAME : FlashReadSector()
* read one setor from flash AT29C040A.
*
* Returns : NONE
*
* Parameter Description
* --------------------------------------------------------
*tdwAddr the start address of the sector
*tbDataBuf data buffer for storage
* Externals Usage
* --------------------------------------------------------
* Additional information:
* none
*********************************************************/
void FlashReadSector(UINT32 tdwAddr,UINT8 *tbDataBuf)
{
UINT8 mbBank;
UINT16 mwRamOffset;
UINT16 i;
mwRamOffset=tdwAddr%BANKSIZE;
mbBank=tdwAddr/BANKSIZE;
mwRamOffset|=0xE000;
for(i=0;i<256;i++)
{
P4=mbBank&0x0f;
P1=mbBank>>4;
*tbDataBuf=XBYTE[mwRamOffset];
tbDataBuf++;
mwRamOffset++;
}
}
#else//for 28sf040
void protect(void)
{
UINT8 result;
//read the address:1823h,1820h,1822h,0418h,041bh,0419h,041ah
P4=0x00;
P1=0x00;
result=XBYTE[FLASHCS|0x1823];
result=XBYTE[FLASHCS|0x1820];
result=XBYTE[FLASHCS|0x1822];
result=XBYTE[FLASHCS|0x0418];
result=XBYTE[FLASHCS|0x041b];
result=XBYTE[FLASHCS|0x0419];
result=XBYTE[FLASHCS|0x041a];
}
/*byte program instruct:0x10*/
void FlashWriteSector(UINT32 tdwAddr,UINT8 *tbDataStr)
{
UINT8 mbBank;
UINT16 mwRamOffset;
UINT16 i;
BIT flaga;
flaga=EA;
EA=0;
mwRamOffset=tdwAddr%BANKSIZE;
mbBank=tdwAddr/BANKSIZE;
mwRamOffset|=0xE000;
protect();
P4=mbBank&0x0f;
P1=mbBank>>4;
for(i=0;i<256;i++)
{
//P4=mbBank&0x0f;
//P1=mbBank>>4;
XBYTE[mwRamOffset]=0x10;
XBYTE[mwRamOffset]=*tbDataStr;
tbDataStr++;
mwRamOffset++;
}
//DelayMS(10);
EA=flaga;
}
void FlashReadSector(UINT32 tdwAddr,UINT8 *tbDataBuf)
{
UINT8 mbBank;
UINT16 mwRamOffset;
UINT16 i;
mwRamOffset=tdwAddr%BANKSIZE;
mbBank=tdwAddr/BANKSIZE;
mwRamOffset|=0xE000;
P4=mbBank&0x0f;
P1=mbBank>>4;
for(i=0;i<256;i++)
{
//P4=mbBank&0x0f;
//P1=mbBank>>4;
*tbDataBuf=XBYTE[mwRamOffset];
tbDataBuf++;
mwRamOffset++;
}
}
#endif
/*********************************************************
* NAME : DelayMS()
* delay for tbTick ms for finish to write one sector.
*
* Returns : none
*
* Parameter Description
* --------------------------------------------------------
* tbTick how much milisecond
* Externals Usage
* --------------------------------------------------------
* Additional information:
* none
*********************************************************/
void DelayMS(UINT8 tbTick)
{
UINT8 mbcount;
UINT8 j;
for(j=0;j<tbTick;j++)
{
for(mbcount=0;mbcount<52;mbcount++)
{
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -