⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iap.c

📁 很强的射频卡reader源代码
💻 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 + -