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

📄 epp.c

📁 93c46(56,66)的读写程序,包含有读写一个字节
💻 C
字号:
#include "fd_txr.h"

#define set_read_epp_addr(d)	 set_epp_opcode_addr(EP_READ,d)
#define set_write_epp_addr(d)	 set_epp_opcode_addr(EP_WR,d)


void read_eep();
void wen_eep();
void wds_eep();
void eral_eep();
void prog_eep();
void ep_poweron();
void ep_poweroff();
void enable_ep();
void out_ep8bit();
void out_ep16bit(uint send_d);
uchar in_ep8bit();
uint in_ep16bit();
void disable_ep();
void ep_clk();
void ep_clk8();
void read_eep_data(uchar addr, uchar type, uchar *out );
void write_eep_data(uchar addr, uchar type, uchar *out );
void write_eep_word(uchar addr , uchar *out);
void delay_us(uint dd);
void out_epdata(uint send_d,uchar nbit );
uint cal_chksum(uchar *p, uint cnt);
void set_epp_opcode_addr(uint opcode, uint addr);
uint read_epp_ptr(uint addr, uchar *ptr, uint cnt);
uint write_epp_ptr(uint addr, uchar *ptr, uint cnt);
void enable_epp_if();
void disable_epp_if();


uchar ep_device ;
uchar tx_data;
uchar ep_data ;
uint ep_dataw ;
uint ep_opcode ;

void wen_eep(){
	enable_epp_if();
				set_epp_opcode_addr(EP_WREN,0);
				disable_ep();
				ep_clk();
	disable_epp_if();
}

void wds_eep(){
	enable_epp_if();
				set_epp_opcode_addr(EP_WDS,0);
				disable_ep();
				ep_clk();
	disable_epp_if();

}

void eral_eep(){
	enable_epp_if();
				ep_poweron();
				set_epp_opcode_addr(EP_ERAL,0);
				disable_ep();
				ep_clk();
				delay_ms(10);
				//delay_us(10000);
				ep_poweroff();
	disable_epp_if();
}

void prog_eep(){
}

void enable_epp_if(){
//		return ;
//#define CODEC_FSR		P3.0
//#define CODEC_CLK_AUX	P3.1
//#define P32_NC		P3.2
//#define P33_NC		P3.3
//#define PWM0			P3.4	
//#define PWM1			P3.5
//#define P3_NC			P3.6
//#define EP_CS			P3.7
		PM3.7 = 0;
		PU3.7 = 1;
		SET_EP_CS();
// P3 : 01001111
//#define NRF_CSN			P10.0	
//#define NRF_PWR			P10.1	
//#define NRF_TXR_CE		P10.2	
//#define NRF_TX_EN		P10.3	
//#define NOK_LCD_DC 		P10.4	
//#define NOK_LCD_CLK  	P10.5
//#define NOK_LCD_DAT 	P10.6
//#define NOK_LCD_CS 		P10.7 
//#define EP_DIO			P10.6
//#define EP_CLK			P10.5
// 010000000
		PM10.6=PM10.7=0;
		RST_EP_CLK();
		SET_EP_DO();
	
}


void disable_epp_if(){
		return ;
//#define CODEC_FSR		P3.0
//#define CODEC_CLK_AUX	P3.1
//#define P32_NC		P3.2
//#define P33_NC		P3.3
//#define PWM0			P3.4	
//#define PWM1			P3.5
//#define P3_NC			P3.6
//#define EP_CS			P3.7
		PM3.7 = 1;
		PU3.7 = 0;
		RST_EP_CS();
// P3 : 01001111
//#define NRF_CSN			P10.0	
//#define NRF_PWR			P10.1	
//#define NRF_TXR_CE		P10.2	
//#define NRF_TX_EN		P10.3	
//#define NOK_LCD_DC 		P10.4	
//#define NOK_LCD_CLK  	P10.5
//#define NOK_LCD_DAT 	P10.6
//#define NOK_LCD_CS 		P10.7 
//#define EP_DIO			P10.6
//#define EP_CLK			P10.5
// 010000000
		PM10.6=PM10.7=1;
		RST_EP_CLK();
		RST_EP_DO();
}


void ep_poweron(){
		RST_EP_CLK();
		SET_EP_CS();
		SET_EP_DIO_OUT();
}

void ep_poweroff(){
		RST_EP_CS();
		SET_EP_DIO_IN();
}

void enable_ep(){
		RST_EP_CLK();
		SET_EP_DIO_OUT();
		SET_EP_CS();
		SET_EP_DO();
		delay_us(EP_CS_DLY);
		ep_clk();

}
void disable_ep(){
	RST_EP_CS();
	RST_EP_DO();
	RST_EP_CLK();
	SET_EP_DIO_IN();
}


void out_ep8bit(){
register uchar bit_cnt ;
					for(bit_cnt=0; bit_cnt < 8; bit_cnt++){
						if( ep_data & 0x80)
						{ SET_EP_DO(); }
						else
						{ RST_EP_DO(); }
						   ep_clk();
					 ep_data <<=1 ;
					}


}

void out_ep16bit(uint send_d){
register bit_cnt ;
					for(bit_cnt=0; bit_cnt < 16; bit_cnt++){
					   if( send_d & 0x8000)
						{ SET_EP_DO(); }
						else
						{ RST_EP_DO(); }
					 ep_clk();
					 send_d <<=1 ;
					}

}

void out_epdata(uint send_d,uchar nbit ){
			while(nbit--){
					   if( send_d & 0x8000)
						{ SET_EP_DO(); }
						else
						{ RST_EP_DO(); }
					 ep_clk();
					 send_d <<=1 ;
				}

}



uchar in_ep8bit(){
register uchar bit_cnt ;
			tx_data=0;
			SET_EP_DIO_IN();
					for(bit_cnt=0; bit_cnt < 8; bit_cnt++){
					   SET_EP_CLK();
					   SET_EP_CLK();
					   SET_EP_CLK();
					   SET_EP_CLK();
					   SET_EP_CLK();
					   SET_EP_CLK();
						 tx_data <<=1 ;
						  if(EP_DI())
						  tx_data +=1 ;
					  RST_EP_CLK();
					  RST_EP_CLK();
					  RST_EP_CLK();
					  RST_EP_CLK();
					  RST_EP_CLK();
					  RST_EP_CLK();
					  
					}
				 return tx_data ;

}

uint in_ep16bit(){
register uchar bit_cnt ;
register uint in_data;
			in_data=0;
			SET_EP_DIO_IN();
					for(bit_cnt=0; bit_cnt < 16; bit_cnt++){
					   SET_EP_CLK();
					   SET_EP_CLK();
					   SET_EP_CLK();
					   SET_EP_CLK();
					   SET_EP_CLK();
					   SET_EP_CLK();
						 in_data <<=1 ;
						  if(EP_DI())
						  in_data +=1 ;
					  RST_EP_CLK();
					  RST_EP_CLK();
					  RST_EP_CLK();
					  RST_EP_CLK();
					  RST_EP_CLK();
					  RST_EP_CLK();
					  RST_EP_CLK();
					}
				 return in_data ;
}


void ep_clk(){
			 SET_EP_CLK();
			 SET_EP_CLK();
			 SET_EP_CLK();
			 SET_EP_CLK();
			 SET_EP_CLK();
			 SET_EP_CLK();
			 
			 RST_EP_CLK();
			 RST_EP_CLK();
			 RST_EP_CLK();
			 RST_EP_CLK();
			 RST_EP_CLK();
			 RST_EP_CLK();
}

void ep_clk8(){
register uchar a;
		 for(a=0;a<8;a++)
		  ep_clk();
}

// 8bit 
uint read_epp_ptr(uint addr, uchar *ptr, uint cnt){
uint i,k,chksum;
	enable_epp_if();

	chksum=0;
	for(i=0; i <cnt; i++){
	set_read_epp_addr(addr++);
		ep_data= in_ep8bit();
		*ptr++ = ep_data ; 
		chksum +=ep_data;
	disable_ep();
	}

	disable_epp_if();
	return chksum;
}


uint write_epp_ptr(uint addr, uchar *ptr, uint cnt){
uint chksum;
uint i,k;
long j;
	enable_epp_if();

	LED1_ON();
	LED2_OFF();

	set_epp_opcode_addr(EP_WREN,0);
	disable_ep();

	chksum=0;
	j=0;
	  
	for(i=0; i < cnt; i++){
		set_write_epp_addr(addr++);
		ep_data = *ptr++  ;
		//ep_data = 0  ;
		chksum +=ep_data;
		out_ep8bit();
		disable_ep();
		delay_ms(15);
		//delay_us(20000);
	j++;
	 if(j >=10)	{
		LED1_TOG();
		LED2_TOG();
		j=0;
	}	
		
	}
	LED1_OFF();
	LED2_OFF();

	wds_eep();
	
	disable_epp_if();
	

	return chksum;
}





uint cal_chksum(uchar *p, uint cnt){
uint i,chksum;
	chksum=0;
		for(i=0; i< cnt ; i++){
		 ep_data = *p++;
		 chksum += ep_data;
		} 
		return chksum;	
}


void dump_eep(){

}

void delay_us(uint dd){
register long  i,j;
 for(i=0; i< dd; i++)
  j=dd*2 ;

}



void set_epp_opcode_addr(uint opcode, uint addr){
			enable_ep();
			ep_opcode = opcode ;
			ep_opcode |= (addr<< 5)  ;
			out_epdata(ep_opcode,2+9);
}


void read_eep_data(uchar addr, uchar type, uchar *out ){
				enable_ep();
				ep_data = EP_READ ;
				ep_data +=addr ;
				out_ep8bit();
		 switch (type){
		 case EP_LONG :
				break ;
		 case EP_FLOAT :
				*(out+1) = in_ep8bit();
				*(out+0) = in_ep8bit();
				disable_ep();
				enable_ep();
				ep_data = EP_READ ;
				ep_data +=addr+1 ;
				out_ep8bit();
				*(out+3) = in_ep8bit();
				*(out+2) = in_ep8bit();
				break ;
		 case EP_INT :
				*(out+1)   = in_ep8bit();
				*(out+0)   = in_ep8bit();
				break ;
		 case EP_CHAR :
                *(out)   = in_ep8bit();
				break ;
		}
				disable_ep();

}

void read_eep_word(uchar addr , uchar *out){
register uint ep_uint ;
				enable_ep();
				ep_data = EP_READ ;
				ep_data +=addr ;
				out_ep8bit();
				*(out+1)   = in_ep8bit();
				*(out+0)   = in_ep8bit();
				disable_ep();
}

void write_eep_word(uchar addr , uchar *out){
register uint ep_uint ;
			ep_poweron();
			wen_eep();
			enable_ep();
			ep_data = EP_WR ;
			ep_data +=addr ;
			out_ep8bit();
			ep_data = *(out+1);
			out_ep8bit();
			ep_data = *(out);
			out_ep8bit();
//			  ep_uint += *out *256	;
//			  out_ep16bit(ep_uint);
			disable_ep();
			delay_ms(15);
		  //  delay_us(EP_PRG_DLY);
}

void write_eep_data(uchar addr, uchar type, uchar *out ){
//		   return ;
		 switch (type){
		 case EP_LONG :
		 case EP_FLOAT :
				write_eep_word(addr,out);
				write_eep_word(addr+1,out+2);
				break ;
		 case EP_INT :
				write_eep_word(addr,out);
				break ;
		 case EP_CHAR :
				break ;
		}
}


uint read_epp16_ptr(uint addr, uchar *ptr, uint cnt){
uint i,k,chksum;
	enable_epp_if();
	chksum=0;
	 k = cnt >> 1;
	for(i=0; i <k; i++){
		set_read_epp_addr(addr++);
		ep_dataw = in_ep16bit();
		ep_data = ep_dataw & 0xff ;
		*ptr++ = ep_data ; 
		chksum +=ep_data;
		ep_data = (ep_dataw >>8) & 0xff ;
		*ptr++ = ep_data ; 
		chksum +=ep_data;
	}
	 if(cnt &1){
		set_read_epp_addr(addr++);
		ep_dataw = in_ep16bit();
		ep_data = ep_dataw & 0xff ;
		*ptr++ = ep_data ; 
		chksum +=ep_data;
	 
	 }
		disable_ep();
	disable_epp_if();

	return chksum;
}


uint write_epp16_ptr(uint addr, uchar *ptr, uint cnt){
uint chksum;
uint i,k;
	enable_epp_if();

	wen_eep();
	chksum=0;
	 k = cnt >> 1;
	 if(cnt &1) 
	  k++  ;	
	  
	for(i=0; i < k; i++){
		set_write_epp_addr(addr++);
		ep_dataw = *ptr++  ;
		ep_dataw = 0  ;
		chksum +=ep_data;
		ep_dataw |= *ptr++ << 8 ;
		chksum +=ep_data;
		out_epdata(ep_dataw,16);
		disable_ep();
		delay_us(1000);
	}
	disable_epp_if();
	return chksum;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -