1200 lines
36 KiB
C
1200 lines
36 KiB
C
#include "eeprom_spi.h"
|
||
|
||
//使用方法:
|
||
// uint8_t eep_tx = 0x72;
|
||
// uint8_t eep_rx = 0;
|
||
// uint8_t eep_addr[3];
|
||
// uint8_t eep_test_flag = 0;
|
||
// uint8_t eep_status = 0;
|
||
|
||
// if(eep_test_flag == 0)
|
||
// {
|
||
// eep_test_flag = 1;
|
||
|
||
// eep_addr[0] = 0x00;
|
||
// eep_addr[1] = 0x00;
|
||
// eep_addr[2] = 0x00;
|
||
// eeprom_writedata(eep_addr, eep_tx);
|
||
|
||
// eep_rx = eeprom_readdata(eep_addr);
|
||
// }
|
||
// 结果:eep_rx = 0x72
|
||
|
||
void eeprom_spi_init(void)
|
||
{
|
||
EEPROM_CS_H; // CS 初始化高(手册中描述:S拉低时片选)
|
||
EEPROM_SCLK_L; // CLK 初始化低
|
||
EEPROM_WR_H; // 不使用硬件保护
|
||
}
|
||
|
||
void eeprom_spi_writebyte(uint8_t wrt_data)
|
||
{
|
||
uint8_t i = 0;
|
||
uint8_t temp = 0;
|
||
for(i = 0; i < 8; i++)
|
||
{
|
||
temp = ((wrt_data&0x80)==0x80)? 1:0;
|
||
|
||
wrt_data = wrt_data << 1;
|
||
|
||
EEPROM_SCLK_L; //CPOL=0
|
||
|
||
if(temp)
|
||
{
|
||
EEPROM_MOSI_H;
|
||
}
|
||
else
|
||
{
|
||
EEPROM_MOSI_L;
|
||
}
|
||
|
||
systick_delay_us(10); // 空等待
|
||
|
||
EEPROM_SCLK_H; //CPHA=0
|
||
|
||
systick_delay_us(10); // 空等待
|
||
}
|
||
|
||
EEPROM_SCLK_L;
|
||
}
|
||
|
||
uint8_t eeprom_spi_readbyte(void)
|
||
{
|
||
uint8_t i = 0;
|
||
uint8_t read_data = 0xFF;
|
||
for(i = 0; i < 8; i++)
|
||
{
|
||
read_data = read_data << 1;
|
||
|
||
EEPROM_SCLK_L;
|
||
|
||
systick_delay_us(10); // 空等待
|
||
|
||
EEPROM_SCLK_H;
|
||
|
||
systick_delay_us(10); // 空等待
|
||
|
||
if(EEPROM_MISO)
|
||
{
|
||
read_data = read_data + 1;
|
||
}
|
||
}
|
||
EEPROM_SCLK_L;
|
||
|
||
return read_data;
|
||
}
|
||
|
||
uint8_t SPI_WriteReadByte(uint8_t data)
|
||
{
|
||
uint16_t bit_ctr;
|
||
for(bit_ctr=0;bit_ctr<8;bit_ctr++)
|
||
{
|
||
if(data & 0x80)
|
||
{
|
||
EEPROM_MOSI_H;
|
||
}
|
||
else
|
||
{
|
||
EEPROM_MOSI_L;
|
||
}
|
||
|
||
data = (data << 1);
|
||
EEPROM_SCLK_H;
|
||
systick_delay_us(5); // 空等待
|
||
if(EEPROM_MISO)
|
||
{
|
||
data |= 0x01;
|
||
}
|
||
EEPROM_SCLK_L;
|
||
systick_delay_us(5); // 空等待
|
||
}
|
||
|
||
return(data);
|
||
}
|
||
|
||
void eeprom_writedata(int32_t addr_long, uint8_t txd)
|
||
{
|
||
uint8_t write_en_flag = 0;
|
||
uint8_t ee_status = 0;
|
||
uint8_t addr[3];
|
||
addr[0] = addr_long >> 16;
|
||
addr[1] = addr_long >> 8;
|
||
addr[2] = addr_long;
|
||
|
||
int16_t wait_max = 0;
|
||
do
|
||
{
|
||
EEPROM_CS_L;
|
||
delay_cnt(10);
|
||
eeprom_spi_writebyte(WRITE_ENABLE);
|
||
delay_cnt(10);
|
||
EEPROM_CS_H;
|
||
|
||
EEPROM_CS_L;
|
||
delay_cnt(10);
|
||
eeprom_spi_writebyte(READ_STATUS);
|
||
ee_status = eeprom_spi_readbyte();
|
||
delay_cnt(10);
|
||
EEPROM_CS_H;
|
||
|
||
write_en_flag = ee_status & 0x03;
|
||
|
||
wait_max++;
|
||
if(wait_max > 500)
|
||
{
|
||
system_sts.eeprom_write_error = 1;
|
||
return;
|
||
}
|
||
|
||
} while (write_en_flag != 0x02);
|
||
|
||
EEPROM_CS_L;
|
||
delay_cnt(10);
|
||
eeprom_spi_writebyte(WRITE_MEMORY);
|
||
eeprom_spi_writebyte(addr[0]);
|
||
eeprom_spi_writebyte(addr[1]);
|
||
eeprom_spi_writebyte(addr[2]);
|
||
eeprom_spi_writebyte(txd);
|
||
delay_cnt(10);
|
||
EEPROM_CS_H;
|
||
|
||
}
|
||
|
||
uint8_t eeprom_readdata(int32_t addr_long)
|
||
{
|
||
uint8_t rxd = 0;
|
||
uint8_t write_en_flag = 0;
|
||
uint8_t ee_status = 0;
|
||
uint8_t addr[3];
|
||
addr[0] = addr_long >> 16;
|
||
addr[1] = addr_long >> 8;
|
||
addr[2] = addr_long ;
|
||
|
||
int16_t wait_max = 0;
|
||
do
|
||
{
|
||
EEPROM_CS_L;
|
||
delay_cnt(10);
|
||
eeprom_spi_writebyte(WRITE_ENABLE);
|
||
delay_cnt(10);
|
||
EEPROM_CS_H;
|
||
|
||
EEPROM_CS_L;
|
||
delay_cnt(10);
|
||
eeprom_spi_writebyte(READ_STATUS);
|
||
ee_status = eeprom_spi_readbyte();
|
||
delay_cnt(10);
|
||
EEPROM_CS_H;
|
||
|
||
write_en_flag = ee_status & 0x01;
|
||
|
||
wait_max++;
|
||
if(wait_max > 500)
|
||
{
|
||
system_sts.eeprom_read_error = 1;
|
||
return 0;
|
||
}
|
||
|
||
} while (write_en_flag);
|
||
|
||
EEPROM_CS_L;
|
||
delay_cnt(10);
|
||
eeprom_spi_writebyte(READ_MEMORY);
|
||
eeprom_spi_writebyte(addr[0]);
|
||
eeprom_spi_writebyte(addr[1]);
|
||
eeprom_spi_writebyte(addr[2]);
|
||
rxd = eeprom_spi_readbyte();
|
||
delay_cnt(10);
|
||
EEPROM_CS_H;
|
||
|
||
return rxd;
|
||
}
|
||
|
||
//保存修改过的数据
|
||
void eeprom_datasave_changed(void)
|
||
{
|
||
TABVIEW_DATA tab_temp;
|
||
memcpy(&tab_temp, &tabdata, sizeof(TABVIEW_DATA));
|
||
|
||
eeprom_dataread();
|
||
|
||
if( (tab_temp.item0_page0_vup[0] != tabdata.item0_page0_vup[0])||(tab_temp.item0_page0_vlow[0] != tabdata.item0_page0_vlow[0])||\
|
||
(tab_temp.item0_page0_vup[1] != tabdata.item0_page0_vup[1])||(tab_temp.item0_page0_vlow[1] != tabdata.item0_page0_vlow[1]) )
|
||
{
|
||
tabdata.item0_page0_vup[0] = tab_temp.item0_page0_vup[0];
|
||
tabdata.item0_page0_vlow[0] = tab_temp.item0_page0_vlow[0];
|
||
tabdata.item0_page0_vup[1] = tab_temp.item0_page0_vup[1];
|
||
tabdata.item0_page0_vlow[1] = tab_temp.item0_page0_vlow[1];
|
||
|
||
eeprom_datasave_single(EEPROM_TAG_VOLTAGE);
|
||
}
|
||
|
||
if( (tab_temp.item0_page0_cup != tabdata.item0_page0_cup)||(tab_temp.item0_page0_clow != tabdata.item0_page0_clow) )
|
||
{
|
||
tabdata.item0_page0_cup = tab_temp.item0_page0_cup;
|
||
tabdata.item0_page0_clow = tab_temp.item0_page0_clow;
|
||
|
||
eeprom_datasave_single(EEPROM_TAG_CURRENT);
|
||
}
|
||
|
||
if( (tab_temp.item0_page0_rup != tabdata.item0_page0_rup)||(tab_temp.item0_page1_rlow != tabdata.item0_page1_rlow) )
|
||
{
|
||
tabdata.item0_page0_rup = tab_temp.item0_page0_rup;
|
||
tabdata.item0_page1_rlow = tab_temp.item0_page1_rlow;
|
||
|
||
eeprom_datasave_single(EEPROM_TAG_RESISTANCE);
|
||
}
|
||
|
||
if( (tab_temp.item0_page1_fup != tabdata.item0_page1_fup)||(tab_temp.item0_page1_flow != tabdata.item0_page1_flow) )
|
||
{
|
||
tabdata.item0_page1_fup = tab_temp.item0_page1_fup;
|
||
tabdata.item0_page1_flow = tab_temp.item0_page1_flow;
|
||
|
||
eeprom_datasave_single(EEPROM_TAG_FREQUENCE);
|
||
}
|
||
|
||
for(uint8_t i = 0 ; i < 8; i++)
|
||
{
|
||
if( (tab_temp.item0_page1_TCup[i] != tabdata.item0_page1_TCup[i])||(tab_temp.item0_page1_TClow[i] != tabdata.item0_page1_TClow[i]) )
|
||
{
|
||
tabdata.item0_page1_TCup[i] = tab_temp.item0_page1_TCup[i];
|
||
tabdata.item0_page1_TClow[i] = tab_temp.item0_page1_TClow[i];
|
||
|
||
//数组索引0-7,标签4-11
|
||
eeprom_datasave_single( i + 4 );
|
||
}
|
||
}
|
||
|
||
if( (tab_temp.item0_page2_RTDup != tabdata.item0_page2_RTDup)||(tab_temp.item0_page2_RTDlow != tabdata.item0_page2_RTDlow) )
|
||
{
|
||
tabdata.item0_page2_RTDup = tab_temp.item0_page2_RTDup;
|
||
tabdata.item0_page2_RTDlow = tab_temp.item0_page2_RTDlow;
|
||
|
||
eeprom_datasave_single(EEPROM_TAG_RTD);
|
||
}
|
||
|
||
if(tab_temp.item1_page0_sample_interval != tabdata.item1_page0_sample_interval)
|
||
{
|
||
tabdata.item1_page0_sample_interval = tab_temp.item1_page0_sample_interval;
|
||
|
||
eeprom_datasave_single(EEPROM_TAG_SAMPLE_INTERVAL);
|
||
}
|
||
|
||
if(tab_temp.item1_page0_plot_num != tabdata.item1_page0_plot_num)
|
||
{
|
||
tabdata.item1_page0_plot_num = tab_temp.item1_page0_plot_num;
|
||
|
||
eeprom_datasave_single(EEPROM_TAG_PLOT_COUNT);
|
||
}
|
||
|
||
if(tab_temp.item1_page0_color_input != tabdata.item1_page0_color_input)
|
||
{
|
||
tabdata.item1_page0_color_input = tab_temp.item1_page0_color_input;
|
||
|
||
eeprom_datasave_single(EEPROM_TAG_INPUT_COLOR);
|
||
}
|
||
|
||
if(tab_temp.item1_page0_color_output != tabdata.item1_page0_color_output)
|
||
{
|
||
tabdata.item1_page0_color_output = tab_temp.item1_page0_color_output;
|
||
|
||
eeprom_datasave_single(EEPROM_TAG_OUTPUT_COLOR);
|
||
}
|
||
|
||
if(tab_temp.item3_page0_language != tabdata.item3_page0_language)
|
||
{
|
||
tabdata.item3_page0_language = tab_temp.item3_page0_language;
|
||
|
||
eeprom_datasave_single(EEPROM_TAG_LANGUAGE);
|
||
}
|
||
}
|
||
|
||
void eeprom_datasave_single(uint8_t tag)
|
||
{
|
||
//16bits h --- l
|
||
//32bits: h --- mh --- ml --- l
|
||
uint8_t temp_h = 0, temp_l = 0;
|
||
uint8_t temp_mh = 0, temp_ml = 0;
|
||
|
||
switch (tag)
|
||
{
|
||
case EEPROM_TAG_VOLTAGE:
|
||
{
|
||
//VOL V
|
||
temp_h = tabdata.item0_page0_vup[0] >> 8;
|
||
temp_l = tabdata.item0_page0_vup[0] & 0xFF;
|
||
eeprom_writedata(VOL_V_UP_ADDR, temp_h);
|
||
eeprom_writedata(VOL_V_UP_ADDR + 8, temp_l);
|
||
|
||
temp_h = tabdata.item0_page0_vlow[0] >> 8;
|
||
temp_l = tabdata.item0_page0_vlow[0] & 0xFF;
|
||
eeprom_writedata(VOL_V_LOW_ADDR, temp_h);
|
||
eeprom_writedata(VOL_V_LOW_ADDR + 8, temp_l);
|
||
|
||
//VOL mV
|
||
temp_h = tabdata.item0_page0_vup[1] >> 8;
|
||
temp_l = tabdata.item0_page0_vup[1] & 0xFF;
|
||
eeprom_writedata(VOL_MV_UP_ADDR, temp_h);
|
||
eeprom_writedata(VOL_MV_UP_ADDR + 8, temp_l);
|
||
|
||
temp_h = tabdata.item0_page0_vlow[1] >> 8;
|
||
temp_l = tabdata.item0_page0_vlow[1] & 0xFF;
|
||
eeprom_writedata(VOL_MV_LOW_ADDR, temp_h);
|
||
eeprom_writedata(VOL_MV_LOW_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CURRENT:
|
||
{
|
||
//CUR
|
||
temp_h = tabdata.item0_page0_cup >> 8;
|
||
temp_l = tabdata.item0_page0_cup & 0xFF;
|
||
eeprom_writedata(CUR_UP_ADDR, temp_h);
|
||
eeprom_writedata(CUR_UP_ADDR + 8, temp_l);
|
||
|
||
temp_h = tabdata.item0_page0_clow >> 8;
|
||
temp_l = tabdata.item0_page0_clow & 0xFF;
|
||
eeprom_writedata(CUR_LOW_ADDR, temp_h);
|
||
eeprom_writedata(CUR_LOW_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_RESISTANCE:
|
||
{
|
||
//RES
|
||
temp_h = tabdata.item0_page0_rup >> 8;
|
||
temp_l = tabdata.item0_page0_rup & 0xFF;
|
||
eeprom_writedata(RES_UP_ADDR, temp_h);
|
||
eeprom_writedata(RES_UP_ADDR + 8, temp_l);
|
||
|
||
temp_h = tabdata.item0_page1_rlow >> 8;
|
||
temp_l = tabdata.item0_page1_rlow & 0xFF;
|
||
eeprom_writedata(RES_LOW_ADDR, temp_h);
|
||
eeprom_writedata(RES_LOW_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_FREQUENCE:
|
||
{
|
||
//FRE
|
||
temp_h = tabdata.item0_page1_fup >> 8;
|
||
temp_l = tabdata.item0_page1_fup & 0xFF;
|
||
eeprom_writedata(FRE_UP_ADDR, temp_h);
|
||
eeprom_writedata(FRE_UP_ADDR + 8, temp_l);
|
||
|
||
temp_h = tabdata.item0_page1_flow >> 8;
|
||
temp_l = tabdata.item0_page1_flow & 0xFF;
|
||
eeprom_writedata(FRE_LOW_ADDR, temp_h);
|
||
eeprom_writedata(FRE_LOW_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_TC_K:
|
||
{
|
||
//TC K
|
||
temp_h = tabdata.item0_page1_TCup[0] >> 8;
|
||
temp_l = tabdata.item0_page1_TCup[0] & 0xFF;
|
||
eeprom_writedata(TC_K_UP_ADDR, temp_h);
|
||
eeprom_writedata(TC_K_UP_ADDR + 8, temp_l);
|
||
|
||
temp_h = tabdata.item0_page1_TClow[0] >> 8;
|
||
temp_l = tabdata.item0_page1_TClow[0] & 0xFF;
|
||
eeprom_writedata(TC_K_LOW_ADDR, temp_h);
|
||
eeprom_writedata(TC_K_LOW_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_TC_S:
|
||
{
|
||
//TC S
|
||
temp_h = tabdata.item0_page1_TCup[1] >> 8;
|
||
temp_l = tabdata.item0_page1_TCup[1] & 0xFF;
|
||
eeprom_writedata(TC_S_UP_ADDR, temp_h);
|
||
eeprom_writedata(TC_S_UP_ADDR + 8, temp_l);
|
||
|
||
temp_h = tabdata.item0_page1_TClow[1] >> 8;
|
||
temp_l = tabdata.item0_page1_TClow[1] & 0xFF;
|
||
eeprom_writedata(TC_S_LOW_ADDR, temp_h);
|
||
eeprom_writedata(TC_S_LOW_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_TC_N:
|
||
{
|
||
//TC N
|
||
temp_h = tabdata.item0_page1_TCup[2] >> 8;
|
||
temp_l = tabdata.item0_page1_TCup[2] & 0xFF;
|
||
eeprom_writedata(TC_N_UP_ADDR, temp_h);
|
||
eeprom_writedata(TC_N_UP_ADDR + 8, temp_l);
|
||
|
||
temp_h = tabdata.item0_page1_TClow[2] >> 8;
|
||
temp_l = tabdata.item0_page1_TClow[2] & 0xFF;
|
||
eeprom_writedata(TC_N_LOW_ADDR, temp_h);
|
||
eeprom_writedata(TC_N_LOW_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_TC_B:
|
||
{
|
||
//TC B
|
||
temp_h = tabdata.item0_page1_TCup[3] >> 8;
|
||
temp_l = tabdata.item0_page1_TCup[3] & 0xFF;
|
||
eeprom_writedata(TC_B_UP_ADDR, temp_h);
|
||
eeprom_writedata(TC_B_UP_ADDR + 8, temp_l);
|
||
|
||
temp_h = tabdata.item0_page1_TClow[3] >> 8;
|
||
temp_l = tabdata.item0_page1_TClow[3] & 0xFF;
|
||
eeprom_writedata(TC_B_LOW_ADDR, temp_h);
|
||
eeprom_writedata(TC_B_LOW_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_TC_E:
|
||
{
|
||
//TC E
|
||
temp_h = tabdata.item0_page1_TCup[4] >> 8;
|
||
temp_l = tabdata.item0_page1_TCup[4] & 0xFF;
|
||
eeprom_writedata(TC_E_UP_ADDR, temp_h);
|
||
eeprom_writedata(TC_E_UP_ADDR + 8, temp_l);
|
||
|
||
temp_h = tabdata.item0_page1_TClow[4] >> 8;
|
||
temp_l = tabdata.item0_page1_TClow[4] & 0xFF;
|
||
eeprom_writedata(TC_E_LOW_ADDR, temp_h);
|
||
eeprom_writedata(TC_E_LOW_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_TC_J:
|
||
{
|
||
//TC J
|
||
temp_h = tabdata.item0_page1_TCup[5] >> 8;
|
||
temp_l = tabdata.item0_page1_TCup[5] & 0xFF;
|
||
eeprom_writedata(TC_J_UP_ADDR, temp_h);
|
||
eeprom_writedata(TC_J_UP_ADDR + 8, temp_l);
|
||
|
||
temp_h = tabdata.item0_page1_TClow[5] >> 8;
|
||
temp_l = tabdata.item0_page1_TClow[5] & 0xFF;
|
||
eeprom_writedata(TC_J_LOW_ADDR, temp_h);
|
||
eeprom_writedata(TC_J_LOW_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_TC_R:
|
||
{
|
||
//TC R
|
||
temp_h = tabdata.item0_page1_TCup[6] >> 8;
|
||
temp_l = tabdata.item0_page1_TCup[6] & 0xFF;
|
||
eeprom_writedata(TC_R_UP_ADDR, temp_h);
|
||
eeprom_writedata(TC_R_UP_ADDR + 8, temp_l);
|
||
|
||
temp_h = tabdata.item0_page1_TClow[6] >> 8;
|
||
temp_l = tabdata.item0_page1_TClow[6] & 0xFF;
|
||
eeprom_writedata(TC_R_LOW_ADDR, temp_h);
|
||
eeprom_writedata(TC_R_LOW_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_TC_T:
|
||
{
|
||
//TC T
|
||
temp_h = tabdata.item0_page1_TCup[7] >> 8;
|
||
temp_l = tabdata.item0_page1_TCup[7] & 0xFF;
|
||
eeprom_writedata(TC_T_UP_ADDR, temp_h);
|
||
eeprom_writedata(TC_T_UP_ADDR + 8, temp_l);
|
||
|
||
temp_h = tabdata.item0_page1_TClow[7] >> 8;
|
||
temp_l = tabdata.item0_page1_TClow[7] & 0xFF;
|
||
eeprom_writedata(TC_T_LOW_ADDR, temp_h);
|
||
eeprom_writedata(TC_T_LOW_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_RTD:
|
||
{
|
||
//RTD
|
||
temp_h = tabdata.item0_page2_RTDup >> 8;
|
||
temp_l = tabdata.item0_page2_RTDup & 0xFF;
|
||
eeprom_writedata(RTD_UP_ADDR, temp_h);
|
||
eeprom_writedata(RTD_UP_ADDR + 8, temp_l);
|
||
|
||
temp_h = tabdata.item0_page2_RTDlow >> 8;
|
||
temp_l = tabdata.item0_page2_RTDlow & 0xFF;
|
||
eeprom_writedata(RTD_LOW_ADDR, temp_h);
|
||
eeprom_writedata(RTD_LOW_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_SAMPLE_INTERVAL:
|
||
{
|
||
//采样间隔
|
||
temp_h = tabdata.item1_page0_sample_interval >> 8;
|
||
temp_l = tabdata.item1_page0_sample_interval & 0xFF;
|
||
eeprom_writedata(SAMPLE_INTERVAL_ADDR, temp_h);
|
||
eeprom_writedata(SAMPLE_INTERVAL_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_PLOT_COUNT:
|
||
{
|
||
//描点数量
|
||
temp_h = tabdata.item1_page0_plot_num >> 8;
|
||
temp_l = tabdata.item1_page0_plot_num & 0xFF;
|
||
eeprom_writedata(PLOT_COUNT_ADDR, temp_h);
|
||
eeprom_writedata(PLOT_COUNT_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_INPUT_COLOR:
|
||
{
|
||
//输入曲线颜色
|
||
temp_h = ((uint8_t)tabdata.item1_page0_color_input) >> 8;
|
||
temp_l = ((uint8_t)tabdata.item1_page0_color_input) & 0xFF;
|
||
eeprom_writedata(INPUT_COLOR_ADDR, temp_h);
|
||
eeprom_writedata(INPUT_COLOR_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_OUTPUT_COLOR:
|
||
{
|
||
//输出曲线颜色
|
||
temp_h = ((uint8_t)tabdata.item1_page0_color_output) >> 8;
|
||
temp_l = ((uint8_t)tabdata.item1_page0_color_output) & 0xFF;
|
||
eeprom_writedata(OUTPUT_COLOR_ADDR, temp_h);
|
||
eeprom_writedata(OUTPUT_COLOR_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_LANGUAGE:
|
||
{
|
||
//语言选择
|
||
temp_h = ((uint8_t)tabdata.item3_page0_language) >> 8;
|
||
temp_l = ((uint8_t)tabdata.item3_page0_language) & 0xFF;
|
||
eeprom_writedata(LANGUAGE_SELECT_ADDR, temp_h);
|
||
eeprom_writedata(LANGUAGE_SELECT_ADDR + 8, temp_l);
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_CUR_MA_OUT:
|
||
{
|
||
uint32_t flt[CALIBRATE_CUR_MA_OUT_POINTS] = {0};
|
||
memcpy(flt, cali_paras.cali_cur_mA_out, sizeof(flt));
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_CUR_MA_OUT_POINTS; i++)
|
||
{
|
||
temp_h = flt[i] >> 24;
|
||
temp_mh = flt[i] >> 16;
|
||
temp_ml = flt[i] >> 8;
|
||
temp_l = flt[i] & 0xFF;
|
||
eeprom_writedata(CAL_CUR_MA_OUT_ADDR_START + 32*i, temp_h);
|
||
eeprom_writedata(CAL_CUR_MA_OUT_ADDR_START + 32*i + 8, temp_mh);
|
||
eeprom_writedata(CAL_CUR_MA_OUT_ADDR_START + 32*i + 16, temp_ml);
|
||
eeprom_writedata(CAL_CUR_MA_OUT_ADDR_START + 32*i + 24, temp_l);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_VOL_V_OUT:
|
||
{
|
||
uint32_t flt[CALIBRATE_VOL_V_OUT_POINTS] = {0};
|
||
memcpy(flt, cali_paras.cali_vol_V_out, sizeof(flt));
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_VOL_V_OUT_POINTS; i++)
|
||
{
|
||
temp_h = flt[i] >> 24;
|
||
temp_mh = flt[i] >> 16;
|
||
temp_ml = flt[i] >> 8;
|
||
temp_l = flt[i] & 0xFF;
|
||
eeprom_writedata(CAL_VOL_V_OUT_ADDR_START + 32*i, temp_h);
|
||
eeprom_writedata(CAL_VOL_V_OUT_ADDR_START + 32*i + 8, temp_mh);
|
||
eeprom_writedata(CAL_VOL_V_OUT_ADDR_START + 32*i + 16, temp_ml);
|
||
eeprom_writedata(CAL_VOL_V_OUT_ADDR_START + 32*i + 24, temp_l);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_VOL_MV_OUT:
|
||
{
|
||
uint32_t flt[CALIBRATE_VOL_MV_OUT_POINTS] = {0};
|
||
memcpy(flt, cali_paras.cali_vol_mV_out, sizeof(flt));
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_VOL_MV_OUT_POINTS; i++)
|
||
{
|
||
temp_h = flt[i] >> 24;
|
||
temp_mh = flt[i] >> 16;
|
||
temp_ml = flt[i] >> 8;
|
||
temp_l = flt[i] & 0xFF;
|
||
eeprom_writedata(CAL_VOL_MV_OUT_ADDR_START + 32*i, temp_h);
|
||
eeprom_writedata(CAL_VOL_MV_OUT_ADDR_START + 32*i + 8, temp_mh);
|
||
eeprom_writedata(CAL_VOL_MV_OUT_ADDR_START + 32*i + 16, temp_ml);
|
||
eeprom_writedata(CAL_VOL_MV_OUT_ADDR_START + 32*i + 24, temp_l);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_RES_OHM_OUT:
|
||
{
|
||
uint32_t flt[CALIBRATE_RES_OHM_OUT_POINTS] = {0};
|
||
memcpy(flt, cali_paras.cali_res_ohm_out, sizeof(flt));
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_RES_OHM_OUT_POINTS; i++)
|
||
{
|
||
temp_h = flt[i] >> 24;
|
||
temp_mh = flt[i] >> 16;
|
||
temp_ml = flt[i] >> 8;
|
||
temp_l = flt[i] & 0xFF;
|
||
eeprom_writedata(CAL_RES_OHM_OUT_ADDR_START + 32*i, temp_h);
|
||
eeprom_writedata(CAL_RES_OHM_OUT_ADDR_START + 32*i + 8, temp_mh);
|
||
eeprom_writedata(CAL_RES_OHM_OUT_ADDR_START + 32*i + 16, temp_ml);
|
||
eeprom_writedata(CAL_RES_OHM_OUT_ADDR_START + 32*i + 24, temp_l);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_CUR_MA_IN:
|
||
{
|
||
uint32_t flt[CALIBRATE_CUR_MA_IN_POINTS] = {0};
|
||
memcpy(flt, cali_paras.cali_cur_mA_in, sizeof(flt));
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_CUR_MA_IN_POINTS; i++)
|
||
{
|
||
temp_h = flt[i] >> 24;
|
||
temp_mh = flt[i] >> 16;
|
||
temp_ml = flt[i] >> 8;
|
||
temp_l = flt[i] & 0xFF;
|
||
eeprom_writedata(CAL_CUR_MA_IN_ADDR_START + 32*i, temp_h);
|
||
eeprom_writedata(CAL_CUR_MA_IN_ADDR_START + 32*i + 8, temp_mh);
|
||
eeprom_writedata(CAL_CUR_MA_IN_ADDR_START + 32*i + 16, temp_ml);
|
||
eeprom_writedata(CAL_CUR_MA_IN_ADDR_START + 32*i + 24, temp_l);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_VOL_V_IN:
|
||
{
|
||
uint32_t flt[CALIBRATE_VOL_V_IN_POINTS] = {0};
|
||
memcpy(flt, cali_paras.cali_vol_V_in, sizeof(flt));
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_VOL_V_IN_POINTS; i++)
|
||
{
|
||
temp_h = flt[i] >> 24;
|
||
temp_mh = flt[i] >> 16;
|
||
temp_ml = flt[i] >> 8;
|
||
temp_l = flt[i] & 0xFF;
|
||
eeprom_writedata(CAL_VOL_V_IN_ADDR_START + 32*i, temp_h);
|
||
eeprom_writedata(CAL_VOL_V_IN_ADDR_START + 32*i + 8, temp_mh);
|
||
eeprom_writedata(CAL_VOL_V_IN_ADDR_START + 32*i + 16, temp_ml);
|
||
eeprom_writedata(CAL_VOL_V_IN_ADDR_START + 32*i + 24, temp_l);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_VOL_MV_IN:
|
||
{
|
||
uint32_t flt[CALIBRATE_VOL_MV_IN_POINTS] = {0};
|
||
memcpy(flt, cali_paras.cali_vol_mV_in, sizeof(flt));
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_VOL_MV_IN_POINTS; i++)
|
||
{
|
||
temp_h = flt[i] >> 24;
|
||
temp_mh = flt[i] >> 16;
|
||
temp_ml = flt[i] >> 8;
|
||
temp_l = flt[i] & 0xFF;
|
||
eeprom_writedata(CAL_VOL_MV_IN_ADDR_START + 32*i, temp_h);
|
||
eeprom_writedata(CAL_VOL_MV_IN_ADDR_START + 32*i + 8, temp_mh);
|
||
eeprom_writedata(CAL_VOL_MV_IN_ADDR_START + 32*i + 16, temp_ml);
|
||
eeprom_writedata(CAL_VOL_MV_IN_ADDR_START + 32*i + 24, temp_l);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_RES_OHM_IN:
|
||
{
|
||
uint32_t flt[CALIBRATE_RES_OHM_IN_POINTS] = {0};
|
||
memcpy(flt, cali_paras.cali_res_ohm_in, sizeof(flt));
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_RES_OHM_IN_POINTS; i++)
|
||
{
|
||
temp_h = flt[i] >> 24;
|
||
temp_mh = flt[i] >> 16;
|
||
temp_ml = flt[i] >> 8;
|
||
temp_l = flt[i] & 0xFF;
|
||
eeprom_writedata(CAL_RES_OHM_IN_ADDR_START + 32*i, temp_h);
|
||
eeprom_writedata(CAL_RES_OHM_IN_ADDR_START + 32*i + 8, temp_mh);
|
||
eeprom_writedata(CAL_RES_OHM_IN_ADDR_START + 32*i + 16, temp_ml);
|
||
eeprom_writedata(CAL_RES_OHM_IN_ADDR_START + 32*i + 24, temp_l);
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
//开机上电后读取参数
|
||
void eeprom_dataread(void)
|
||
{
|
||
uint8_t temp_h = 0, temp_l = 0;
|
||
uint16_t temp_w = 0;
|
||
|
||
//VOL V
|
||
temp_h = eeprom_readdata(VOL_V_UP_ADDR);
|
||
temp_l = eeprom_readdata(VOL_V_UP_ADDR + 8);
|
||
tabdata.item0_page0_vup[0] = ( temp_h << 8 ) + temp_l;
|
||
//数据异常时使用默认值
|
||
if( (tabdata.item0_page0_vup[0] > VOL[0].up)||(tabdata.item0_page0_vup[0] < VOL[0].low) ) tabdata.item0_page0_vup[0] = VOL[0].up;
|
||
|
||
temp_h = eeprom_readdata(VOL_V_LOW_ADDR);
|
||
temp_l = eeprom_readdata(VOL_V_LOW_ADDR + 8);
|
||
tabdata.item0_page0_vlow[0] = ( temp_h << 8 ) + temp_l;
|
||
//数据异常时使用默认值
|
||
if( (tabdata.item0_page0_vlow[0] > VOL[0].up)||(tabdata.item0_page0_vlow[0] < VOL[0].low) ) tabdata.item0_page0_vlow[0] = VOL[0].low;
|
||
|
||
//出现错误后,提前返回(连续四个字节不出错,直接读到最后)
|
||
//该错误仅能表示超时,无法表示数据异常
|
||
if(system_sts.eeprom_read_error) return;
|
||
|
||
//VOL mV
|
||
temp_h = eeprom_readdata(VOL_MV_UP_ADDR);
|
||
temp_l = eeprom_readdata(VOL_MV_UP_ADDR + 8);
|
||
tabdata.item0_page0_vup[1] = ( temp_h << 8 ) + temp_l;
|
||
if( (tabdata.item0_page0_vup[1] > VOL[1].up)||(tabdata.item0_page0_vup[1] < VOL[1].low) ) tabdata.item0_page0_vup[0] = VOL[1].up;
|
||
|
||
temp_h = eeprom_readdata(VOL_MV_LOW_ADDR);
|
||
temp_l = eeprom_readdata(VOL_MV_LOW_ADDR + 8);
|
||
tabdata.item0_page0_vlow[1] = ( temp_h << 8 ) + temp_l;
|
||
if( (tabdata.item0_page0_vlow[1] > VOL[1].up)||(tabdata.item0_page0_vlow[1] < VOL[1].low) ) tabdata.item0_page0_vlow[0] = VOL[1].low;
|
||
|
||
//CUR
|
||
//temp_h = eeprom_readdata(CUR_UP_ADDR);
|
||
temp_l = eeprom_readdata(CUR_UP_ADDR + 8);
|
||
tabdata.item0_page0_cup = temp_l;
|
||
if( (tabdata.item0_page0_cup > CUR.up)||(tabdata.item0_page0_cup < CUR.low) ) tabdata.item0_page0_cup = CUR.up;
|
||
|
||
//temp_h = eeprom_readdata(CUR_LOW_ADDR);
|
||
temp_l = eeprom_readdata(CUR_LOW_ADDR + 8);
|
||
tabdata.item0_page0_clow = temp_l;
|
||
if( (tabdata.item0_page0_clow > CUR.up)||(tabdata.item0_page0_clow < CUR.low) ) tabdata.item0_page0_clow = CUR.low;
|
||
|
||
//RES
|
||
temp_h = eeprom_readdata(RES_UP_ADDR);
|
||
temp_l = eeprom_readdata(RES_UP_ADDR + 8);
|
||
tabdata.item0_page0_rup = ( temp_h << 8 ) + temp_l;
|
||
if( (tabdata.item0_page0_rup > RES.up)||(tabdata.item0_page0_rup < RES.low) ) tabdata.item0_page0_rup = RES.up;
|
||
|
||
temp_h = eeprom_readdata(RES_LOW_ADDR);
|
||
temp_l = eeprom_readdata(RES_LOW_ADDR + 8);
|
||
tabdata.item0_page1_rlow = ( temp_h << 8 ) + temp_l;
|
||
if( (tabdata.item0_page1_rlow > RES.up)||(tabdata.item0_page1_rlow < RES.low) ) tabdata.item0_page1_rlow = RES.low;
|
||
|
||
//FRE
|
||
//temp_h = eeprom_readdata(FRE_UP_ADDR);
|
||
temp_l = eeprom_readdata(FRE_UP_ADDR + 8);
|
||
tabdata.item0_page1_fup = temp_l;
|
||
if( (tabdata.item0_page1_fup > FRE.up)||(tabdata.item0_page1_fup < FRE.low) ) tabdata.item0_page1_fup = FRE.up;
|
||
|
||
//temp_h = eeprom_readdata(FRE_LOW_ADDR);
|
||
temp_l = eeprom_readdata(FRE_LOW_ADDR + 8);
|
||
tabdata.item0_page1_flow = temp_l;
|
||
if( (tabdata.item0_page1_flow > FRE.up)||(tabdata.item0_page1_flow < FRE.low) ) tabdata.item0_page1_flow = FRE.low;
|
||
|
||
//TC K
|
||
temp_h = eeprom_readdata(TC_K_UP_ADDR);
|
||
temp_l = eeprom_readdata(TC_K_UP_ADDR + 8);
|
||
tabdata.item0_page1_TCup[0] = ( temp_h << 8 ) + temp_l;
|
||
|
||
temp_h = eeprom_readdata(TC_K_LOW_ADDR);
|
||
temp_l = eeprom_readdata(TC_K_LOW_ADDR + 8);
|
||
tabdata.item0_page1_TClow[0] = ( temp_h << 8 ) + temp_l;
|
||
|
||
//TC S
|
||
temp_h = eeprom_readdata(TC_S_UP_ADDR);
|
||
temp_l = eeprom_readdata(TC_S_UP_ADDR + 8);
|
||
tabdata.item0_page1_TCup[1] = ( temp_h << 8 ) + temp_l;
|
||
|
||
temp_h = eeprom_readdata(TC_S_LOW_ADDR);
|
||
temp_l = eeprom_readdata(TC_S_LOW_ADDR + 8);
|
||
tabdata.item0_page1_TClow[1] = ( temp_h << 8 ) + temp_l;
|
||
|
||
//TC N
|
||
temp_h = eeprom_readdata(TC_N_UP_ADDR);
|
||
temp_l = eeprom_readdata(TC_N_UP_ADDR + 8);
|
||
tabdata.item0_page1_TCup[2] = ( temp_h << 8 ) + temp_l;
|
||
|
||
temp_h = eeprom_readdata(TC_N_LOW_ADDR);
|
||
temp_l = eeprom_readdata(TC_N_LOW_ADDR + 8);
|
||
tabdata.item0_page1_TClow[2] = ( temp_h << 8 ) + temp_l;
|
||
|
||
//TC B
|
||
temp_h = eeprom_readdata(TC_B_UP_ADDR);
|
||
temp_l = eeprom_readdata(TC_B_UP_ADDR + 8);
|
||
tabdata.item0_page1_TCup[3] = ( temp_h << 8 ) + temp_l;
|
||
|
||
temp_h = eeprom_readdata(TC_B_LOW_ADDR);
|
||
temp_l = eeprom_readdata(TC_B_LOW_ADDR + 8);
|
||
tabdata.item0_page1_TClow[3] = ( temp_h << 8 ) + temp_l;
|
||
|
||
//TC E
|
||
temp_h = eeprom_readdata(TC_E_UP_ADDR);
|
||
temp_l = eeprom_readdata(TC_E_UP_ADDR + 8);
|
||
tabdata.item0_page1_TCup[4] = ( temp_h << 8 ) + temp_l;
|
||
|
||
temp_h = eeprom_readdata(TC_E_LOW_ADDR);
|
||
temp_l = eeprom_readdata(TC_E_LOW_ADDR + 8);
|
||
tabdata.item0_page1_TClow[4] = ( temp_h << 8 ) + temp_l;
|
||
|
||
//TC J
|
||
temp_h = eeprom_readdata(TC_J_UP_ADDR);
|
||
temp_l = eeprom_readdata(TC_J_UP_ADDR + 8);
|
||
tabdata.item0_page1_TCup[5] = ( temp_h << 8 ) + temp_l;
|
||
|
||
temp_h = eeprom_readdata(TC_J_LOW_ADDR);
|
||
temp_l = eeprom_readdata(TC_J_LOW_ADDR + 8);
|
||
tabdata.item0_page1_TClow[5] = ( temp_h << 8 ) + temp_l;
|
||
|
||
//TC R
|
||
temp_h = eeprom_readdata(TC_R_UP_ADDR);
|
||
temp_l = eeprom_readdata(TC_R_UP_ADDR + 8);
|
||
tabdata.item0_page1_TCup[6] = ( temp_h << 8 ) + temp_l;
|
||
|
||
temp_h = eeprom_readdata(TC_R_LOW_ADDR);
|
||
temp_l = eeprom_readdata(TC_R_LOW_ADDR + 8);
|
||
tabdata.item0_page1_TClow[6] = ( temp_h << 8 ) + temp_l;
|
||
|
||
//TC T
|
||
temp_h = eeprom_readdata(TC_T_UP_ADDR);
|
||
temp_l = eeprom_readdata(TC_T_UP_ADDR + 8);
|
||
tabdata.item0_page1_TCup[7] = ( temp_h << 8 ) + temp_l;
|
||
|
||
temp_h = eeprom_readdata(TC_T_LOW_ADDR);
|
||
temp_l = eeprom_readdata(TC_T_LOW_ADDR + 8);
|
||
tabdata.item0_page1_TClow[7] = ( temp_h << 8 ) + temp_l;
|
||
|
||
for(uint8_t i = 0; i < 8; i++)
|
||
{
|
||
if( (tabdata.item0_page1_TCup[i] > TC[i].up)||(tabdata.item0_page1_TCup[i] < TC[i].low) ) tabdata.item0_page1_TCup[i] = TC[i].up;
|
||
if( (tabdata.item0_page1_TClow[i] > TC[i].up)||(tabdata.item0_page1_TClow[i] < TC[i].low) ) tabdata.item0_page1_TClow[i] = TC[i].low;
|
||
}
|
||
|
||
//RTD
|
||
temp_h = eeprom_readdata(RTD_UP_ADDR);
|
||
temp_l = eeprom_readdata(RTD_UP_ADDR + 8);
|
||
tabdata.item0_page2_RTDup = ( temp_h << 8 ) + temp_l;
|
||
if( (tabdata.item0_page2_RTDup > RTD.up)||(tabdata.item0_page2_RTDup < RTD.low) ) tabdata.item0_page2_RTDup = RTD.up;
|
||
|
||
temp_h = eeprom_readdata(RTD_LOW_ADDR);
|
||
temp_l = eeprom_readdata(RTD_LOW_ADDR + 8);
|
||
tabdata.item0_page2_RTDlow = ( temp_h << 8 ) + temp_l;
|
||
if( (tabdata.item0_page2_RTDlow > RTD.up)||(tabdata.item0_page2_RTDlow < RTD.low) ) tabdata.item0_page2_RTDlow = RTD.low;
|
||
|
||
//采样间隔
|
||
temp_h = eeprom_readdata(SAMPLE_INTERVAL_ADDR);
|
||
temp_l = eeprom_readdata(SAMPLE_INTERVAL_ADDR + 8);
|
||
tabdata.item1_page0_sample_interval = ( temp_h << 8 ) + temp_l;
|
||
if( (tabdata.item1_page0_sample_interval > SAMPLE_INTERVAL_MAX)||(tabdata.item1_page0_sample_interval < MENU_TASK_PERIOD) ) tabdata.item1_page0_sample_interval = 1000;
|
||
|
||
//描点数量
|
||
temp_h = eeprom_readdata(PLOT_COUNT_ADDR);
|
||
temp_l = eeprom_readdata(PLOT_COUNT_ADDR + 8);
|
||
tabdata.item1_page0_plot_num = ( temp_h << 8 ) + temp_l;
|
||
if( (tabdata.item1_page0_plot_num > PLOT_NUM_MAX)||(tabdata.item1_page0_plot_num < PLOT_NUM_MIN) ) tabdata.item1_page0_plot_num = 10;
|
||
|
||
//输入曲线颜色
|
||
temp_h = eeprom_readdata(INPUT_COLOR_ADDR);
|
||
temp_l = eeprom_readdata(INPUT_COLOR_ADDR + 8);
|
||
temp_w = ( temp_h << 8 ) + temp_l;
|
||
if(temp_w > 5) temp_w = 0;
|
||
tabdata.item1_page0_color_input = (COLORS)temp_w;
|
||
|
||
//输出曲线颜色
|
||
temp_h = eeprom_readdata(OUTPUT_COLOR_ADDR);
|
||
temp_l = eeprom_readdata(OUTPUT_COLOR_ADDR + 8);
|
||
temp_w = ( temp_h << 8 ) + temp_l;
|
||
if(temp_w > 5) temp_w = 1;
|
||
tabdata.item1_page0_color_output = (COLORS)temp_w;
|
||
|
||
//语言选择
|
||
temp_h = eeprom_readdata(LANGUAGE_SELECT_ADDR);
|
||
temp_l = eeprom_readdata(LANGUAGE_SELECT_ADDR + 8);
|
||
temp_w = ( temp_h << 8 ) + temp_l;
|
||
if(temp_w > 1) temp_w = 0;
|
||
tabdata.item3_page0_language = (LANGUAGES)temp_w;
|
||
}
|
||
|
||
//读取指定数据
|
||
void eeprom_dataread_single(uint8_t tag)
|
||
{
|
||
//16bits h --- l
|
||
//32bits: h --- mh --- ml --- l
|
||
uint8_t temp_h = 0, temp_l = 0;
|
||
uint8_t temp_mh = 0, temp_ml = 0;
|
||
float error_check = 0;
|
||
|
||
switch (tag)
|
||
{
|
||
case EEPROM_TAG_CAL_CUR_MA_OUT:
|
||
{
|
||
uint32_t flt[CALIBRATE_CUR_MA_OUT_POINTS] = {0};
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_CUR_MA_OUT_POINTS; i++)
|
||
{
|
||
temp_h = eeprom_readdata(CAL_CUR_MA_OUT_ADDR_START + 32*i);
|
||
temp_mh = eeprom_readdata(CAL_CUR_MA_OUT_ADDR_START + 32*i + 8);
|
||
temp_ml = eeprom_readdata(CAL_CUR_MA_OUT_ADDR_START + 32*i + 16);
|
||
temp_l = eeprom_readdata(CAL_CUR_MA_OUT_ADDR_START + 32*i + 24);
|
||
flt[i] = (temp_h << 24)|(temp_mh << 16)|(temp_ml << 8)|(temp_l);
|
||
|
||
memcpy(&error_check, flt + i, 4);
|
||
if( ((int16_t)error_check > CUR.up)||((int16_t)error_check < CUR.low) )
|
||
{
|
||
//任意一个点异常,随即退出,不启用校准
|
||
curma_out_cal_enable = 2;
|
||
return;
|
||
}
|
||
}
|
||
|
||
memcpy(cali_paras.cali_cur_mA_out, flt, sizeof(cali_paras.cali_cur_mA_out));
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_VOL_V_OUT:
|
||
{
|
||
uint32_t flt[CALIBRATE_VOL_V_OUT_POINTS] = {0};
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_VOL_V_OUT_POINTS; i++)
|
||
{
|
||
temp_h = eeprom_readdata(CAL_VOL_V_OUT_ADDR_START + 32*i);
|
||
temp_mh = eeprom_readdata(CAL_VOL_V_OUT_ADDR_START + 32*i + 8);
|
||
temp_ml = eeprom_readdata(CAL_VOL_V_OUT_ADDR_START + 32*i + 16);
|
||
temp_l = eeprom_readdata(CAL_VOL_V_OUT_ADDR_START + 32*i + 24);
|
||
flt[i] = (temp_h << 24)|(temp_mh << 16)|(temp_ml << 8)|(temp_l);
|
||
|
||
memcpy(&error_check, flt + i, 4);
|
||
if( ((int16_t)error_check > VOL[0].up)||((int16_t)error_check < VOL[0].low) )
|
||
{
|
||
//任意一个点异常,随即退出,不启用校准
|
||
volv_out_cal_enable = 2;
|
||
return;
|
||
}
|
||
}
|
||
|
||
memcpy(cali_paras.cali_vol_V_out, flt, sizeof(cali_paras.cali_vol_V_out));
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_VOL_MV_OUT:
|
||
{
|
||
uint32_t flt[CALIBRATE_VOL_MV_OUT_POINTS] = {0};
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_VOL_MV_OUT_POINTS; i++)
|
||
{
|
||
temp_h = eeprom_readdata(CAL_VOL_MV_OUT_ADDR_START + 32*i);
|
||
temp_mh = eeprom_readdata(CAL_VOL_MV_OUT_ADDR_START + 32*i + 8);
|
||
temp_ml = eeprom_readdata(CAL_VOL_MV_OUT_ADDR_START + 32*i + 16);
|
||
temp_l = eeprom_readdata(CAL_VOL_MV_OUT_ADDR_START + 32*i + 24);
|
||
flt[i] = (temp_h << 24)|(temp_mh << 16)|(temp_ml << 8)|(temp_l);
|
||
|
||
memcpy(&error_check, flt + i, 4);
|
||
if( ((int16_t)error_check > VOL[1].up)||((int16_t)error_check < VOL[1].low) )
|
||
{
|
||
//任意一个点异常,随即退出,不启用校准
|
||
volmv_out_cal_enable = 2;
|
||
return;
|
||
}
|
||
}
|
||
|
||
memcpy(cali_paras.cali_vol_mV_out, flt, sizeof(cali_paras.cali_vol_mV_out));
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_RES_OHM_OUT:
|
||
{
|
||
uint32_t flt[CALIBRATE_RES_OHM_OUT_POINTS] = {0};
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_RES_OHM_OUT_POINTS; i++)
|
||
{
|
||
temp_h = eeprom_readdata(CAL_RES_OHM_OUT_ADDR_START + 32*i);
|
||
temp_mh = eeprom_readdata(CAL_RES_OHM_OUT_ADDR_START + 32*i + 8);
|
||
temp_ml = eeprom_readdata(CAL_RES_OHM_OUT_ADDR_START + 32*i + 16);
|
||
temp_l = eeprom_readdata(CAL_RES_OHM_OUT_ADDR_START + 32*i + 24);
|
||
flt[i] = (temp_h << 24)|(temp_mh << 16)|(temp_ml << 8)|(temp_l);
|
||
|
||
memcpy(&error_check, flt + i, 4);
|
||
if( ((int16_t)error_check > RES.up)||((int16_t)error_check < RES.low) )
|
||
{
|
||
//任意一个点异常,随即退出,不启用校准
|
||
resohm_out_cal_enable = 2;
|
||
return;
|
||
}
|
||
}
|
||
|
||
memcpy(cali_paras.cali_res_ohm_out, flt, sizeof(cali_paras.cali_res_ohm_out));
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_CUR_MA_IN:
|
||
{
|
||
uint32_t flt[CALIBRATE_CUR_MA_IN_POINTS] = {0};
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_CUR_MA_IN_POINTS; i++)
|
||
{
|
||
temp_h = eeprom_readdata(CAL_CUR_MA_IN_ADDR_START + 32*i);
|
||
temp_mh = eeprom_readdata(CAL_CUR_MA_IN_ADDR_START + 32*i + 8);
|
||
temp_ml = eeprom_readdata(CAL_CUR_MA_IN_ADDR_START + 32*i + 16);
|
||
temp_l = eeprom_readdata(CAL_CUR_MA_IN_ADDR_START + 32*i + 24);
|
||
flt[i] = (temp_h << 24)|(temp_mh << 16)|(temp_ml << 8)|(temp_l);
|
||
|
||
memcpy(&error_check, flt + i, 4);
|
||
if( ((int16_t)error_check > CUR.up)||((int16_t)error_check < CUR.low) )
|
||
{
|
||
//任意一个点异常,随即退出,不启用校准
|
||
curma_in_cal_enable = 2;
|
||
return;
|
||
}
|
||
}
|
||
|
||
memcpy(cali_paras.cali_cur_mA_in, flt, sizeof(cali_paras.cali_cur_mA_in));
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_VOL_V_IN:
|
||
{
|
||
uint32_t flt[CALIBRATE_VOL_V_IN_POINTS] = {0};
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_VOL_V_IN_POINTS; i++)
|
||
{
|
||
temp_h = eeprom_readdata(CAL_VOL_V_IN_ADDR_START + 32*i);
|
||
temp_mh = eeprom_readdata(CAL_VOL_V_IN_ADDR_START + 32*i + 8);
|
||
temp_ml = eeprom_readdata(CAL_VOL_V_IN_ADDR_START + 32*i + 16);
|
||
temp_l = eeprom_readdata(CAL_VOL_V_IN_ADDR_START + 32*i + 24);
|
||
flt[i] = (temp_h << 24)|(temp_mh << 16)|(temp_ml << 8)|(temp_l);
|
||
|
||
memcpy(&error_check, flt + i, 4);
|
||
if( ((int16_t)error_check > VOL[0].up)||((int16_t)error_check < VOL[0].low) )
|
||
{
|
||
//任意一个点异常,随即退出,不启用校准
|
||
volv_in_cal_enable = 2;
|
||
return;
|
||
}
|
||
}
|
||
|
||
memcpy(cali_paras.cali_vol_V_in, flt, sizeof(cali_paras.cali_vol_V_in));
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_VOL_MV_IN:
|
||
{
|
||
uint32_t flt[CALIBRATE_VOL_MV_IN_POINTS] = {0};
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_VOL_MV_IN_POINTS; i++)
|
||
{
|
||
temp_h = eeprom_readdata(CAL_VOL_MV_IN_ADDR_START + 32*i);
|
||
temp_mh = eeprom_readdata(CAL_VOL_MV_IN_ADDR_START + 32*i + 8);
|
||
temp_ml = eeprom_readdata(CAL_VOL_MV_IN_ADDR_START + 32*i + 16);
|
||
temp_l = eeprom_readdata(CAL_VOL_MV_IN_ADDR_START + 32*i + 24);
|
||
flt[i] = (temp_h << 24)|(temp_mh << 16)|(temp_ml << 8)|(temp_l);
|
||
|
||
memcpy(&error_check, flt + i, 4);
|
||
if( ((int16_t)error_check > VOL[1].up)||((int16_t)error_check < VOL[1].low) )
|
||
{
|
||
//任意一个点异常,随即退出,不启用校准
|
||
volmv_in_cal_enable = 2;
|
||
return;
|
||
}
|
||
}
|
||
|
||
memcpy(cali_paras.cali_vol_mV_in, flt, sizeof(cali_paras.cali_vol_mV_in));
|
||
}
|
||
break;
|
||
|
||
case EEPROM_TAG_CAL_RES_OHM_IN:
|
||
{
|
||
uint32_t flt[CALIBRATE_RES_OHM_IN_POINTS] = {0};
|
||
|
||
for(uint8_t i = 0; i < CALIBRATE_RES_OHM_IN_POINTS; i++)
|
||
{
|
||
temp_h = eeprom_readdata(CAL_RES_OHM_IN_ADDR_START + 32*i);
|
||
temp_mh = eeprom_readdata(CAL_RES_OHM_IN_ADDR_START + 32*i + 8);
|
||
temp_ml = eeprom_readdata(CAL_RES_OHM_IN_ADDR_START + 32*i + 16);
|
||
temp_l = eeprom_readdata(CAL_RES_OHM_IN_ADDR_START + 32*i + 24);
|
||
flt[i] = (temp_h << 24)|(temp_mh << 16)|(temp_ml << 8)|(temp_l);
|
||
|
||
memcpy(&error_check, flt + i, 4);
|
||
if( ((int16_t)error_check > RES.up)||((int16_t)error_check < RES.low) )
|
||
{
|
||
//任意一个点异常,随即退出,不启用校准
|
||
resohm_in_cal_enable = 2;
|
||
return;
|
||
}
|
||
}
|
||
|
||
memcpy(cali_paras.cali_res_ohm_in, flt, sizeof(cali_paras.cali_res_ohm_in));
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
//判断EEPROM内是否已存在数据
|
||
uint8_t eeprom_device_check(void)
|
||
{
|
||
uint8_t device_status_h = 0, device_status_l = 0;
|
||
int dev_sts = 0;
|
||
|
||
device_status_h = eeprom_readdata(DEVICE_CHECK);
|
||
device_status_l = eeprom_readdata(DEVICE_CHECK + 8);
|
||
dev_sts = (device_status_h << 8) + device_status_l;
|
||
|
||
if(dev_sts != 0xAAAA)
|
||
{
|
||
tabdata.item0_page0_vup[0] = VOL[0].up; //电压V上限
|
||
tabdata.item0_page0_vlow[0] = VOL[0].low; //电压V下限
|
||
tabdata.item0_page0_vup[1] = VOL[1].up; //电压mV上限
|
||
tabdata.item0_page0_vlow[1] = VOL[1].low; //电压mV下限
|
||
tabdata.item0_page0_cup = CUR.up; //电流上限
|
||
tabdata.item0_page0_clow = CUR.low; //电流下限
|
||
tabdata.item0_page0_rup = RES.up; //电阻上限
|
||
tabdata.item0_page1_rlow = RES.low; //电阻下限
|
||
tabdata.item0_page1_fup = FRE.up; //频率上限
|
||
tabdata.item0_page1_flow = FRE.low; //频率下限
|
||
tabdata.item0_page1_TCup[0] = TC[0].up; //TCK上限
|
||
tabdata.item0_page1_TClow[0] = TC[0].low; //TCK下限
|
||
tabdata.item0_page1_TCup[1] = TC[1].up; //TCS上限
|
||
tabdata.item0_page1_TClow[1] = TC[1].low; //TCS下限
|
||
tabdata.item0_page1_TCup[2] = TC[2].up; //TCN上限
|
||
tabdata.item0_page1_TClow[2] = TC[2].low; //TCN下限
|
||
tabdata.item0_page1_TCup[3] = TC[3].up; //TCB上限
|
||
tabdata.item0_page1_TClow[3] = TC[3].low; //TCB下限
|
||
tabdata.item0_page1_TCup[4] = TC[4].up; //TCE上限
|
||
tabdata.item0_page1_TClow[4] = TC[4].low; //TCE下限
|
||
tabdata.item0_page1_TCup[5] = TC[5].up; //TCJ上限
|
||
tabdata.item0_page1_TClow[5] = TC[5].low; //TCJ下限
|
||
tabdata.item0_page1_TCup[6] = TC[6].up; //TCR上限
|
||
tabdata.item0_page1_TClow[6] = TC[6].low; //TCR下限
|
||
tabdata.item0_page1_TCup[7] = TC[7].up; //TCT上限
|
||
tabdata.item0_page1_TClow[7] = TC[7].low; //TCT下限
|
||
tabdata.item0_page2_RTDup = RTD.up; //RTD上限
|
||
tabdata.item0_page2_RTDlow = RTD.low; //RTD下限
|
||
tabdata.item1_page0_sample_interval = 1500;
|
||
tabdata.item1_page0_plot_num = 5;
|
||
tabdata.item1_page0_color_input = COLOR_YELLOW;
|
||
tabdata.item1_page0_color_output = COLOR_BLUE;
|
||
tabdata.item3_page0_language = MENU_SIMPLYFY_CHINESE;
|
||
|
||
//eeprom_datasave();
|
||
eeprom_datasave_changed();
|
||
|
||
eeprom_writedata(DEVICE_CHECK, 0xAA);
|
||
eeprom_writedata(DEVICE_CHECK + 8, 0xAA);
|
||
|
||
return 0;
|
||
}
|
||
else
|
||
{
|
||
return 1;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|