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

📄 app_boardstatus.c

📁 BCM 控制demo源代码
💻 C
字号:
/*******************************************************************************/
/**
Copyright (c) 2007 Freescale Semiconductor
\file       app_boardStatus.c
\brief      Main board status  
\author     Freescale Semiconductor
\author     rc574c
\version    0.1
\date       May/2007
*/
/*******************************************************************************/

/** S12X derivative information */ 
#include <MC9S12XEP100.h> 

#include "app_boardStatus.h"
#include "main.h"
#include "des_MC33742.h"
#include "des_MC33879.h"
#include "des_MC15XS3400.h"
#include "lle_GPIO.h"

// Main board status report 
UINT8 boardStatus[4];

// MC33879 OUTs state
extern UINT8 u8COSS_Outs_Value; 

// LIN fault status updated by LIN SW driver
extern unsigned char failLIN;

/*******************************************************************************/
/**
* \brief    MC33742 CAN cell status report 
* \author   rc574c
* \param    none
* \return   void
*/
void app_devMC33742Stat(void)
{
    // MC33742 - SBC with High Speed CAN
	if ((des_MC33742_Read(SBC_CAN)) & SBC_CAN_F)
	{
    // Read CANL failure
		switch ((des_MC33742_Read(SBC_TIM1)) & 0x0E)
		{
			case SBC_CANL2VDD :
			{
				boardStatus[0] = CAN_FAULT_LO_TO_VDD;
				break;
			}
			case SBC_CANL2BAT :
			{
				boardStatus[0] = CAN_FAULT_LO_TO_VBAT;
				break;
			}
			case SBC_CANL2GND :
			{
				boardStatus[0] = CAN_FAULT_LO_TO_GND;
				break;
			}	
		}
		
		// Read CANH failure
		switch ((des_MC33742_Read(SBC_LPC)) & 0x0E)
		{
			case SBC_CANH2VDD :
			{
				boardStatus[0] = CAN_FAULT_HI_TO_VDD;
				break;
			}
			case SBC_CANH2BAT :
			{
				boardStatus[0] = CAN_FAULT_HI_TO_VBAT;
				break;
			}
			case SBC_CANH2GND :
			{
				boardStatus[0] = CAN_FAULT_HI_TO_GND;
				break;
			}	
		} 
	}
	else
	{
	    // CAN OK
		boardStatus[0] = CAN_NO_FAULT; 
	}
}

/*******************************************************************************/
/**
* \brief    MC15XS3400 status report 
* \author   rc574c
* \param    none
* \return   void
*/
void app_devMC15XS3400Stat(void)
{
	UINT8 stat;
	
	stat = des_MC15XS3400_Get_Status(XS_HS0_RD);
	stat = stat & (XS_FAULT_UVF|XS_FAULT_OLON|XS_FAULT_OLOFF|XS_FAULT_SCF|XS_FAULT_OCF);
 	switch (stat)
 	{
 		case XS_FAULT_OCF :
 		{
 			boardStatus[3] = ESWITCH_FAULT_SHORT_CIR;
 			break;
 		}
 		case XS_FAULT_SCF :
 		{
 			boardStatus[3] = ESWITCH_FAULT_SHORT_CIR;
 			break;
 		}
  		case XS_FAULT_OLOFF :
 		{
 			boardStatus[3] = ESWITCH_FAULT_OPEN_LOAD;
 			break;
 		}
 		case XS_FAULT_OLON :
 		{
 			boardStatus[3] = ESWITCH_FAULT_OPEN_LOAD;
 			break;
 		}
 		case XS_FAULT_UVF :
 		{
			boardStatus[3] = ESWITCH_FAULT_LOSS_VPWR;	

	  	// If UV fault disappeared, clear UV bit (Toggle RST pin and config eSwitch). 
			if (FS_MC15XS3400 == 1)
			{     
				des_MC15XS3400_SetMode(XS_NORMAL);
				des_MC15XS3400_Config();
			}
			break;
		}
		default :
		{	
			if ((boardStatus[3] == ESWITCH_FAULT_LOSS_VPWR) && (FS_MC15XS3400 == 0))
			{
				// Keep Loss of VPWR message for FreeMaster (eSwitch MISO signal disappeared)
				boardStatus[3] = ESWITCH_FAULT_LOSS_VPWR;
			} 
			else
			{ 
				boardStatus[3] = ESWITCH_NO_FAULT;
			}
		}
 	}
}

/*******************************************************************************/
/**
* \brief    MC33879 status report. Open Load detected in OUT OFF state,
            Short Circuit detected in OUT ON state 
* \author   rc574c
* \param    none
* \return   void
*/
void app_devMC33879Stat(void)
{
static	UINT8 stat;

    // read staus register
	stat = des_MC33879_Get_Status();
	
	// Check OUT6
	if (stat & COSS_OUT6_STAT)
	{	
		if (u8COSS_Outs_Value & COSS_OUT6_STAT)
		{
			// Fault detected
			boardStatus[2] = COSS_FAULT_SHORT_CIRCUIT;

		}
		else
		{
			// Fault detected
			boardStatus[2] = COSS_FAULT_OPEN_LOAD;
		}
	}
	else
	{
		// No fault
		boardStatus[2] = COSS_NO_FAULT;
	}
}

/*******************************************************************************/
/**
* \brief    Main board status report (MC33742, MC33661, MC33879,MC15XS3400)
* \author   rc574c
* \param    none
* \return   void
*/
void app_boardStatus(void)
{
    // MC33742 - SBC with High Speed CAN
    app_devMC33742Stat();
	
	// MC15XS3400 - 15mR eSwitch
	app_devMC15XS3400Stat();
	
	// MC33879 - COSS Lite
	app_devMC33879Stat();
	
	
	// LIN fault status 
    if (failLIN == 0)
    {
        boardStatus[1] = LIN_NO_FAULT;
    }

    if (failLIN == 1)
    {
        boardStatus[1] = LIN_FAULT_SHORT_TO_GND;
    }
    
    if (failLIN == 2)
    {
        boardStatus[1] = LIN_FAULT_SHORT_TO_VPWR;
    }    
	
	// N/A
	// MC35XS3400 - 35mR eSwitch
	// MC10XS3412 - dual 10mR and 12mR eSwitch
	// MC33902 - High Speed CAN	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -