📄 systemprocess.c
字号:
void MetParConv(void)
{
Word2BCD_P(DM.ubActPower1,DM.ulActP1);
#ifdef TAMPER_DETECTION
Word2BCD_P(DM.ubActPower2,DM.ulActP2);
#endif
Word2BCD_P(DM.ubReActPower,DM.ulReActP);
Word2BCD_P(DM.ubAppPower,DM.ulAppP);
Word2BCD0(DM.ubV1RMS,DM.uiV1Rms);
Word2BCD2(DM.ubIRMS,DM.ulIRms);
Word2BCD0(DM.ubPF,DM.iPf);
Word2BCD1(DM.ubMainFr,DM.uiMainsFrequency);
}
void ESP_ENRDYFG_Process(void)
{
SystemEventFlag &= ~SYSTEM_ESP_ENRDYFG;
//DM.uiV1Rms = FractionalUnsignedMul(DM.Esp.uiV1Rms,SM.Cfg.Param.uiV1Gain);
//DM.Esp.ulIRms = DM.Esp.ulIRms>>5;
//DM.ulI1Rms = _CURRENT_MUL(DM.Esp.ulIRms,SM.Cfg.Param.uiI1Gain);
//DM.uiPf = _FRACTIONAL_UNSIGNED_MUL1(DM.Esp.uiPowerFct,40000);
//DM.uiV1Rms = (unsigned long)DM.Esp.uiV1Rms*KV1_100;
//DM.ulI1Rms = DM.Esp.ulIRms*KI1_100/POW_2_16;
//DM.uiV1Rms = DM.Esp.uiV1Rms + ((unsigned long)DM.Esp.uiV1Rms*SM.Cfg.Param.uiV1Gain)/POW_2_16;
//DM.uiV1Rms = ((unsigned long)DM.Esp.uiV1Rms*SM.Cfg.Param.uiV1Gain)/POW_2_15;
DM.uiV1Rms = ((unsigned long)DM.EspRs.uiV1Rms*SM.Cfg.EspPar.uiV1Gain)/POW_2_15;
DM.EspRs.ulIRms = DM.EspRs.ulIRms>>14;
DM.ulIRms = (unsigned long long)DM.EspRs.ulIRms*SM.Cfg.EspPar.ulIGain/POW_2_18;
DM.iPf = (unsigned long)DM.EspRs.uiPowerFct*10000/POW_2_14;
/*
if(DM.ulI1Rms>2)
{
DM.uiPf = (unsigned long)DM.Esp.uiPowerFct*1000/POW_2_14;
}
else
{
DM.uiPf = 0;
}
*/
if(DM.ullMainsCntBak==0)
{
DM.uiMainsFrequency = 0;
}
else
{
DM.ullMainsCntBak = DM.ullMainsCntBak*104857600;
DM.uiMainsFrequency = DM.ullMainsCntBak/DM.ulMainsPeriodBak;
}
MetParConv();
SystemEventFlag |= SYSTEM_LCD_FLAG;
}
void ESP_ILREACHEDFG_Process(void)
{
SystemEventFlag &= ~SYSTEM_ESP_ILREACHEDFG;
//_BCD3INC(SM.CMon.KwhPp.Fee[3]);
//SM.CMonChk = ChkSum((unsigned char *)&SM.CMon, sizeof(SM.CMon));
//if(SM.LcdCtl.PagePtr == LCDE1PULSEPAGE)SystemEventFlag |= SYSTEM_LCD_FLAG;
}
void ESP_ZXLDFG_Process(void)
{
//SystemEventFlag &= ~SYSTEM_ESP_ZXLDFG;
//DM.Esp.ulMainFrequency = (int)((float)POW_2_20/DM.Esp.ulMainFrequency*100);
//Word2BCD0(DM.ubMainFr,DM.Esp.ulMainFrequency);
//if(SM.LcdCtl.PagePtr == LCDMAINFRPAGE)SystemEventFlag |= SYSTEM_LCD_FLAG;
}
void WatchdogReset(void)
{
WDTCTL = WDT_ARST_1000;
DM.ucBtCycle++;
if(DM.ucBtCycle>1)
{
DM.ucBtCycle = 0;
SystemEventFlag |= SYSTEM_BT_FLAG;
}
SystemEventFlag &= ~SYSTEM_WATCHDOG_RESET;
}
//*********************************************************************************
//
//
//
//
//*********************************************************************************
void BT_Process(void)
{
_NOP();
SystemEventFlag &= ~SYSTEM_BT_FLAG;
if(((POWER_TEST_IN & POWER_TEST_BIT) == 0) && ((ESPCTL & ESPEN) == ESPEN))
{
MBOUT1= modeIDLE; // ESP_IDLE;
MBOUT0= mSET_MODE;
while ((ESP430_STAT0 & ACTIVEME) == ACTIVEME); // Wait for Idle mode
//P2OUT &= ~LEDDISP_CS_BIT;
#ifdef PULSE_TIMEA_GEN
TACCTL0 = 0;
#endif
if ((ESP430_STAT0 & ACTIVEME) == 0)
{
ESPCTL = 0;
// wait 10 clock till proper access to the SD16 is possilbe (9 clock are required)
_NOP();_NOP();_NOP();_NOP();_NOP();
_NOP();_NOP();_NOP();_NOP();_NOP();
DM.ulActP1 = 0;
DM.ulReActP = 0;
DM.ulAppP = 0;
DM.uiV1Rms = 0;
DM.ulIRms = 0;
DM.iPf = 0;
DM.uiMainsFrequency = 0;
MetParConv();
SCFI0 = FLLD_1; // Freq = 1.024MHz
SCFQCTL = 32 - 1;
FLL_CTL0 &= ~DCOPLUS;
//SystemEventFlag &= ~SYSTEM_ESP_ENRDYFG;
MeterRunState &= ~MAIN_VOLTAGE_ON;
SystemEventFlag |= SYSTEM_DATASAVE_FLAG;
}
}
else if(((POWER_TEST_IN & POWER_TEST_BIT) == POWER_TEST_BIT) && ((ESPCTL & ESPEN) == 0))
{
//P2OUT = LEDDISP_CS_BIT;
Goto_High_Freq();
Init_Analog_Front_End_ESP();
Init_ESP_Parameter(); //初始化ESP参数寄存器
Start_Measurement(); // 进入测量模式
MeterRunState |= MAIN_VOLTAGE_ON;
}
if(MeterRunState&SKIP_A_SECOND)
{
MeterRunState &= ~SKIP_A_SECOND;
}
else
{
ClkSys();
}
switch(SM.LcdCtl.Mode)
{
case 0:{
SM.LcdCtl.SecCtr++;
if(SM.LcdCtl.SecCtr>SM.LcdCtl.DispTime-1)
{
SM.LcdCtl.SecCtr=0;
SM.LcdCtl.PagePtr++;
if ( SM.LcdCtl.PagePtr>NomMaxPages )SM.LcdCtl.PagePtr=0;
}
}break;
case 1:{
_NOP();
}break;
}
SystemEventFlag |= SYSTEM_LCD_FLAG;
}
//*********************************************************************************
//
//
//
//
//*********************************************************************************
void CalibrationLcdPtr(void)
{
switch(DM.ucKeyCalibrationMode)
{
case 0://{}break;
case 1:
{
SM.LcdCtl.PagePtr=LcdPtr[DM.ucKeyCalibrationStep][0];
}break;
case 2://{}break;
case 3:
{
SM.LcdCtl.PagePtr=LcdPtr[DM.ucKeyCalibrationStep][1];
DM.tmpPtr[0]=LcdPtr[DM.ucKeyCalibrationStep][2];
}break;
#ifndef TAMPER_DETECTION
case 4:
{
SM.LcdCtl.PagePtr=NomMaxPages+1;
DM.tmpPtr[0]=2;
switch(DM.ucKeyCalibrationStep)
{
case 0:
{
}break;
case 1:
{
DM.ucCalibrationMode = 0x01;
}break;
}
}break;
case 5:
{
SM.LcdCtl.PagePtr=NomMaxPages+3;
DM.tmpPtr[0]=2;
switch(DM.ucKeyCalibrationStep)
{
case 0:
{
}break;
case 1:
{
DM.ucCalibrationMode = 0x02;
}break;
}
}break;
case 6:
{
SM.LcdCtl.PagePtr=NomMaxPages+1;
DM.tmpPtr[0]=2;
switch(DM.ucKeyCalibrationStep)
{
case 0:
{
}break;
case 1:
{
DM.ucCalibrationMode = 0x03;
}break;
}
}break;
case 7:
{
SM.LcdCtl.PagePtr=NomMaxPages+1;
DM.tmpPtr[0]=2;
switch(DM.ucKeyCalibrationStep)
{
case 0:
{
}break;
case 1:
{
DM.ucCalibrationMode = 0x04;
}break;
}
}break;
case 8:
{
SM.LcdCtl.PagePtr=NomMaxPages+3;
DM.tmpPtr[0]=2;
switch(DM.ucKeyCalibrationStep)
{
case 0:
{
}break;
case 1:
{
DM.ucCalibrationMode = 0x05;
}break;
}
}break;
#else
case 4:
{
SM.LcdCtl.PagePtr=NomMaxPages+1;
DM.tmpPtr[0]=2;
switch(DM.ucKeyCalibrationStep)
{
case 0:
{
}break;
case 1:
{
DM.ucCalibrationMode = 0x01;
}break;
}
}break;
case 5:
{
SM.LcdCtl.PagePtr=NomMaxPages+3;
DM.tmpPtr[0]=2;
switch(DM.ucKeyCalibrationStep)
{
case 0:
{
}break;
case 1:
{
DM.ucCalibrationMode = 0x02;
}break;
}
}break;
case 6:
{
SM.LcdCtl.PagePtr=NomMaxPages+3;
DM.tmpPtr[0]=2;
switch(DM.ucKeyCalibrationStep)
{
case 0:
{
}break;
case 1:
{
DM.ucCalibrationMode = 0x03;
}break;
}
}break;
case 7:
{
SM.LcdCtl.PagePtr=NomMaxPages+5;
DM.tmpPtr[0]=2;
switch(DM.ucKeyCalibrationStep)
{
case 0:
{
}break;
case 1:
{
DM.ucCalibrationMode = 0x04;
}break;
}
}break;
case 8:
{
SM.LcdCtl.PagePtr=NomMaxPages+3;
DM.tmpPtr[0]=2;
switch(DM.ucKeyCalibrationStep)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -