299 lines
8.6 KiB
C
299 lines
8.6 KiB
C
/******************************************************************************
|
||
* Include files
|
||
******************************************************************************/
|
||
#include "wdt.h"
|
||
#include "UWater_eeprom_driver.h"
|
||
#include "UWater_timer1uS_driver.h"
|
||
#include "UWater_uart_driver.h"
|
||
#include "UWater_rtcc_driver.h"
|
||
#include "UWater_adc_driver.h"
|
||
#include "UWater_lcd_driver.h"
|
||
#include "UWater_key_driver.h"
|
||
#include "UWater_lvd_driver.h"
|
||
#include "UWater_gpio_driver.h"
|
||
#include "UWater_lptimer_driver.h"
|
||
#include "UWater_clktrim_driver.h"
|
||
#include "UWater_gp22_driver.h"
|
||
#include "UWater_valve_driver.h"
|
||
#include "UWater_clktrim_driver.h"
|
||
//app
|
||
#include "sys_config.h"
|
||
#include "UWater_sys.h"
|
||
#include "UWater_gp22_app.h"
|
||
#include "UWater_pt_app.h"
|
||
#include "UWater_lcd_app.h"
|
||
#include "UWater_Rtcc_app.h"
|
||
#include "UWater_Power_app.h"
|
||
#include "UWater_ir_app.h"
|
||
#include "UWater_frame_app.h"
|
||
#include "UWater_Key_app.h"
|
||
#include "UWater_valve_app.h"
|
||
#include "UWater_DebugPrint.h"
|
||
|
||
#include "sys_processor.h"
|
||
#include "SOE.h"
|
||
#include "eeprom_app.h"
|
||
#include "nb_upload_monitor.h"
|
||
|
||
/**
|
||
******************************************************************************
|
||
** \brief Main function of project
|
||
**
|
||
** \return uint32_t return value, if needed
|
||
**
|
||
** This sample
|
||
**
|
||
******************************************************************************/
|
||
M0P_SYSCTRL_TypeDef *sys_clock;
|
||
u8 sleep_num = 0; //休眠管理查询次数
|
||
u8 McuIfSleep(void);
|
||
u8 togle = TRUE;
|
||
u8 low_power_flag = FALSE;//进行低功耗测试标志
|
||
u32 low_power_cnt =0;//用于记录低功耗测试响应秒中断时的次数
|
||
u8 rtcc_clk_source=0;
|
||
|
||
#define PRODUCTION //批量生产程序,关闭stop下DBG,量产打开
|
||
//#define LED_DEBUG //LED闪烁,调试使用
|
||
//extern void setuploadflag(void);
|
||
int32_t main(void)
|
||
{
|
||
//系统初始化
|
||
//软件看门狗
|
||
#if defined(PRODUCTION)
|
||
Sysctrl_SetPeripheralGate(SysctrlPeripheralWdt,TRUE);///< 开启WDT外设时钟
|
||
Wdt_Init((en_wdt_func_t)0,(en_wdt_time_t)10);//1.6s,超时时配置成复位,默认DeepSleep下工作
|
||
Wdt_Start(); //需要测试
|
||
#endif
|
||
Clk_Init();
|
||
UnusedGpioInit();
|
||
//模块初始化
|
||
/**driver init*/
|
||
Timer1usInit();
|
||
LcdInit();
|
||
PowerManageInitSys(); //电源管理初始化前必须先初始化ADC和Timer、RTCC
|
||
rtcc_clk_source = RtccInit();
|
||
LPTimer1Init(rtcc_clk_source);
|
||
EepInit();//lv
|
||
#if MODULE_BLE_USED
|
||
UartInit(BLE_UART_COM, BAUD38400, DATA_BIT_8, STOPBIT_1, UART_EVEN_PARITY, UART_LPUART_Disable);//初始化IDLE状态
|
||
#else
|
||
UartInit(NB_UART_COM, BAUD9600, DATA_BIT_8, STOPBIT_1, UART_NONE_PARITY, UART_LPUART_Disable);
|
||
#endif
|
||
LoadEepromImportantData();
|
||
SoeInit();//用到EE参数
|
||
Gp22Init();//用到EE参数
|
||
KeyInit();//用到EE参数
|
||
#if defined(VALVE)
|
||
ValveInit();
|
||
#endif
|
||
#if CARD_USED
|
||
card_init();
|
||
#endif
|
||
|
||
/**app init*/
|
||
IrInitApp();
|
||
KeyInitApp();
|
||
Gp30InitApp();
|
||
LcdInitApp();//放在 Gp30InitApp() 之后
|
||
TempInitApp();
|
||
SystemProcessorInit();
|
||
#if defined(LED_DEBUG)
|
||
u32 LED_tickstart = Timer1usGetTick();
|
||
#endif
|
||
while (1)
|
||
{
|
||
#if defined(PRODUCTION)
|
||
Wdt_Feed();
|
||
#endif
|
||
#if defined(LED_DEBUG)
|
||
u32 LED_tickstart_new = Timer1usGetTick();
|
||
if(LED_tickstart_new - LED_tickstart > 1000000) //1000ms
|
||
{
|
||
togle = !togle;
|
||
LED_tickstart = LED_tickstart_new;
|
||
Gpio_WriteOutputIO(LED_PORT,LED_PIN,togle);
|
||
}
|
||
#endif
|
||
//模块处理机
|
||
/**app machine*/
|
||
IrMachineApp();
|
||
KeyMachineApp();
|
||
Gp30MachineApp();
|
||
TempMachineApp();
|
||
FrameMachineApp(); //位于uart状态机前,lcd状态机后
|
||
#if (MODULE_BLE_USED)
|
||
ClktrimMainMachine();
|
||
BleMainMachine();
|
||
#else
|
||
NbiotMainMachine();
|
||
#endif
|
||
AppLifeTimeCountMachine();
|
||
SoeDealApp();
|
||
SystemProcessor();
|
||
LcdMachineApp();
|
||
#if defined(VALVE)
|
||
ValveMachineDriver();
|
||
ValveDealAppMachine();
|
||
#endif
|
||
#if CARD_USED
|
||
CardMachine();
|
||
#endif
|
||
AdcMachineDriver();
|
||
PowerMachineSys();
|
||
EeSysMachine();
|
||
UartMachineDriver();
|
||
KeyMachineDriver();
|
||
LcdMachineDriver();
|
||
Gp22MachineDriver();
|
||
PrintDataMachine();
|
||
//休眠处理先往后放
|
||
if(TRUE == McuIfSleep()) //休眠判断
|
||
{
|
||
sleep_num ++;
|
||
if(sleep_num > 1)
|
||
{
|
||
sleep_num = 0;
|
||
PowerUnSleepClearSumSys(); //长时间不休眠监视清0
|
||
|
||
//各个模块休眠前处理
|
||
KeyPreSleep();
|
||
Timer1usPreSleep();
|
||
EepPreSleep();
|
||
AdcPreSleep();
|
||
#if (MODULE_BLE_USED)
|
||
BlePreSleep();
|
||
#else
|
||
NbiotPreSleep();
|
||
UartPreSleep(NB_UART_COM);
|
||
#endif
|
||
UartPreSleep(IR_UART_COM);
|
||
IR_Uart_38K_PreSleep();
|
||
TempPreSleep();
|
||
Gp22PreSleep();
|
||
RtccPreSleep();
|
||
PowerPreSleepSys();
|
||
LcdPreSleep();
|
||
SysDealAppPreSleep();
|
||
#if defined(VALVE)
|
||
ValvePreSleep();
|
||
#endif
|
||
if(Gp30CheckBootloaderMsgApp()) //有远程升级则复位
|
||
{
|
||
Meter_ResetCountAdd(0x04);
|
||
NVIC_SystemReset(); //reset //重启
|
||
}
|
||
if(1 == FrameCheckMsgApp(LowPowerMsg)) //PCBA测试,进入低功耗
|
||
{
|
||
low_power_flag = TRUE;
|
||
FrameClearMsgApp(LowPowerMsg);
|
||
stc_gpio_cfg_t stcGpioCfg;
|
||
DDL_ZERO_STRUCT(stcGpioCfg);
|
||
stcGpioCfg.enDir = GpioDirIn;
|
||
stcGpioCfg.enPd = GpioPdEnable;
|
||
Gpio_Init(GP22_INT_GPIO, GP22_INT_PIN, &stcGpioCfg);
|
||
SCB->SCR |= 0x00000004u;
|
||
while(low_power_flag)
|
||
{
|
||
__asm("WFI");
|
||
Wdt_Feed();
|
||
low_power_cnt++;
|
||
if(low_power_cnt > 40)
|
||
{
|
||
low_power_cnt = 0;
|
||
low_power_flag = FALSE;
|
||
stc_gpio_cfg_t stcGpioCfg;
|
||
DDL_ZERO_STRUCT(stcGpioCfg);
|
||
stcGpioCfg.enDir = GpioDirIn;
|
||
stcGpioCfg.enPu = GpioPuEnable;
|
||
Gpio_Init(GP22_INT_GPIO, GP22_INT_PIN, &stcGpioCfg);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
//深度休眠模式唤醒 执行中断服务程序
|
||
SCB->SCR |= 0x00000004u;
|
||
for(;;)
|
||
{
|
||
__asm("WFI");
|
||
Wdt_Feed();
|
||
RecordCalculativeIntvalTimeLPTimer();
|
||
if(0x01 == (RtccCheckMsg()&0x01))//秒中断消息继续休眠
|
||
{
|
||
RtccClearMsg(0);
|
||
if((0x02 == (RtccCheckMsg()&0x02))//RTCC分钟消息
|
||
||(1 == GP22_Check_IntMsg()))//GP30中断消息
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
Timer1usWakeSleep();
|
||
AdcWakeSleep();//
|
||
RtccWakeSleep();//
|
||
EepWakeSleep();//
|
||
KeyWakeSleep();//
|
||
LcdWakeSleep();//
|
||
#if (MODULE_BLE_USED)
|
||
BleWakeSleep();
|
||
#else
|
||
NbiotWakeSleep();//
|
||
#endif
|
||
#if defined(VALVE)
|
||
ValveWakeSleep();//
|
||
#endif
|
||
}
|
||
}
|
||
}
|
||
}
|
||
u8 McuIfSleep(void)
|
||
{
|
||
if((FALSE == TimerIfSleep()) ||
|
||
(FALSE == AdcIfSleep()) ||
|
||
(FALSE == RtccIfSleep())||
|
||
(FALSE == PowerIfSleepSys())||
|
||
(FALSE == EepIfSleep()) ||
|
||
(TASK_BUSY == UartIfSleep(LPCOM0))||
|
||
(TASK_BUSY == UartIfSleep(LPCOM1))||
|
||
(FALSE == KeyIfSleep()) ||
|
||
(FALSE == LcdIfSleep()) ||
|
||
(TASK_BUSY == Gp22IfSleep())||
|
||
((FALSE == IrIfSleepApp())&&(1 != FrameCheckMsgApp(LowPowerMsg))) ||
|
||
(FALSE == KeyIfSleepApp()) ||
|
||
((FALSE == FrameIfSleepApp())&&(1 != FrameCheckMsgApp(LowPowerMsg))) ||
|
||
(FALSE == LcdIfSleepApp()) ||
|
||
(FALSE == Gp30IfSleepApp()&&(1 != FrameCheckMsgApp(LowPowerMsg)))||
|
||
(FALSE == TempIfSleepApp())||
|
||
(FALSE == SystemProcessorIfSleep()&&(1 != FrameCheckMsgApp(LowPowerMsg)))||
|
||
#if (MODULE_BLE_USED)
|
||
(FALSE == BleIfSleep())||
|
||
(TASK_BUSY == ClkTrimIfIdle())||
|
||
#else
|
||
((FALSE == NbiotIfSleep())&&(1 != FrameCheckMsgApp(LowPowerMsg)))||
|
||
#endif
|
||
((FALSE == AppLifeTimeCountMachineIfIdle())&&(1 != FrameCheckMsgApp(LowPowerMsg)))||
|
||
#if defined(VALVE)
|
||
(FALSE == ValveIfSleep())||
|
||
#endif
|
||
(FALSE == SaveSoeToEEIfIdle()&&(1 != FrameCheckMsgApp(LowPowerMsg)))||
|
||
(FALSE == UartRcvMachineIfIdle(LPCOM0))||
|
||
(FALSE == UartRcvMachineIfIdle(LPCOM1))||
|
||
(FALSE == UartSendMachineIfIdle(LPCOM0))||
|
||
(FALSE == UartSendMachineIfIdle(LPCOM1))||
|
||
(TASK_BUSY == EeReadImportantDataIfIdle())
|
||
)
|
||
{
|
||
return FALSE;
|
||
}
|
||
else
|
||
{
|
||
return TRUE;
|
||
}
|
||
}
|
||
/******************************************************************************
|
||
* EOF (not truncated)
|
||
******************************************************************************/
|