📄 iflash.c
字号:
/*
*********************************************************************************************************
* Flash(internal) Driver for C8051F340 MCU
* version 1.0
* File : iflash.c
* By : ZJP 2008/07/28
*********************************************************************************************************
*/
#include "C8051F340.h"
#include <stdio.h>
#include <absacc.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long int
void iflashBlockErase(uint blockAddress)
{
uchar data EA_Flag = 0;
char xdata * data pwrite;
if(EA == 1)
{
EA=0; // 关所有中断
EA_Flag = 1;
}
pwrite=(char xdata *)blockAddress;
FLKEY=0xA5;
FLKEY=0xF1;
PSCTL|=0x03; //PSEE=1,PSWE=1
*pwrite=0;
PSCTL&=~0x03; //PSEE=0,PSWE=0
if(EA_Flag == 1)
EA=1; // 开中断
else
EA = 0;
}
void iflashByteWrite(uchar *bytedata,uint addr,uint length)
{
uchar EA_Flag = 0;
int i;
uchar xbfdata;
//data unsigned char idata *pread; // 源地址只能是内部的存储器
char xdata * idata pread;
char xdata * data pwrite; // 目的数据指向FLASH的地址指针
pread=bytedata;
pwrite=(char xdata *)addr;
//iflashBlockErase(addr);
if(EA == 1)
{
EA=0; // 关所有中断
EA_Flag = 1;
}
PFE0CN=PFE0CN&0xfe; // FLBWE=0;
PSCTL|=0x01;
PSCTL&=0xfd; //PSWE=1,PSEE=0
for(i=length;i>0;i--)
{
FLKEY=0xA5;
FLKEY=0xF1;
xbfdata=*pread;
*pwrite=xbfdata;
pread++;
pwrite++;
}
PSCTL&=0xfe; //PSWE=0,PSEE=0
if(EA_Flag == 1)
EA=1; // 开中断
else
EA = 0;
}
/*void iflashWordWrite(uchar *bytedata,uint addr,uint length)
{
uchar EA_Flag = 0;
data unsigned char idata *pread; // 源地址只能是内部的存储器
char xdata * data pwrite; // 目的数据指向FLASH的地址指针
int i;
pread=bytedata;
pwrite=(char xdata *)addr;
if(EA == 1)
{
EA=0; // 关所有中断
EA_Flag = 1;
}
PFE0CN=PFE0CN|0x01; // FLBWE=1;
PSCTL|=0x01;
PSCTL&=0xfd; //PSWE=1,PSEE=0
for(i=length;i>0;i-2)
{
FLKEY=0xA5;
FLKEY=0xF1;
*pwrite++=*pread++; //必须为偶地址
FLKEY=0xA5;
FLKEY=0xF1;
*pwrite++=*pread++;
}
PSCTL&=0xfe; //PSWE=0,PSEE=0
if(EA_Flag == 1)
EA=1; // 开中断
else
EA = 0;
}*/
void iflashRead(uchar *bytedata,uint addr,uint length)
{
int i;
uchar EA_Flag = 0;
char code * data pread; // 程序存储器空间的指针(Flash),指向待读地址
char xdata *idata pwrite; // 数据的指针
pwrite=bytedata;
/*if(EA == 1)
{
EA=0; // 关所有中断
EA_Flag = 1;
}*/
pread=(char code *)addr;
for(i=length;i>0;i--)
*pwrite++=*pread++;
/*if(EA_Flag == 1)
EA=1; // 开中断
else
EA = 0;*/
}
uchar iflashReadByte(uint addr)
{
int i;
uchar EA_Flag = 0;
char code * data pread; // 程序存储器空间的指针(Flash),指向待读地址
uchar idata pwrite; // 数据的指针
if(EA == 1)
{
EA=0; // 关所有中断
EA_Flag = 1;
}
pread=(char code *)addr;
pwrite=*pread;
if(EA_Flag == 1)
EA=1; // 开中断
else
EA = 0;
return(pwrite);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -