forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

wujiazhi
2024-06-13 72def895431ad7a08e635b11f3da738e2b2c4618
Soft/low_pwr_test.c
New file
@@ -0,0 +1,260 @@
#include "low_pwr_test.h"
#include "adc.h"
#include "lcd.h"
#include "gpio.h"
#include "i2c.h"
#include "gprs.h"
#include "valve_control.h"
#include "power_manage.h"
#include "e2p.h"
#include "uart.h"
#include "spi.h"
#include "tim.h"
#include "master_slave_inter.h"
/*********************¾²Ì¬¹¦ºÄÄ¿±êΪ100uAÒÔÄÚ**************************************/
void Key_Awaken_Init(void)
{
   KEY_IO_Init();
}
void Pulse_Awaken_Init(void)
{
   Pulse_IO_Init();
   PULSE_OUT_OFF;
}
void Valve_Awaken_Init(void)
{
   Valve_IO_Init();
}
void Lcd_Awaken_Init(void)
{
   Lcd_IO_Init();
}
void I2c0_GPIO_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(I2C0CLK, ENABLE);
   CMU_OPCCR1_I2C0CKE_Setable(ENABLE);
}
void Main2Slave_GPIO_Usart3_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   CMU_PERCLK_SetableEx(UART3CLK,ENABLE);
   CMU_PERCLK_SetableEx(DMACLK, ENABLE);
   AltFunIO(MAIN_TX_PORT, MAIN_TX_PIN, ALTFUN_NORMAL);
   AltFunIO(MAIN_RX_PORT, MAIN_RX_PIN, ALTFUN_NORMAL);
   OutputIO(MAIN_TO_SLAVE_PORT,MAIN_TO_SLAVE_PIN,OUT_PUSHPULL);
   OutputIO(SYNC_PORT,SYNC_PIN,OUT_PUSHPULL);
}
void InfraRed_Uart0_Clk_Init(void)
{
   CMU_OPCCR1_UART0CKE_Setable(ENABLE);
   CMU_PERCLK_SetableEx(UART0CLK,ENABLE);
   CMU_PERCLK_SetableEx(DMACLK, ENABLE);
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   AltFunIO(IR_RX_PORT, IR_RX_PIN, ALTFUN_NORMAL);      //PF3 UART0 RX
   AltFunIO(IR_TX_PORT, IR_TX_PIN, ALTFUN_NORMAL);      //PF4 UART0 TX
}
void Gprs_GPIO_Uart5_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(UART5CLK,ENABLE);
   CMU_PERCLK_SetableEx(DMACLK, ENABLE);
   AltFunIO(GPRS_TX_PORT, GPRS_TX_PIN, ALTFUN_NORMAL);
   AltFunIO(GPRS_RX_PORT, GPRS_RX_PIN, ALTFUN_NORMAL);
   Gprs_IO_Init();
}
void E2p_GPIO_Clk_Init(void)
{
   E2p_IO_Init();
   CMU_PERCLK_SetableEx(SPI0CLK,ENABLE);
   AltFunIO(SPI0_PORT, SPI0_SCK_PIN, ALTFUN_NORMAL);    // SCK
   AltFunIO(SPI0_PORT, SPI0_MISO_PIN, ALTFUN_NORMAL);   // MISO
   AltFunIO(SPI0_PORT, SPI0_MOSI_PIN, ALTFUN_NORMAL);   // MOSI
}
void Lith_Battery_GPIO_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   AnalogIO(LIT_ADC_PORT,LIT_ADC_PIN);//ADC_IN4
   OutputIO(LITHIUM_DETECTION_PORT,LITHIUM_DETECTION_PIN,OUT_PUSHPULL);
//   AnalogIO(LIT_PWR_UNDER_PORT,LIT_PWR_UNDER_PIN);//ADC_5
}
void Alka_Battery_GPIO_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   AnalogIO(ALK_ADC_PORT,ALK_ADC_PIN);//ADC_IN8
//   OutputIO(ALKALI_DETECTION_PORT,ALKALI_DETECTION_PIN,OUT_PUSHPULL);
}
void CalMode_BasicTimer_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(BT1CLK, ENABLE);
}
void ErrorShow_TxtendTimer_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(ET1CLK, ENABLE);
}
void ValveCtl_BsTimer_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(BSTIMCLK, ENABLE);
   CMU_OPCCR2_BSTCKE_Setable(ENABLE);
}
void Botton_LPTimer_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(LPTCLK, ENABLE);
   CMU_OPCCR2_LPTCKE_Setable(ENABLE);
}
/*
Òý½ÅÉèÖÃΪ¸ß×è̬
*/
void MX_GPIO_CLK_DeInit(void)
{
   /*ÒÔÏÂÊÇһЩOUTPUT_PP»òINPUTºÍ·ÇÍâÉ踴Ó÷ÇÍⲿÖжϵÄÒý½Å*/
   CloseIO(GPIOG,GPIO_Pin_8 | GPIO_Pin_9 | PULSE_OUT_PIN | GPIO_Pin_2 | GPIO_Pin_3);
   CloseIO(GPIOF,LIT_PWR_UNDER_PIN | SPI0_MOSI_PIN | SPI0_MISO_PIN | SPI0_SCK_PIN | E2P_PWR_PIN | IR_RX_PIN | IR_TX_PIN);
   CloseIO(GPIOE,E2P_CS1_PIN | E2P_CS2_PIN | VALVE_CMD_A_PIN | VALVE_CMD_B_PIN | VALVE_CMD_C_PIN);
   CloseIO(GPIOD,LIT_ADC_PIN | LITHIUM_DETECTION_PIN | KEYB_S2_PIN);
   CloseIO(GPIOC,MAIN_TO_SLAVE_PIN | SLAVE_TO_MAIN_PIN | SYNC_PIN | MAIN_TX_PIN | MAIN_RX_PIN);
//   CloseIO(GPIOB,ALK_ADC_PIN | ALKALI_DETECTION_PIN | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11);
   CloseIO(GPIOA,KEYC_S3_PIN | VALVE_FORCED_OPEN_PIN | GPRS_RE_PIN | GPRS_SWITCH_PIN | GPRS_PWR_PIN | GPRS_TX_PIN | GPRS_RX_PIN);
   /************************ÒÔÏÂÊÇһЩϵͳÍâÉ踴Óò¿·Ö(°üº¬Ê±ÖÓ)******************************/
   /************************ÒÔÏÂÊÇʱÖÓ²¿·Ö£¨½µµÍÔËÐÐʱµÄ¹¦ºÄ£©************************/
//   // UART0(Infrared)
#ifdef RS232_PRINTF
#else
   CMU_OPCCR1_UART0CKE_Setable(DISABLE);
   CMU_PERCLK_SetableEx(UART0CLK,DISABLE);
#endif
   // UART3(MAIN_TO_SLAVE)
   CMU_PERCLK_SetableEx(UART3CLK,DISABLE);
   // UART5(Gprs)
   CMU_PERCLK_SetableEx(UART5CLK,DISABLE);
   // DMA
   CMU_PERCLK_SetableEx(DMACLK, DISABLE);
   // SPI0(E2P)
   CMU_PERCLK_SetableEx(SPI0CLK,DISABLE);
   // I2C0(LCD)
   CMU_PERCLK_SetableEx(I2C0CLK, DISABLE);
   CMU_OPCCR1_I2C0CKE_Setable(DISABLE);
   // ADC
   VRTC_ADCCR_CKE_Setable(DISABLE);
   // BasicTimer(ÓÃÓڼ춨ģʽϵÄÖÜÆÚ½ÚÅÄ)£¨ÉϵçÖÜÆÚµç³Ø¼ì²â£©
   CMU_PERCLK_SetableEx(BT1CLK, DISABLE);
   CMU_PERCLK_SetableEx(BT2CLK, DISABLE);
   // TxtendTimer(ÓÃÓÚ°´¼üÆô¶¯Ä³¹¦ÄÜʧ°ÜµÄ³ÖÐøÏÔʾʱ¼ä£¬È磺Çл»Ä£Ê½£¬Ô¶´«Éϱ¨µÈ)
   CMU_PERCLK_SetableEx(ET1CLK, DISABLE);
   // BsTimer(ÓÃÓÚ¿ª/¹Ø·§Ê±¼ä)
   CMU_PERCLK_SetableEx(BSTIMCLK, DISABLE);
   CMU_OPCCR2_BSTCKE_Setable(DISABLE);
   // LowPowerTimer(ÓÃÓÚ°´¼ü¿ò¼ÜµÄÖÜÆÚɨÃè)
   CMU_PERCLK_SetableEx(LPTCLK, DISABLE);
   CMU_OPCCR2_LPTCKE_Setable(DISABLE);
}
void DeepSleepMode(void)
{
#ifdef STOP_MODE
   MX_GPIO_CLK_DeInit();
   LPTIM_CR_EN_Setable(DISABLE);
   PMU_SleepCfg_InitTypeDef SleepCfg_InitStruct;
   CDIF_CR_INTF_EN_Setable(ENABLE);
   /*ϵ縴λÅäÖÃ*/
   //pdrºÍborÁ½¸öϵ縴λÖÁÉÙÒª´ò¿ªÒ»¸ö
   //µ±µçÔ´µçѹµÍÓÚϵ縴λʱ£¬Ð¾Æ¬»á±»¸´Î»×¡
   //pdrµçѹµµÎ»²»×¼µ«Êǹ¦ºÄ¼«µÍ(¼¸ºõÎÞ²âÁ¿£©
   //borµçѹµµÎ»×¼È·µ«ÊÇÐèÒªÔö¼Ó2uA¹¦ºÄ
   RMU_PDRCR_PDREN_Setable(ENABLE);      //´ò¿ªPDR
   RMU_PDRCR_PDRCFG_Set(RMU_PDRCR_PDRCFG_1P5V);//pdrµçѹµ÷Õûµ½1.4V
   RMU_BORCR_OFF_BOR_Setable(ENABLE);   //¹Ø±ÕBOR
   VRTC_RCMFCR_EN_Setable(DISABLE);//RCMF¹Ø±Õ
   //VRTC_RCLPCR_RCLP_OFF_Setable(ENABLE);//RCLP¹Ø±Õ
   CDIF_CR_INTF_EN_Setable(DISABLE);
   SleepCfg_InitStruct.PMOD = PMU_CR_PMOD_SLEEP;         //¹¦ºÄģʽÅäÖÃ
   SleepCfg_InitStruct.SLPDP = PMU_CR_SLPDP_DEEPSLEEP;         //deepsleep
   SleepCfg_InitStruct.CVS = DISABLE;                     //Äں˵çѹ½µµÍ¿ØÖÆ
   SleepCfg_InitStruct.SCR = 0;                        //M0ϵͳ¿ØÖƼĴæÆ÷£¬Ò»°ãÅäÖÃΪ0¼´¿É
   SleepCfg_InitStruct.TIA = PMU_WKTR_T1A_8US;//¿É±à³Ì¶îÍ⻽ÐÑÑÓ³Ù8us
   PMU_SleepCfg_Init(&SleepCfg_InitStruct);//ÐÝÃßÅäÖÃ
   IWDT_Clr();
   IWDT_Init();
   __WFI();//½øÈëÐÝÃß
   IWDT_Clr();
   RMU_BORCR_OFF_BOR_Setable(DISABLE);   //¹Ø±ÕBOR
#endif
}
/*Ô¶´«/·§¿Ø»á²úÉú´óµçÁ÷ʱÐè×ö³öÏàÓ¦ÏÞÖÆ*/
uint8_t LargeCurrent_LimitingProcess(void)
{
   uint8_t restult = 0;
   // GPRS¿ÕÏÐ/ÖØÆôʱ
   if ((gprs_soft_para_g.gprs_state == GPRS_IDLE) || (gprs_soft_para_g.gprs_state == GPRS_RESTART))
      restult |= 1;
   // ·§²»ÔÚ¿ª/¹ØÊ±
   if((__SYS_STATUS_BYTES_GET(valve_state) != VALVE_CLOSING) && (__SYS_STATUS_BYTES_GET(valve_state) != VALVE_OPENING))
      restult |= 2;
   return restult;
}
/*
·½·¨1£º°´ÊÖ²á˵Ã÷£¬½µµÍϵͳʱÖÓ,ÓÃÓÚ½µµÍ¾²Ì¬¹¦ºÄ¡££¨Ö÷°å02_127£©
´ð£º²âÊԵã¬ÏµÍ³Ê±ÖÓÓÉ36Mhz->12Mhz£¬¶ÔÓÚ½µµÍ¾²Ì¬¹¦ºÄÎÞЧ£¬¶¯Ì¬Çé¿öδ²â¡£
*/
/*
·½·¨2£º½ûÖ¹ËùÓй¦ÄÜ£¬Ö»¿ªÆôSTOPģʽ1£¬²é¿´¾²Ì¬¹¦ºÄ¡££¨Ö÷°å02_127£©
´ð£º²âÊԵ㬽ûÖ¹ËùÓй¦ÄÜ£¬Ö»¿ªÆôSTOPģʽ£¬¹¦ºÄ²»½µ·´Éýµ½500uA£¬Õâ½á¹û¿ÉÄÜ
ÓëÒý½Å״̬Óйء£
*/
/*
·½·¨3£º°´ÊÖ²á˵Ã÷£¬ÔÚ½øÈëSTOPģʽ3ǰ½ûÓÃADC£¬²é¿´¾²Ì¬¹¦ºÄ¡££¨Ö÷°å02_127£©
´ð£ºÎޱ仯£¬Õâ¿ÉÄÜ˵Ã÷µ±Ç°ADC±¾À´¾ÍδʹÓ㬿ÉÒÔÔÚADCʹÓúóÔÙ²âÊÔ¡£
*/
/*
·½·¨4£ºÔÚ½øÈëSTOPģʽ3ǰ¹Ø±Õ²»ÐèÒªµÄÍâÉèʱÖÓ£¬²é¿´¾²Ì¬¹¦ºÄ¡££¨Ö÷°å02_127£©
´ð£ºÎޱ仯¡£
*/
/*
·½·¨5£ºÔÚ½øÈëSTOPģʽ3ǰÉèÖÃËùÓÐÒý½ÅΪģÄâÊäÈ룬²é¿´¾²Ì¬¹¦ºÄ¡££¨Ö÷°å02_127£©
´ð£ºµçÁ÷ԼΪ130uA¡£µ«ÆÁÄ»×Ô¶¯µãÁÁ£¬¾­²âÊÔ²»ÉèÖÃKEY3£¨PC1£©ÎªÄ£ÄâÊäÈë¼´¿ÉϨÃðÆÁÄ»¡£
*/
/*
·½·¨6£ºÔÚ½øÈëSTOPģʽ3ǰÉèÖÃÒý½ÅΪģÄâÊäÈë+¹Ø±Õ²»ÐèÒªµÄÍâÉèʱÖÓ£¬²é¿´¾²Ì¬¹¦ºÄ¡££¨Ö÷°å02_127£©
´ð£ºÏÈÈ«²¿ÉèÖÃΪģÄâÊäÈëÔٹرÕʱÖÓ£¬¹¦ºÄÎޱ仯¡£
      ÏȹرÕʱÖÓÔÙÉèÖÃÄ£ÄâÊäÈ룬²»ÄܽøÈëÐÝÃߣ¬¹¦ºÄÔö¼Ó¡£
*/
/*
˵Ã÷1£ºÊÖ²á˵½µµÍÔËÐÐ״̬ÏµĹ¦ºÄ¿É¹Ø±ÕÎÞÐèʹÓõÄÍâÉèʱÖÓ£¬Ö±½Óµ÷ÓÃDeInitº¯ÊýºóÔÙInit£¬
ÍâÉ蹦ÄÜʧЧ£¬Ö±½Óµ÷ÓÃCLK_DISABLE£¬ÔËÐй¦ºÄ½µµÍ¡££¨Ö÷°å02_132£©
*/
/*
˵Ã÷2£ºÏȵ÷ÓÃDeInit¹Ø±ÕÍâÉèʱÖÓ+¸Ä±äÒý½Å״̬£¬¾²Ì¬¹¦ºÄÎޱ仯¡££¨Ö÷°å02_132£©
*/
/*
˵Ã÷3£ºKEY1_S2_Pin£¨¶¨ÒåB°´¼ü£©²»ÄÜÉèΪģÄâÊäÈ룬²»È»ÐÝÃßʱ»á½øÈëÒ»´ÎB¼ü»Øµ÷º¯Êý
*/