📄 ltc1855.c
字号:
#include "config.h"
#include "pinsel.h"
#include "ltc1855.h"
#include "set.h"
#include "main.h"
#include "mea.h"
int16 advalue[adsamplgh][12];
int16 advaluetemp[8];
uint32 adsampcnt =0;
uint32 adtimer0[6];
uint32 advalget1[16];
uint32 advalget2[16];
uint32 advalget3[16];
uint32 advalget4[16];
uint32 advalget5[16];
uint32 advalget6[16];
uint32 advalget7[16];
uint32 advalget8[16];
uint32 adtemp;
extern uint32 ftpointercnt;
extern uint32 freqpointercnt;
extern uint32 meapointercnt;
extern uint32 dfpointercnt;
extern void adcodewriteread1(uint32 *p1,uint32 x);
extern int16 _fsadvalue(uint32 x,int32 y);
void ADInit(void)
{
NOP();
}
//void adrelay4us(void)
//{
// uint8 i;
// for(i = 0;i < 10;i++)
// {
// NOP();
// }
//}
int16 samplevalget(uint32 *ps,int32 data)
{
int32 sampleval;
int16 samplereturn;
sampleval=0;
if((*ps++)&0x00040000) sampleval=sampleval|0x8000;
if((*ps++)&0x00040000) sampleval=sampleval|0x4000;
if((*ps++)&0x00040000) sampleval=sampleval|0x2000;
if((*ps++)&0x00040000) sampleval=sampleval|0x1000;
if((*ps++)&0x00040000) sampleval=sampleval|0x0800;
if((*ps++)&0x00040000) sampleval=sampleval|0x0400;
if((*ps++)&0x00040000) sampleval=sampleval|0x0200;
if((*ps++)&0x00040000) sampleval=sampleval|0x0100;
if((*ps++)&0x00040000) sampleval=sampleval|0x0080;
if((*ps++)&0x00040000) sampleval=sampleval|0x0040;
if((*ps++)&0x00040000) sampleval=sampleval|0x0020;
if((*ps++)&0x00040000) sampleval=sampleval|0x0010;
if((*ps++)&0x00040000) sampleval=sampleval|0x0008;
if((*ps++)&0x00040000) sampleval=sampleval|0x0004;
if((*ps++)&0x00040000) sampleval=sampleval|0x0002;
if((*ps++)&0x00040000) sampleval=sampleval|0x0001;
sampleval=(sampleval>>2)&0x3fff;
if(sampleval&0x2000) sampleval=sampleval|0xffffc000;
sampleval=sampleval-data;//-0x4a;
samplereturn=sampleval;
return samplereturn;
}
void ADread(void)
{
uint32 *p;
uint32 *p1,data1;
int16 temp1;
p=&adtimer0[0];
*p++=T0TC;
p1=&advalget1[0];
data1=0x000000d0;//ch3
adcodewriteread1(p1,data1);
*p++=T0TC;
//adrelay4us();
*p++=T0TC;
IO0SET = ADCS_SET;
p1=&advalget3[0];
data1=0x000000a0;//ch2
while ((IO0PIN&MAX_EOC)==0);
adcodewriteread1(p1,data1);//CH3
//adrelay4us();
IO0SET = ADCS_SET;
p1=&advalget2[0];
data1=0x000000b0;//ch1
while ((IO0PIN&MAX_EOC)==0);
adcodewriteread1(p1,data1);//CH2
//adrelay4us();
IO0SET = ADCS_SET;
p1=&advalget1[0];
data1=0x000000e0;//ch7
while ((IO0PIN&MAX_EOC)==0);
adcodewriteread1(p1,data1);//CH1
//adrelay4us();
IO0SET = ADCS_SET;
p1=&advalget7[0];
data1=0x000000c0;//ch4
while ((IO0PIN&MAX_EOC)==0);
adcodewriteread1(p1,data1);//CH7
//adrelay4us();
IO0SET = ADCS_SET;
p1=&advalget4[0];
data1=0x000000f0;//ch8
while ((IO0PIN&MAX_EOC)==0);
adcodewriteread1(p1,data1);//CH4
//adrelay4us();
IO0SET = ADCS_SET;
p1=&advalget8[0];
data1=0x00000090;//ch6
while ((IO0PIN&MAX_EOC)==0);
adcodewriteread1(p1,data1);//CH8
//adrelay4us();
IO0SET = ADCS_SET;
p1=&advalget6[0];
data1=0x00000080;//ch5
while ((IO0PIN&MAX_EOC)==0);
adcodewriteread1(p1,data1);//CH6
//adrelay4us();
IO0SET = ADCS_SET;
p1=&advalget5[0];
data1=0x00000080;
while ((IO0PIN&MAX_EOC)==0);
adcodewriteread1(p1,data1);//CH5
*p++=T0TC;
IO0SET = ADCS_SET;
p1=&advalget1[0];
advaluetemp[0]=samplevalget(p1,wpd800_cfg.ChZero_Param.Ch0);//-0x4d;
p1=&advalget2[0];
advaluetemp[1]=samplevalget(p1,wpd800_cfg.ChZero_Param.Ch1);//-0x4d;
p1=&advalget3[0];
advaluetemp[2]=samplevalget(p1,wpd800_cfg.ChZero_Param.Ch2);//-0x4d;
p1=&advalget4[0];
advaluetemp[3]=samplevalget(p1,wpd800_cfg.ChZero_Param.Ch3);//-0x42;
p1=&advalget5[0];
advaluetemp[4]=samplevalget(p1,wpd800_cfg.ChZero_Param.Ch4);//-0x46;
p1=&advalget6[0];
advaluetemp[5]=samplevalget(p1,wpd800_cfg.ChZero_Param.Ch5);//-0x43;
p1=&advalget7[0];
advaluetemp[6]=samplevalget(p1,wpd800_cfg.ChZero_Param.Ch6);//-0x53;
p1=&advalget8[0];
advaluetemp[7]=samplevalget(p1,wpd800_cfg.ChZero_Param.Ch7);//-0x53;
*p++=T0TC;
//ia,ib,ic,i0,ua,ub,uc,u0,cia,cib,cic-->3ct 3ln i0 u0自产
//ia,ib,ic,i0,ua,ub,uc,u0,cia,cib,cic-->2ct 3ln i0外接 u0自产
//ia,ib,ic,i0,uab,ubc,uca,u0,cia,cib,cic-->3ct 2ln i0自产 无u0
//ia,ib,ic,i0,uab,ubc,uca,u0,cia,cib,cic-->2ct 2ln i0外接 无u0
//0--UC,1--UB,2--UA,3--IA,4--IC,5--IB,6--CIA,7--CIC
switch(wpd800_cfg.Wpd_Param.bType)
{
case 2://C
advalue[adsampcnt][0] = advaluetemp[3];//Ia
advalue[adsampcnt][2] = advaluetemp[4];//Ic
temp1 = 0-advaluetemp[3];
temp1 = temp1-advaluetemp[4];//-Ia-Ic
advalue[adsampcnt][1] = temp1;//Ib=-Ia-Ic
advalue[adsampcnt][3] = advaluetemp[5];//I0
break;
case 3://D
advalue[adsampcnt][0] = advaluetemp[3];//Ia
advalue[adsampcnt][1] = advaluetemp[5];//Ib
advalue[adsampcnt][2] = advaluetemp[4];//Ic
advalue[adsampcnt][3] = advaluetemp[1];//I0
break;
case 0://AB
case 1:
default:
advalue[adsampcnt][0] = advaluetemp[3];//Ia
advalue[adsampcnt][1] = advaluetemp[5];//Ib
advalue[adsampcnt][2] = advaluetemp[4];//Ic
temp1 = advaluetemp[3];
temp1 = temp1 + advaluetemp[5];
temp1 = temp1 + advaluetemp[4];
advalue[adsampcnt][3] = temp1;//I0
break;
/*
case 1:
case 2:
advalue[adsampcnt][0] = advaluetemp[3];//Ia
advalue[adsampcnt][1] = advaluetemp[5];//Ib
advalue[adsampcnt][2] = advaluetemp[4];//Ic
advalue[adsampcnt][3] = advaluetemp[1];//I0
break;
case 0:
default:
advalue[adsampcnt][0] = advaluetemp[3];//Ia
temp1 = advaluetemp[3];
advalue[adsampcnt][1] = advaluetemp[5];//Ib
temp1 = temp1 + advaluetemp[5];
advalue[adsampcnt][2] = advaluetemp[4];//Ic
temp1 = temp1 + advaluetemp[4];
advalue[adsampcnt][3] = temp1;//I0
break;
*/
}
switch(wpd800_cfg.Wpd_Param.bType)
{
case 1:
case 3:
advalue[adsampcnt][4] = advaluetemp[2];//Uab
advalue[adsampcnt][5] = 0-advaluetemp[0];//Ubc=0-Ucb
advalue[adsampcnt][6] = advaluetemp[0]-advaluetemp[2];//Uca
advalue[adsampcnt][4]=_fsadvalue(wpd800_cfg.CL_Param.KPreciUAB,advalue[adsampcnt][4]);//Uab
advalue[adsampcnt][5]=_fsadvalue(wpd800_cfg.CL_Param.KPreciUBC,advalue[adsampcnt][5]);//Ubc
advalue[adsampcnt][6]=_fsadvalue(wpd800_cfg.CL_Param.KPreciUCA,advalue[adsampcnt][6]);//Uca
advalue[adsampcnt][7] = 0x0;//U0
break;
case 0:
case 2:
default:
advalue[adsampcnt][4] = advaluetemp[2];//Ua
advalue[adsampcnt][5] = advaluetemp[1];//Ub
advalue[adsampcnt][6] = advaluetemp[0];//Uc
advalue[adsampcnt][4]=_fsadvalue(wpd800_cfg.CL_Param.KPreciUA,advalue[adsampcnt][4]);//Ua
advalue[adsampcnt][5]=_fsadvalue(wpd800_cfg.CL_Param.KPreciUB,advalue[adsampcnt][5]);//Ub
advalue[adsampcnt][6]=_fsadvalue(wpd800_cfg.CL_Param.KPreciUC,advalue[adsampcnt][6]);//Uc
temp1=advalue[adsampcnt][4];
temp1=temp1+advalue[adsampcnt][5];
temp1=temp1+advalue[adsampcnt][6];
advalue[adsampcnt][7]=temp1;//U0
break;
/*
case 1:
case 2:
temp1 = 0;
advalue[adsampcnt][4] = advaluetemp[2];//Uab
temp2 = advaluetemp[2];//Uab
temp3 = advaluetemp[0];//Ucb
temp1 = temp1 - temp3;//Ubc
advalue[adsampcnt][5] = temp1;//Ubc
temp3 = temp3 - temp2;//Uca
advalue[adsampcnt][6] = temp3;//Uca
advalue[adsampcnt][7] = 0x0;//U0
advalue[adsampcnt][4]=_fsadvalue(wpd800_cfg.CL_Param.KLUABCLCALIB,advalue[adsampcnt][4]);//Ua
advalue[adsampcnt][5]=_fsadvalue(wpd800_cfg.CL_Param.KLUBCCLCALIB,advalue[adsampcnt][5]);//Ua
advalue[adsampcnt][6]=_fsadvalue(wpd800_cfg.CL_Param.KLUCACLCALIB,advalue[adsampcnt][6]);//Ua
break;
case 0:
default:
temp1 = advaluetemp[2];//Ua
temp2 = advaluetemp[1];//Ub
temp3 = advaluetemp[0];//Uc
//temp4 = temp1 + temp2 + temp3;
advalue[adsampcnt][4] = temp1;//Ua
advalue[adsampcnt][5] = temp2;//Ub
advalue[adsampcnt][6] = temp3;//Uc
//advalue[adsampcnt][7] = temp4;//U0
advalue[adsampcnt][4]=_fsadvalue(wpd800_cfg.CL_Param.KLUACLCALIB,advalue[adsampcnt][4]);//Ua
advalue[adsampcnt][5]=_fsadvalue(wpd800_cfg.CL_Param.KLUBCLCALIB,advalue[adsampcnt][5]);//Ua
advalue[adsampcnt][6]=_fsadvalue(wpd800_cfg.CL_Param.KLUCCLCALIB,advalue[adsampcnt][6]);//Ua
temp1=advalue[adsampcnt][4];
temp1=temp1+advalue[adsampcnt][5];
temp1=temp1+advalue[adsampcnt][6];
advalue[adsampcnt][7]=temp1;//U0
break;
*/
}
advalue[adsampcnt][8] = advaluetemp[6];//cIa
advalue[adsampcnt][10] = advaluetemp[7];//cIc
temp1 = 0-advaluetemp[6];
temp1=temp1-advaluetemp[7];//cIb=-cIa-cIc
advalue[adsampcnt][9] = temp1;//cIb
advalue[adsampcnt][8]=_fsadvalue(wpd800_cfg.CL_Param.KPreciIA,advalue[adsampcnt][8]);//cIa
advalue[adsampcnt][9]=_fsadvalue(wpd800_cfg.CL_Param.KPreciIB,advalue[adsampcnt][9]);//cIb
advalue[adsampcnt][10]=_fsadvalue(wpd800_cfg.CL_Param.KPreciIC,advalue[adsampcnt][10]);//cIc
*p++=T0TC;
ftpointercnt = adsampcnt;
freqpointercnt = adsampcnt;
meapointercnt = adsampcnt;
dfpointercnt = adsampcnt;
adsampcnt++;
adsampcnt &= adsampnum;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -