PowerManag_user.c 5.69 KB
Newer Older
时昊's avatar
时昊 committed
1 2
#include "PowerManagement.h"
#include "Components.h"
3
#include "FaultCode.h"
时昊's avatar
时昊 committed
4

5
RTC_Information_st_t g_stRTCInformation;
时昊's avatar
时昊 committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

static void Power_KL30_Init(void);
static void Power_Wakeup_Init(void);
static void Power_LVP_Init(void);
static void Power_OVP_Init(void);
static void Power_IG_OFF_Init(void);
static void Power_IG_ON_Init(void);
static void Power_Sleep_Init(void);
static Power_Status_em Power_Stay_ON(void);
static Power_Status_em Power_Stay_OFF(void);
static Power_Status_em Power_Stay_Protect(void);
static Power_Status_em Power_Stay_Sleep(void);

static const st_PowerGroup g_stPwrTasks = {
    Power_KL30_Init,
    Power_IG_OFF_Init,
    Power_Stay_OFF,
    Power_Sleep_Init,
    Power_Stay_Sleep,
    Power_Wakeup_Init,
    Power_IG_ON_Init,
    Power_Stay_ON,
    Power_LVP_Init,
    Power_OVP_Init,
    Power_Stay_Protect,
};

void PwrMemInit(void)
{
    PowerMemInit(&g_stPwrTasks);
}

static void Power_KL30_Init(void)
{
//    ClearODO_Flag = 0;
41
    UART_Channel_Config_st_t loc_config;
时昊's avatar
时昊 committed
42
    eeprom_StoreInfo_Init();
43 44 45 46 47
    loc_config.u32UARTChEn            = 1U;
    loc_config.u32UARTbps             = 115200U;
    loc_config.pfnUARTConfirmCallBack = NULL;
    loc_config.pfnUARTReadMsgCallBack = Amt630hUartRecvData;
    RTE_UART_Init(UART_CH2, &loc_config);
48
    Common_DataInit();
时昊's avatar
时昊 committed
49
    Analog_Signal_Conv_Init();
50
    Sys_KL30_Init();
51 52
    Data_Vehicle_Speed_KL30_Wakeup_Init();
    Data_Engine_Speed_KL30_Wakeup_Init();
53 54
    LINE_IN_Init();
    Key_KL30_Init_EXample();
时昊's avatar
时昊 committed
55
    Data_User_Mileage_KL30Init();
56 57
    Fuel_KL30_Init();
    Amt630hInit();
时昊's avatar
时昊 committed
58
    Telltales_Init();
59 60
    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400, 64000000);
    TimerM_PWM_CH_Output_init(TIMERM_COUNTER1, TIMERM_CHB, ActiveLevel_High);
61 62
    g_stRTCInformation.u8RTCSecond = 0;
	g_stRTCInformation.u8RTCMinute = 0;
时昊's avatar
时昊 committed
63
	g_stRTCInformation.u8RTCHour = 8;          
64 65 66
	g_stRTCInformation.u8RTCDayOfMonth = 1;
	g_stRTCInformation.u8RTCMonth = 1;   
	g_stRTCInformation.u8RTCYear = 20; 
时昊's avatar
时昊 committed
67
    RTE_RTC_Init(g_stRTCInformation);
时昊's avatar
时昊 committed
68
    Menu_User_Init();
69
    Can_Init();
时昊's avatar
时昊 committed
70
    Protocol_KL30_Wakeup_Init();
71
    RTE_DEEPSLEEP_GPIO_Interrupt_Enable(KL15_AD_IN, Trigger_Rising);
72
    FaultCode_Init();
时昊's avatar
时昊 committed
73
}
74

时昊's avatar
时昊 committed
75 76
static void Power_Wakeup_Init(void)
{
77
    Common_DataInit();
时昊's avatar
时昊 committed
78 79 80 81
    Gpio_Init(Gpio_WakeUp_Init);
    eeprom_StoreInfo_Init();
    Analog_Signal_Conv_Init();
    Data_User_Mileage_WakeupInit();
82 83 84 85 86 87 88 89 90 91
    Sys_WakeUp_Init();
    Data_Vehicle_Speed_KL30_Wakeup_Init();
    Data_Engine_Speed_KL30_Wakeup_Init();
    LINE_IN_Init();
    Key_Wakeup_Init_EXample();
    Line_In_KL15_ON_Init();
    Fuel_KL30_Init();
    Amt630hInit();
    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400, 64000000);
    TimerM_PWM_CH_Output_init(TIMERM_COUNTER1, TIMERM_CHB, ActiveLevel_High);
时昊's avatar
时昊 committed
92
    Telltales_Init();
时昊's avatar
时昊 committed
93 94
    Key_KL30_Init_EXample();    
    Menu_User_WAKEUP();
95
    Can_Init();
时昊's avatar
时昊 committed
96
    Protocol_KL30_Wakeup_Init();
97
    RTE_DEEPSLEEP_GPIO_Interrupt_Enable(KL15_AD_IN, Trigger_Rising);
98
    FaultCode_Init();
时昊's avatar
时昊 committed
99 100 101 102 103 104 105 106 107 108 109 110 111 112
}

static void Power_LVP_Init(void)
{
    
}
static void Power_OVP_Init(void)
{
    
}

static void Power_IG_OFF_Init(void)
{
   Line_In_KL15_OFF_Init();
113
   RTE_GPIO_Set_Level(Blacklight_PWM, 0);
时昊's avatar
时昊 committed
114 115 116 117 118 119
}

static void Power_IG_ON_Init(void)
{
//    ClearODO_Flag = 0;
   Line_In_KL15_ON_Init();
120
   Telltales_KL15_Init();
时昊's avatar
时昊 committed
121
   Fuel_KL15_Init();
122
   RTE_GPIO_Set_Level(Blacklight_PWM, 1);
123
   FaultCode_Init();
时昊's avatar
时昊 committed
124 125 126 127 128
}

static void Power_Sleep_Init(void)
{
    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400, 0);
129
	rte_can_deinit(CAN_CH_0);
时昊's avatar
时昊 committed
130 131 132
	TMM0_Stop();
	TMM1_Stop();
    TMM_All_Stop();
133
    RTE_ADC_DeInit();
时昊's avatar
时昊 committed
134
    Gpio_Init(Gpio_Sleep_Init);
135
    AMT630H_Sleep();
136
    Analog_Signal_Conv_Stop();
137 138 139 140
    if (RTE_GPIO_Get_Level(KL15_AD_IN) == 0)/* KL15 */
    {
        RTE_DEEPSLEEP_Enable();
    }
时昊's avatar
时昊 committed
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
}

static Power_Status_em Power_Stay_ON(void)
{
    Power_Status_em u8PowerSts;
    u8PowerSts = EM_IGN_ON;

   if (SYS_OPR_STAT_IGN_OFF)
   {
       u8PowerSts = EM_IGN_OFF_Init;
   }

   if (SYS_OPR_STAT_HALT)
   {
       u8PowerSts = EM_IGN_LIMIT;
   }

    return u8PowerSts;
}
static Power_Status_em Power_Stay_OFF(void)
{
    Power_Status_em u8PowerSts;
    u8PowerSts = EM_IGN_OFF;

165 166 167 168 169 170
    if (SYS_OPR_STAT_IGN_ON)
    {
        u8PowerSts = EM_IGN_ON_Init;
    }
    else
    {
171
        if ((Common_GetIgnOffTime() < 1000))
172 173 174 175 176 177
        {
            u8PowerSts = EM_IGN_OFF;
        }
        else
        {
            //igoff大于1s且下15电才进休眠,否则一直保持在igoff状态
178
            //if(Sys_Read_KL15_Voltage() < 5000)
179
            {
180
               u8PowerSts = EM_IGN_Sleep_Init;
181 182 183
            }
        }
    }
时昊's avatar
时昊 committed
184 185 186 187 188 189

    return u8PowerSts;
}

static Power_Status_em Power_Stay_Protect(void)
{
190
    Power_Status_em u8PowerSts;
时昊's avatar
时昊 committed
191
//    static uint8_t  i;
192
    static uint8_t  Delaycnt;
时昊's avatar
时昊 committed
193 194


195 196
    /* 关闭所有外设,坪保留AD采集,电溝状思切�? */
    {
时昊's avatar
时昊 committed
197
        TimerM_PWM_set_duty(TIMERM_COUNTER1, TIMERM_CHB, 0);
198
        CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Disable);
199 200 201 202 203 204 205 206 207 208 209 210
    }
    u8PowerSts = EM_IGN_OFF_Init;
    /* 电溝模弝正常 */
    for ( ;; )
    {
        RTE_WDT_Clear();
        Gen_TimeDelay(2000u, 50u);
        Analog_Signal_Conv_Service();
        Sys_Status_Update_Service();
 
        if ( SYS_OPR_STAT_RUN )
        {
211
            CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable);
212 213 214 215
            return u8PowerSts;
        }
 
        //进入异常电压,电源库里直接将15电等于0,则直接退出,状态是igoff,下15则进入休眠
216 217 218 219
        // if ( SYS_OPR_STAT_IGN_OFF )
        // {
        //    break;
        // }
220
    }
时昊's avatar
时昊 committed
221 222 223 224 225 226
}

static Power_Status_em Power_Stay_Sleep(void)
{
    Power_Status_em u8PowerSts = EM_IGN_Sleep;

227 228 229 230 231 232 233 234 235
    while (1)
    {
        RTE_WDT_Clear();
        if (RTE_GPIO_Get_Level(KL15_AD_IN))/* KL15 */
        {
            u8PowerSts = EM_IGN_Wakeup;
            break;
        }
    }
时昊's avatar
时昊 committed
236 237 238 239 240

    return u8PowerSts;
}