PowerManag_user.c 9.42 KB
Newer Older
李俭双's avatar
李俭双 committed
1 2 3 4 5
#include "PowerManagement.h"
#include "PowerManag_user.h"
#include "Components.h"
#include "Application.h"
#include "RTE.h"
6 7
#include "UDS_ISO14229_Services.h"
#include "timm.h"
8

9
RTC_Information_st_t RTCInformation;
李俭双's avatar
李俭双 committed
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 41 42 43 44 45 46 47 48

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);

extern uint8_t u8LEDDriverCheckCount;

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;
    Gpio_Init(Gpio_KL30_Init);
49
    Simulated_IIC_2_Init();
李俭双's avatar
李俭双 committed
50 51
    eeprom_StoreInfo_Init();
    Can_Init();
52

53
    Data_TPMS_KL30_Init ();
54
    CAN_TX_Count_Init();
陈家乐's avatar
陈家乐 committed
55
    CAN_TX_Init();
56 57 58 59 60 61 62 63








64
    CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable);
65
    
66
    
李俭双's avatar
李俭双 committed
67
    DFlash_init();
68
    Data_Read_DiagPara();
李俭双's avatar
李俭双 committed
69
    Analog_Signal_Conv_Init();
李俭双's avatar
李俭双 committed
70
    BU98R10_Init();   
71 72
    Uart0_Init(115200);
    Protocol_KL30_Wakeup_Init();
李俭双's avatar
李俭双 committed
73
    BlueTooth_KL30_KL15_Wakeup_Init();
李俭双's avatar
李俭双 committed
74 75 76 77
    Sys_KL30_Init();
    Checkself_Init();
    Data_Vehicle_Speed_KL30_Init();
    Data_Engine_Speed_KL30_Wakeup_Init();
78
    Data_Coolant_Temp_KL30_Init();
李俭双's avatar
李俭双 committed
79 80
    LINE_IN_Init();
    Key_KL30_Init_EXample();
81
    //Light_Sensor_Init_Example();//注意顺序1
李俭双's avatar
李俭双 committed
82
    LED_Driver_Init_Example();//注意顺序2
83
    //LED_Driver_Service_Immediate();
李俭双's avatar
李俭双 committed
84 85
    Data_User_Mileage_KL30Init();
    Fuel_KL30_Init();
86
    Data_Voltage_Init();
87
//    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400, 64000000);
88
    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 1260, 64000000);
李俭双's avatar
李俭双 committed
89 90
//    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400);
//    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400);
91 92 93
//    TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHB, ActiveLevel_High);
//    TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHC, ActiveLevel_High);
//    TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHD, ActiveLevel_High);
李俭双's avatar
李俭双 committed
94
    TimerM_PWM_CH_Output_init(TIMERM_COUNTER1, TIMERM_CHB, ActiveLevel_High);
95
    Service_Interval_User_KL30Init();
李俭双's avatar
李俭双 committed
96
    Telltales_Init();
李俭双's avatar
李俭双 committed
97
    Telltales_UserInit();
李俭双's avatar
李俭双 committed
98
    MenuData_Unit_Init();
99
    
100 101 102 103 104 105 106
    RTCInformation.u8RTCSecond = 0;
	RTCInformation.u8RTCMinute = 0;
	RTCInformation.u8RTCHour = 0;          
	RTCInformation.u8RTCDayOfMonth = 1;
	RTCInformation.u8RTCMonth = 1;   
	RTCInformation.u8RTCYear = 20; 
    RTE_RTC_Init(RTCInformation);
李俭双's avatar
李俭双 committed
107
    RTE_DEEPSLEEP_GPIO_Interrupt_Enable(WAKEUP_KL15_In,Trigger_Rising);
108
    FaultCode_Init();
109
// Data_TPMS_Processing_Service();
110
    Common_DataInit();
111

李俭双's avatar
李俭双 committed
112 113 114 115 116
}
extern uint32_t PowerIgnOffTimeLine;
static void Power_Wakeup_Init(void)
{
    PowerIgnOffTimeLine = 0;
117
    //RTE_CLOCK_Select_Start();
李俭双's avatar
李俭双 committed
118
    Gpio_Init(Gpio_WakeUp_Init);
119
    Simulated_IIC_2_Init();
李俭双's avatar
李俭双 committed
120
    Can_Init();
121

122 123
    DFlash_init();
    Data_Read_DiagPara();
李俭双's avatar
李俭双 committed
124 125 126
    eeprom_StoreInfo_Init();
    Analog_Signal_Conv_Init();
    Data_User_Mileage_WakeupInit();
李俭双's avatar
李俭双 committed
127
    BU98R10_Init();    
李俭双's avatar
李俭双 committed
128
    Sys_WakeUp_Init();
129 130 131 132 133 134
    Data_TPMS_KL15_WAKE_UP_Init();

    CanMSg_XMS_Analysis(&CAN_CH0_CanMsgOp,2u);
        CanMSg_XMS_Analysis(&CAN_CH0_CanMsgOp,2u);
            CanMSg_XMS_Analysis(&CAN_CH0_CanMsgOp,2u);
    Data_TPMS_Processing_Service();
陈家乐's avatar
陈家乐 committed
135
    CAN_TX_Init();
136 137 138 139 140 141 142

    CAN_TX_Count_Init();
    CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable);




李俭双's avatar
李俭双 committed
143 144 145 146 147 148
    Data_Vehicle_Speed_KL30_Init();
    Data_Vehicle_Speed_Wakeup_Init();
    Data_Engine_Speed_KL30_Wakeup_Init();
    LINE_IN_Init();
    Key_KL30_Init_EXample();
    Line_In_KL15_ON_Init();
149
    MenuData_TCS_Init();
150
    //Light_Sensor_Init_Example();//注意顺序1
李俭双's avatar
李俭双 committed
151
    LED_Driver_Init_Example();//注意顺序2
152
    //LED_Driver_Service_Immediate();
153
    Protocol_KL30_Wakeup_Init();
李俭双's avatar
李俭双 committed
154 155
    Uart0_Init(115200);
    BlueTooth_KL30_KL15_Wakeup_Init();
李俭双's avatar
李俭双 committed
156
    Fuel_KL30_Init();
157
    Data_Voltage_Init();
158
//    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400, 64000000);
159
    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 1260, 64000000);
李俭双's avatar
李俭双 committed
160 161
//	  TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400);
//    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400);
162 163 164
//    TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHB, ActiveLevel_High);
//    TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHC, ActiveLevel_High);
//    TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHD, ActiveLevel_High);
李俭双's avatar
李俭双 committed
165 166
    TimerM_PWM_CH_Output_init(TIMERM_COUNTER1, TIMERM_CHB, ActiveLevel_High);
    Telltales_Init();
李俭双's avatar
李俭双 committed
167
    Telltales_UserInit();
168
    
李俭双's avatar
李俭双 committed
169
    RTE_DEEPSLEEP_GPIO_Interrupt_Enable(WAKEUP_KL15_In,Trigger_Rising);
170
    FaultCode_Init();
171
    Service_Interval_User_WakeupInit();
172

173
    Common_DataInit();
李俭双's avatar
李俭双 committed
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
}

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

static void Power_IG_OFF_Init(void)
{
    Line_In_KL15_OFF_Init();
    Checkself_Init();
189
    //CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Disable);
李俭双's avatar
李俭双 committed
190 191 192
}

static void Power_IG_ON_Init(void)
193
{       
李俭双's avatar
李俭双 committed
194 195 196
    Checkself_Init();
    Line_In_KL15_ON_Init();
    Telltales_KL15_Init();
李俭双's avatar
李俭双 committed
197
    Telltales_UserInit();
李俭双's avatar
李俭双 committed
198
    Fuel_KL15_Init();
199
    Data_Voltage_Init();
200
    MenuData_TCS_Init();
201
    Data_Coolant_Temp_KL15_Init();
202 203
    BlueTooth_KL30_KL15_Wakeup_Init(); 
    Data_TPMS_KL15_WAKE_UP_Init();   
204
    CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable);
205 206
    DFlash_init();
    Data_Read_DiagPara();
207
    FaultCode_Init();
陈家乐's avatar
陈家乐 committed
208 209
    
    CAN_TX_Count_Init();
李俭双's avatar
李俭双 committed
210 211 212 213
}

static void Power_Sleep_Init(void)
{
214 215
//    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400, 0);
//    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400, 0);
李俭双's avatar
李俭双 committed
216 217 218 219 220 221 222 223 224 225 226 227 228 229
	//TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHB, ActiveLevel_High);
    //TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHC, ActiveLevel_High);
    //TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHD, ActiveLevel_High);
    //TimerM_PWM_CH_Output_init(TIMERM_COUNTER1, TIMERM_CHB, ActiveLevel_High);
	//RTC_Stop();
	rte_can_deinit(CAN_CH_0);
	TMM0_Stop();
	TMM1_Stop();
    TMM_All_Stop();
    RTE_ADC_DeInit();
	//CGC->CSC = 1 ;   //HIOSTOP = 1
	BU98R10_Shutdown();
    Gpio_Init(Gpio_Sleep_Init);
    u8LEDDriverCheckCount = 0;
230
    //LED_Driver_Service_Immediate();
李俭双's avatar
李俭双 committed
231 232 233
    LED_Driver_Init_Sleep();
    LED_Driver_Service();
    Analog_Signal_Conv_Stop();
234
    UART_DeInit(UART0);
235
    
李俭双's avatar
李俭双 committed
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
}

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;

260
    if (Common_Get_IG_Sts( ) == COMMON_POWER_ON)
李俭双's avatar
李俭双 committed
261 262 263 264 265
    {
        u8PowerSts = EM_IGN_ON_Init;
    }
    else
    {
266
        if ((Common_GetIgnOffTime() < 5000))
李俭双's avatar
李俭双 committed
267 268 269 270 271 272 273 274 275 276 277 278
        {
            u8PowerSts = EM_IGN_OFF;
        }
        else
        {
            u8PowerSts = EM_IGN_Sleep_Init;
        }
    }

    return u8PowerSts;
}

279
extern uint16_t AliveCountTimer;
李俭双's avatar
李俭双 committed
280 281 282 283 284 285 286 287 288 289 290 291
static Power_Status_em Power_Stay_Protect(void)
{
    Power_Status_em u8PowerSts;
    static uint8_t  i;
    static uint8_t  Delaycnt;
    static uint8_t LED;
    static uint8_t LEDDriverCheckCount = 0U;
    /* 关闭所有外设,坪保留AD采集,电溝状思切�? */
    {
        BU98R10_Shutdown( );
        TimerM_PWM_set_duty(TIMERM_COUNTER1, TIMERM_CHB, 0);
        CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Disable);
292
        AliveCountTimer = 0;
李俭双's avatar
李俭双 committed
293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336
    }
    u8PowerSts = EM_IGN_OFF_Init;
    /* 电溝模弝正常 */
    for ( ;; )
    {
        RTE_WDT_Clear();
        Gen_TimeDelay(2000u, 50u);
        for(LED = 0u; LED < LampCh0_MAX; LED++)
        {
            LED_Driver_Channel_Set(0u, LED, 0u);
        }

        for ( i = 0; i < LED_Max; i++ )
        {
            Telltales_DiagCtrl(i, 0x00u);
        }
        LED_Driver_Service( );
        Analog_Signal_Conv_Service();
        Sys_Status_Update_Service();

        Delaycnt++;
        if ( Delaycnt >= 5u )
        {
            Delaycnt = 0u;
            LED_Driver_Scan_Refresh( );
            if ( LEDDriverCheckCount >= 10U )
            {
                LEDDriverCheckCount = 0U;
                LED_Driver_Work_Check( );
            }
            else
            {
                LEDDriverCheckCount++;
            }
        }

        if ( SYS_OPR_STAT_RUN )
        {
            for ( i = 0; i < LED_Max; i++ )
            {
                Telltales_DiagRelease(i);
            }
            BU98R10_Init( );
            CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable);
337
            Common_DataInit();
李俭双's avatar
李俭双 committed
338 339 340 341 342 343 344 345
            return u8PowerSts;
        }
    }
}

static Power_Status_em Power_Stay_Sleep(void)
{
    Power_Status_em u8PowerSts = EM_IGN_Sleep;
346 347
    
    
李俭双's avatar
李俭双 committed
348 349 350
    while (1)
    {
        RTE_WDT_Clear();
351 352 353 354 355
        if(RTE_GPIO_Get_Level(WAKEUP_KL15_In) == 0)
        {
            RTE_DEEPSLEEP_Enable();
        }
        else //(RTE_GPIO_Get_Level(WAKEUP_KL15_In))/* KL15 */
李俭双's avatar
李俭双 committed
356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372
        {
            u8PowerSts = EM_IGN_Wakeup;
            break;
        }
    }

    return u8PowerSts;
}


void Sys_Startup_Init(void)
{
    uint8_t u8StartuoMode = 0;
    PwrMemInit( );
    Power_Management_Init(u8StartuoMode);
}