PowerManag_user.c 9.53 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();
55 56 57 58 59 60 61 62 63 64 65 66 67 68
    
    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();
    CAN_TX_Init();








69
    CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable);
70
    
71
    
李俭双's avatar
李俭双 committed
72
    DFlash_init();
73
    Data_Read_DiagPara();
李俭双's avatar
李俭双 committed
74
    Analog_Signal_Conv_Init();
李俭双's avatar
李俭双 committed
75
    BU98R10_Init();   
76 77
    Uart0_Init(115200);
    Protocol_KL30_Wakeup_Init();
李俭双's avatar
李俭双 committed
78
    BlueTooth_KL30_KL15_Wakeup_Init();
李俭双's avatar
李俭双 committed
79 80 81 82
    Sys_KL30_Init();
    Checkself_Init();
    Data_Vehicle_Speed_KL30_Init();
    Data_Engine_Speed_KL30_Wakeup_Init();
83
    Data_Coolant_Temp_KL30_Init();
李俭双's avatar
李俭双 committed
84 85
    LINE_IN_Init();
    Key_KL30_Init_EXample();
86
    //Light_Sensor_Init_Example();//注意顺序1
李俭双's avatar
李俭双 committed
87
    LED_Driver_Init_Example();//注意顺序2
88
    LED_Driver_Service_Immediate();
李俭双's avatar
李俭双 committed
89 90
    Data_User_Mileage_KL30Init();
    Fuel_KL30_Init();
91
    Data_Voltage_Init();
92
//    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400, 64000000);
93
    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 1260, 64000000);
李俭双's avatar
李俭双 committed
94 95
//    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400);
//    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400);
96 97 98
//    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
99
    TimerM_PWM_CH_Output_init(TIMERM_COUNTER1, TIMERM_CHB, ActiveLevel_High);
100
    Service_Interval_User_KL30Init();
李俭双's avatar
李俭双 committed
101
    Telltales_Init();
李俭双's avatar
李俭双 committed
102
    Telltales_UserInit();
李俭双's avatar
李俭双 committed
103
    MenuData_Unit_Init();
104
    
105 106 107 108 109 110 111
    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
112
    RTE_DEEPSLEEP_GPIO_Interrupt_Enable(WAKEUP_KL15_In,Trigger_Rising);
113
    FaultCode_Init();
114
// Data_TPMS_Processing_Service();
李俭双's avatar
李俭双 committed
115

116

李俭双's avatar
李俭双 committed
117 118 119 120 121
}
extern uint32_t PowerIgnOffTimeLine;
static void Power_Wakeup_Init(void)
{
    PowerIgnOffTimeLine = 0;
122
    //RTE_CLOCK_Select_Start();
李俭双's avatar
李俭双 committed
123
    Gpio_Init(Gpio_WakeUp_Init);
124
    Simulated_IIC_2_Init();
李俭双's avatar
李俭双 committed
125
    Can_Init();
126

127 128
    DFlash_init();
    Data_Read_DiagPara();
李俭双's avatar
李俭双 committed
129 130 131
    eeprom_StoreInfo_Init();
    Analog_Signal_Conv_Init();
    Data_User_Mileage_WakeupInit();
李俭双's avatar
李俭双 committed
132
    BU98R10_Init();    
李俭双's avatar
李俭双 committed
133
    Sys_WakeUp_Init();
134 135 136 137 138 139 140 141 142 143 144 145 146 147
    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();
    CAN_TX_Init();

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




李俭双's avatar
李俭双 committed
148 149 150 151 152 153
    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();
154
    MenuData_TCS_Init();
155
    //Light_Sensor_Init_Example();//注意顺序1
李俭双's avatar
李俭双 committed
156
    LED_Driver_Init_Example();//注意顺序2
157
    LED_Driver_Service_Immediate();
158
    Protocol_KL30_Wakeup_Init();
李俭双's avatar
李俭双 committed
159 160
    Uart0_Init(115200);
    BlueTooth_KL30_KL15_Wakeup_Init();
李俭双's avatar
李俭双 committed
161
    Fuel_KL30_Init();
162
    Data_Voltage_Init();
163
//    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400, 64000000);
164
    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 1260, 64000000);
李俭双's avatar
李俭双 committed
165 166
//	  TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400);
//    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400);
167 168 169
//    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
170 171
    TimerM_PWM_CH_Output_init(TIMERM_COUNTER1, TIMERM_CHB, ActiveLevel_High);
    Telltales_Init();
李俭双's avatar
李俭双 committed
172
    Telltales_UserInit();
173
    
李俭双's avatar
李俭双 committed
174
    RTE_DEEPSLEEP_GPIO_Interrupt_Enable(WAKEUP_KL15_In,Trigger_Rising);
175
    FaultCode_Init();
176
    Service_Interval_User_WakeupInit();
177

李俭双's avatar
李俭双 committed
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
}

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();
193
    //CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Disable);
李俭双's avatar
李俭双 committed
194 195 196
}

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

static void Power_Sleep_Init(void)
{
218 219
//    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400, 0);
//    TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400, 0);
李俭双's avatar
李俭双 committed
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
	//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;
    LED_Driver_Service_Immediate();
    LED_Driver_Init_Sleep();
    LED_Driver_Service();
    Analog_Signal_Conv_Stop();
238
    UART_DeInit(UART0);
239
    
李俭双's avatar
李俭双 committed
240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282
}

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;

    if (SYS_OPR_STAT_IGN_ON)
    {
        u8PowerSts = EM_IGN_ON_Init;
    }
    else
    {
        if ((Common_GetIgnOffTime() < 20000))
        {
            u8PowerSts = EM_IGN_OFF;
        }
        else
        {
            u8PowerSts = EM_IGN_Sleep_Init;
        }
    }

    return u8PowerSts;
}

283
extern uint16_t AliveCountTimer;
李俭双's avatar
李俭双 committed
284 285 286 287 288 289 290 291 292 293 294 295
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);
296
        AliveCountTimer = 0;
李俭双's avatar
李俭双 committed
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 337 338 339 340
    }
    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);
341
            Common_DataInit();
李俭双's avatar
李俭双 committed
342 343 344 345 346 347 348 349
            return u8PowerSts;
        }
    }
}

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

    return u8PowerSts;
}


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