⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 app_boardlowpower.c

📁 BCM 控制demo源代码
💻 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 + -