📄 dsp_flash.h
字号:
/*sp_flash.h*/
/*by lizw */
#ifndef DSP_FLASH_H
#define DSP_FLASH_H
volatile unsigned char *p_flashbuf=(volatile unsigned char*) 0x0940;
int connect_sms(int total_len,volatile unsigned char *p,int length){
int group_num;
int i;
group_num=(*p)&0x0f;
if(length>110)
length=110;
if(group_num>4)
return total_len;
if(group_num==0){
for(i=0;i<length-1;i++)
*(p_flashbuf+i)=*(p+i+1);
do{
if(i<108)
*(p_flashbuf+i)=0xff;
i++;
}while(i<109);
}
if(group_num!=0){
for(i=0;i<100;i++){
if(i<length-9)
*(p_flashbuf+group_num*100+9+i)=*(p+10+i);
else
*(p_flashbuf+group_num*100+9+i)=0xff;
}
}
if(length==0){
for(i=0;i<510;i++)
*(p_flashbuf+i)=0xff;
}
return 509;
}
void flash_buf(int k,int length){
volatile unsigned char *pdata=(volatile unsigned char*) 0xE000;
int a;
int i;
BYTE temp;
temp=g_flag;
g_flag=g_flag&0xF0;
g_flag=g_flag+0x08;
selectchip(g_flag);
a=k%2;
k=k/2;
if(a==0) {
for(i=0;i<length;i++)
*(pdata+i+k*0x0400)=*(p_flashbuf+i);
}
else{
for(i=0;i<length;i++)
*(p_flashbuf+i)=*(pdata+i+k*0x0400);
}
g_flag=temp;
selectchip(g_flag);
}
int flash_read(int i,volatile unsigned char *p,int a) {
int m,n;
volatile unsigned char *pdata=(volatile unsigned char*) 0x8000;
BYTE temp;
BYTE ch;
unsigned int kk_cmp;
temp=g_flag;
g_flag=g_flag&0xF0;
g_flag=g_flag+0x03;
selectchip(g_flag);
m=i/2;
n=i%2;
*pdata=m;
g_flag=g_flag&0xF0;
g_flag=g_flag+0x00;
selectchip(g_flag);
if(a==0){
m=0;
/*while(((*(pdata+n*0x4000+m))!=0xff)&&(m<510)){
*(p+m)=*(pdata+n*0x4000+m);
m++;
}*/
do{
ch=*(pdata+n*0x4000+m);
*(p+m)=ch;
m++;
if(m==86)
m=m+1-1;
kk_cmp=ch;
kk_cmp=kk_cmp&0x00ff;
}while((kk_cmp!=0xff)&&(m<511));
m--;
}
else{
for(i=0;i<509;i++)
*(p+i)=*(pdata+n*0x4000+i);
m=509;
}
g_flag=temp;
selectchip(g_flag);
return m;
}
////////////////////////////////////////////
int erase_sector(int i)
{
int m,n;
volatile unsigned char *pdata=(volatile unsigned char*) 0x8000;
BYTE read,flag1,flag2;
BYTE temp;
temp=g_flag;
g_flag=g_flag&0xF0;
g_flag=g_flag+0x03;
selectchip(g_flag);
m=i/2;
n=i%2;
*pdata=m;
g_flag=g_flag&0xF0;
g_flag=g_flag+0x00;
selectchip(g_flag);
*(pdata+0x0555)=0xaa;
*(pdata+0x02aa)=0x55;
*(pdata+0x0555)=0x80;
*(pdata+0x0555)=0xaa;
*(pdata+0x02aa)=0x55;
///////////// ???????????????????????????
*pdata=0x30;
read=*pdata;
flag1=read&0x80;
flag2=read&0x20;
while(flag1!=0x80)
{
if(flag2==0x20)
{
*pdata=0xf0;
return 0;
}
read=*pdata;
flag1=read&0x80;
flag2=read&0x20;
}
///////////////////////////////////////////////
return 1;
}
//////////////////////////////////////////////
int write_one(int i,volatile unsigned char *p,int length){
int m,n,j;
volatile unsigned char *pdata=(volatile unsigned char*) 0x8000;
BYTE temp;
BYTE writedata,read;
BYTE flag1,flag2,flag3;
temp=g_flag;
g_flag=g_flag&0xF0;
g_flag=g_flag+0x03;
selectchip(g_flag);
m=i/2;
n=i%2;
j=n;
*pdata=m;
g_flag=g_flag&0xF0;
g_flag=g_flag+0x00;
selectchip(g_flag);
for(m=0;m<length;m++){
pdata=(volatile unsigned char*) 0x8555;
*pdata=0xaa;
pdata=(volatile unsigned char*) 0x82AA;
*pdata=0x55;
pdata=(volatile unsigned char*) 0x8555;
*pdata=0xa0;
writedata=*(p+m); //接受数据
flag3=writedata&0x80;
pdata=(volatile unsigned char*) 0x8000;
*(pdata+n*0x4000+m) = writedata;
read=*(pdata+j*0x4000+m);
flag1=read&0x80;
flag2=read&0x20;
while(flag1!=flag3){
if(flag2==0x20){
*(pdata+j*0x4000+m)=0xf0;
g_flag=temp;
selectchip(g_flag);
return 0;
}
read=*(pdata+j*0x4000+m);
flag1=read&0x80;
flag2=read&0x20;
}
}////////////////for
g_flag=temp;
selectchip(g_flag);
return 1;
}
//////////////////////////////////////////////////////////////
void flash_write(int i,volatile unsigned char *p,int length ) //i=0,1,2……,123.
{
int k,m,a,num[4];
chg_speed(0x07);
k=i/4;
k=k*4;
m=i%4;
for(a=0;a<4;a++){
num[a]=flash_read((k+a),p_flashbuf,1);
flash_buf(2*a,num[a]);
}
erase_sector(i);
for(a=0;a<4;a++){
if(a!=m){
flash_buf(2*a+1,num[a]);
write_one((k+a),p_flashbuf,num[a]);
}
else{
flash_buf(2*a+1,num[a]);
connect_sms(num[a],p,length);
write_one(i,p_flashbuf,509);
}
}
chg_speed(0x00);
}
////////////////////////////////////////////////////
void flash_write_old(int i,volatile unsigned char *p,int length ) //i=0,1,2……,123.
{
int k,m,a,num[4];
chg_speed(0x07);
k=i/4;
k=k*4;
m=i%4;
for(a=0;a<4;a++){
num[a]=flash_read((k+a),p_flashbuf,0);
flash_buf(2*a,num[a]);
}
erase_sector(i);
for(a=0;a<4;a++){
if(a!=m){
flash_buf(2*a+1,num[a]);
write_one((k+a),p_flashbuf,num[a]);
}
else{
flash_buf(2*a+1,num[a]);
// write_one(i,p_flashbuf,length); 可能出错了
write_one(i,p,length);
}
}
chg_speed(0x00);
}
////////////////////////////////////////////
void fac_reset(int a){
int i;
for(i=0;i<a;i=i+2){
erase_sector(i);
}
}
///////////////////////////////////////
#ifdef _FAC_TEST
int flash_read_Ext(int i,volatile unsigned char *p,int a) {
int m,n;
volatile unsigned char *pdata=(volatile unsigned char*) 0x8000;
BYTE temp;
BYTE ch;
unsigned int kk_cmp;
temp=g_flag;
g_flag=g_flag&0xF0;
g_flag=g_flag+0x03;
selectchip(g_flag);
m=i/2;
n=i%2;
*pdata=m;
g_flag=g_flag&0xF0;
g_flag=g_flag+0x00;
selectchip(g_flag);
for(m=0;m<512;m++)
*(p+m)=*(pdata+n*0x4000+a*0x0200+m);
g_flag=temp;
selectchip(g_flag);
return m;
}
////////////////////////////////////////////
int save_cartoon(){
long m;
int i,n,nn;
volatile unsigned char *pdata=(volatile unsigned char*) 0x8000;
BYTE temp;
BYTE writedata,read;
BYTE flag1,flag2,flag3;
erase_sector(4);
chg_speed(7);
temp=g_flag;
for(m=0;m<0xffff;m++){
g_flag=g_flag&0xF0;
g_flag=g_flag+0x03;
selectchip(g_flag);
i=m/0x8000;
*pdata=i+2;
g_flag=g_flag&0xF0;
g_flag=g_flag+0x00;
selectchip(g_flag);
n=m/0x0800;
nn=n%8;
pdata=(volatile unsigned char*) 0x8555;
*pdata=0xaa;
pdata=(volatile unsigned char*) 0x82AA;
*pdata=0x55;
pdata=(volatile unsigned char*) 0x8555;
*pdata=0xa0;
if((m%16)==((n/8)%16))
writedata=(1<<nn); //接受数据
else
writedata=0x00;
flag3=writedata&0x80;
pdata=(volatile unsigned char*) 0x8000;
*(pdata+(m%0x8000)) = writedata;
read=*(pdata+(m%0x8000));
flag1=read&0x80;
flag2=read&0x20;
while(flag1!=flag3){
if(flag2==0x20){
*(pdata+(m%0x8000))=0xf0;
g_flag=temp;
selectchip(g_flag);
return 0;
}
read=*(pdata+(m%0x8000));
flag1=read&0x80;
flag2=read&0x20;
}
}////////////////for
g_flag=temp;
selectchip(g_flag);
chg_speed(0);
return 1;
/////////////////////
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -