📄 iap.c
字号:
//SST89e554 IAP
#include "reader.h"
#include "intrins.h"
#include "iap.h"
//extern void SoftReset();
//pdata unsigned char IAPbuffer[128]=0;
/*
unsigned char sector_erase(unsigned char byte_address) //扇区擦除
{
if (byte_address<0XE800) return 1;
SFCF=SFCF|0x40; //enable iap
SFAL=(unsigned char)(byte_address);
SFAH=(unsigned char)(byte_address>>8);
SFCM=SectorEase;
while(SFST&0X4)
{}
SFCF=SFCF&0xBF;
SFDT=0;
return 0;
} */
//byte_address 要写入数据单元的绝对地址
//*a 要写入数据起始地址
// i 数据长度
/*
unsigned char byte_pgm(unsigned int byte_address,unsigned char *a,unsigned char i) //字节编程
{
if (byte_address<0XE800) return 1;
SFCF=SFCF|0x40;
while(i)
{
SFAL=(unsigned char)(byte_address); //load low order address byte;
SFAH=(unsigned char)(byte_address>>8);//load HIGH order address byte;
SFDT=*a;
SFCM=ByteProgram;
while(SFST&0X4)
{}
SFCF=SFCF&0XBF;
SFDT=0;
SFCF =SFCF|0X40;
SFAL=(unsigned char)(byte_address); //load low order address byte;
SFAH=(unsigned char)(byte_address>>8);//load HIGH order address byte;
SFCM=ByteVerify;
_nop_();_nop_();_nop_();
if (SFDT^*a) return 1;
else
{a++;i--;byte_address++;}
}
SFCF=SFCF&0XBF;
SFDT=0;
return 0;
}
*/
unsigned char write_Flash(unsigned int byte_address, unsigned char *dat, unsigned char len)//sst Flash 扇区写入
{
unsigned char i;
unsigned char *buff;
int read_bytes=0;
if (byte_address<0XE800) return 1;
SFCF =SFCF | 0x40;
while (len)
{
// save sector data
SFAH=(unsigned char)(byte_address>>8);
SFAL=(unsigned char) (byte_address) & 0x80;
buff = &u_ram.IAPbuffer[0];
for (i=128; i>0; i--)
{
SFCM=ByteVerify;
_nop_();
*buff=SFDT ;
buff++;
SFAL++;
}
buff = &u_ram.IAPbuffer[0] + (((unsigned char)(byte_address)) & 0x7F);
//for (; buff<128; buff++)
for (; ; buff++)
{
*buff = *dat;
read_bytes++;
dat++;
if (--len == 0) break;
if (((read_bytes+byte_address)%128)==0) break;
}
// erase Sector
SFAH=(unsigned char)(byte_address>>8);
SFAL=(unsigned char) (byte_address) & 0x80;
SFCM=SectorEase;
while(SFST&0x04){}
// program data
SFAH=(unsigned char)(byte_address>>8);
SFAL=(unsigned char) (byte_address) & 0x80;
buff = &u_ram.IAPbuffer[0];
for (i=128; i>0; i--)
{
SFDT=*buff;
SFCM=ByteProgram;
while(SFST&0x04){}
buff++;
SFAL++;
}
byte_address = (byte_address & 0xFF80) + 0x80;
}
SFCF=SFCF&0xBF;
SFDT=0;
return 0;
}
/*
unsigned char read_Flash(unsigned int byte_address,unsigned char *a,unsigned char i) // sst Flash 读出
{
if (byte_address<0XE800) return 1;
SFCF =SFCF|0X40;
while(i)
{
SFAL=(unsigned char)(byte_address); //load low order address byte;
SFAH=(unsigned char)(byte_address>>8);//load HIGH order address byte;
SFCM=ByteVerify;
_nop_();_nop_();_nop_();
*a=SFDT ;
a++;i--;byte_address++;
}
SFCF=SFCF&0XBF;
SFDT=0;
return 0;
} */
/*unsigned char read_byte_Flash(unsigned int byte_address)
{ if (byte_address<0XE800) return 1;
SFCF =SFCF|0X40;
SFAL=(unsigned char)(byte_address); //load low order address byte;
SFAH=(unsigned char)(byte_address>>8);//load HIGH order address byte;
SFCM=ByteVerify;
_nop_();_nop_();_nop_();
return SFDT;
} */
void gotoisp()
{
WDT = 1;
WDRE = 0;
SFCF = 0;
// SoftReset();
(*(void(*)())0)();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -