📄 epp.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 + -