?? app_boardlowpower.c
字號:
/*******************************************************************************/
/**
Copyright (c) 2007 Freescale Semiconductor
\file app_boardLowPower.c
\brief Convert MSDI Board II analog values, eSwitch current
\author Freescale Semiconductor
\author rc574c
\version 0.1
\date May/2007
*/
/*******************************************************************************/
/** S12X derivative information */
#include <MC9S12XEP100.h>
/** Variable types and common definitions */
#include "typedefs.h"
#include "main.h"
#include "app_boardLowPower.h"
#include "app_rkeRlt.h"
#include "des_MC33661.h"
#include "des_MC33742.h"
#include "des_MC33902.h"
#include "des_MC33972.h"
#include "des_MC33887.h"
#include "des_MC33879.h"
#include "des_MC15XS3400.h"
#include "des_MC35XS3400.h"
#include "des_MC10XS3412.h"
#include "lle_GPIO.h"
#include "lle_CPU.h"
#include "lle_TIME.h"
#include "lle_XGPWM.h"
#include "app_boardInit.h"
/* FreeMaster driver initialization */
extern void app_fmInit(void);
extern UINT8 fm_action13, timebaseFlag, deviceAPD, boardStatus[];
// LIN fault status updated by LIN SW driver
extern unsigned char failLIN;
UINT16 u16RESET;
/*******************************************************************************/
/**
* \brief APD devices sleep mode enter
* \author rc574c
* \param none
* \return void
*/
void app_apdDevSleep(void)
{
// MC33902 - CAN0, CAN1, CAN2, CAN4 in sleep mode
des_MC33902_SetMode(HSCAN_SLEEP);
// MC33661 - LIN2, LIN3, LIN4, LIN5 disable
des_MC33661_SetMode(LIN_SLEEP);
// MC15XS3400 - eSwitch disable
des_MC15XS3400_SetMode(XS_SLEEP);
// MC35XS3400 - eSwitch disable
des_MC35XS3400_SetMode(XS_SLEEP);
// MC10XS3412 - eSwitch disable
des_MC10XS3412_SetMode(XS_SLEEP);
// MC33879 - COSS Lite disable
des_MC33879_SetMode(COSS_SLEEP);
// MC33972 MSDI I from SG0 to SG8 wake-up enable
des_MC33972_Select_WakeUp_Interrupt(MSDI_I, MSDI_NONE, 0x01FF);
// MC33972 MSDI I sleep mode, scan time enabled, wake-up timer disabled
des_MC33972_SleepMode_IntTimers(MSDI_I,MSDI_NO_INTms|MSDI_SCAN_64ms);
// MC33972 MSDI II sleep mode, no scan and wake-up timer
des_MC33972_SleepMode_IntTimers(MSDI_II,MSDI_NO_INTms|MSDI_NO_SCAN);
// MC33696 - RKE still running, disconnect from MCU
MODE_MC33696 = 0;
// MC33887 - Door Lock disable
des_MC33887_Disable();
}
/*******************************************************************************/
/**
* \brief MC33742 and MCU sleep mode enter
* \author rc574c
* \param none
* \return void
*/
void app_sbcMcuSleep(void)
{
DISABLE_INTERRUPTS();
// MC33742 SLEEP mode enter
// Configure L0, L1, L2, L3 pins high level sensitive
des_MC33742_SetLxSens(SBC_L0L1HIGH|SBC_L2L3HIGH);
// CAN wakes-up SBC from sleep mode
des_MC33742_CAN_Wkup_SleepMode(ENABLE);
// CAN sleep enabled
des_MC33742_CAN_SleepMode(ENABLE);
// Clear BATFAIL bit in MCR by reading MCR
(void)des_MC33742_Read(SBC_MCR);
// Set NOSTOP in RCR register (allow sleep mode) and enable CAN sleep mode
des_MC33742_Write(SBC_RCR|SBC_NOSTOP|SBC_CANSLEEP);
// Enter SLEEP mode
des_MC33742_SetMode(SBC_SLEEP);
// Wait, until the power supply voltage does not disappear
while (1)
{
}
}
/*******************************************************************************/
/**
* \brief APD devices sleep mode enter, MC33742 stop and MCU wait mode enter
* \author rc574c
* \param none
* \return void
*/
void app_boardWaitMode(void)
{
// APD devices sleep mode
app_apdDevSleep();
// MC33742 STOP mode enter
// Lx inputs wake-up disabled
des_MC33742_SetLxSens(SBC_L0L1DISABLED|SBC_L2L3DISABLED);
// Watchdog disabled
des_MC33742_WDT_StopMode(DISABLED);
// CAN wake-up disabled
des_MC33742_CAN_Wkup_SleepMode(DISABLED);
// CAN disabled
des_MC33742_CAN_SleepMode(DISABLED);
// Clear BATFAIL bit in MCR by reading MCR
(void)des_MC33742_Read(SBC_MCR);
// Enter STOP mode
des_MC33742_SetMode(SBC_STOP);
// MCU in wait mode
lle_MCU_Wait_Mode();
// Init SBC, ESwitches, MSDIs, COSS, H-bridge, LIN interface, CAN interface
app_initAPDDevices();
// Init variables, clear freeMASTER variables
app_initSystemVariables();
// Initialize FreeMASTER driver
app_fmInit();
// Init MC33696 device and RKE driver
app_rkeInit();
// Init LIN and CAN SW drivers
app_initConnectivity();
}
/*******************************************************************************/
/**
* \brief APD devices sleep mode enter, MC33742 stop and MCU pseudo stop mode enter
* \author rc574c
* \param none
* \return void
*/
void app_boardPseudoStopMode(void)
{
// APD devices sleep mode
app_apdDevSleep();
// MC33742 STOP mode enter
// Lx inputs wake-up disabled
des_MC33742_SetLxSens(SBC_L0L1DISABLED|SBC_L2L3DISABLED);
// Watchdog disabled
des_MC33742_WDT_StopMode(DISABLED);
// CAN wake-up disabled
des_MC33742_CAN_Wkup_SleepMode(DISABLED);
// CAN disabled
des_MC33742_CAN_SleepMode(DISABLED);
// Clear BATFAIL bit in MCR by reading MCR
(void)des_MC33742_Read(SBC_MCR);
// Enter STOP mode
des_MC33742_SetMode(SBC_STOP);
// MCU pseudo stop mode
lle_MCU_PseudoStop_Mode();
/* Execution is stopped at this point, */
/* when XIRQ is asserted execution resumes */
lle_Init_XOSC(); /* Re-enable PLL */
// Init SBC, ESwitches, MSDIs, COSS, H-bridge, LIN interface, CAN interface
app_initAPDDevices();
// Init variables, clear freeMASTER variables
app_initSystemVariables();
// Initialize FreeMASTER driver
app_fmInit();
// Init MC33696 device and RKE driver
app_rkeInit();
// Init LIN and CAN SW drivers
app_initConnectivity();
}
/*******************************************************************************/
/**
* \brief APD devices sleep mode enter, MC33742 stop and MCU stop mode enter
* \author rc574c
* \param none
* \return void
*/
void app_boardFullStopMode(void)
{
// APD devices sleep mode
app_apdDevSleep();
// MC33742 STOP mode enter
// Lx inputs wake-up disabled
des_MC33742_SetLxSens(SBC_L0L1DISABLED|SBC_L2L3DISABLED);
// Watchdog disabled
des_MC33742_WDT_StopMode(DISABLED);
// CAN wake-up disabled
des_MC33742_CAN_Wkup_SleepMode(DISABLED);
// CAN disabled
des_MC33742_CAN_SleepMode(DISABLED);
// Clear BATFAIL bit in MCR by reading MCR
(void)des_MC33742_Read(SBC_MCR);
// Enter STOP mode
des_MC33742_SetMode(SBC_STOP);
// MCU stop mode
lle_MCU_FullStop_Mode();
/* Execution is stopped at this point, */
/* it resumes when interrupt is asserted */
lle_Init_XOSC(); /* Re-enable PLL */
// Init SBC, ESwitches, MSDIs, COSS, H-bridge, LIN interface, CAN interface
app_initAPDDevices();
// Init variables, clear freeMASTER variables
app_initSystemVariables();
// Initialize FreeMASTER driver
app_fmInit();
// Init MC33696 device and RKE driver
app_rkeInit();
// Init LIN and CAN SW drivers
app_initConnectivity();
}
/*******************************************************************************/
/**
* \brief Main board sleep mode enter
* \author rc574c
* \param none
* \return void
*/
void app_boardSleepMode(void)
{
// APD devices sleep mode
app_apdDevSleep();
// MCU + MC33742 SLEEP mode enter
app_sbcMcuSleep();
}
/*******************************************************************************/
/**
* \brief Select Main Board low power mode
* \author rc574c
* \param none
* \return void
*/
void app_boardLowPower(UINT8 cmd)
{
switch(cmd)
{
case LOWPWR_WAIT :
{
app_boardWaitMode();
break;
}
case LOWPWR_PSEUDOSTOP :
{
app_boardPseudoStopMode();
break;
}
case LOWPWR_FULLSTOP :
{
app_boardFullStopMode();
break;
}
case LOWPWR_SLEEP :
{
app_boardSleepMode();
break;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -