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

📄 systemprocess.c

📁 MSP430FE42X复费率电表DEMO(编译器 IAR 3.42A)
💻 C
📖 第 1 页 / 共 2 页
字号:
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 + -