// #include "MPC5604C.h"
// #include "typedefs.h"
// #include "typedef.h"
#include "CanSM.h"
#include "CanDriver.h"
#include "SYSTIME.h"
// #include "CAN.h"
/*************************************************/
/* Global variable definitions */
/*************************************************/
CanSM_NetWorkType g_CanNetWorks[CANSM_CTRL_NUM];
CanSM_WarAndComstType CanSM_WarAndComst[CANSM_CTRL_NUM];
u8 g_BusOffWarningReq[CANSM_CTRL_NUM];
u8 test_flag = 0;
/*************************************************/
/* Private variable definitions */
/*************************************************/
static u8 g_TxConfirState[CANSM_CTRL_NUM];
static CanSM_InitStatusType CanSM_InitState = CANSM_STATUS_UNINIT;
static u32 busoff_start_time = 0U;
static u32 busoff_current_time = 0U;
/*************************************************/
/* Function definitions */
/*************************************************/
u8 CanIf_GetTxConfirmationState(CAN_CHANNEL ControllerId);
void CanIf_TxConfirmation_Self(CAN_CHANNEL ControllerId);
void CanSM_MainFunction(void);
void Can_MainFunction_BusOff(void);
void CanSM_BusOff_CallBack(CAN_CHANNEL ControllerId);
#define BUSOFF_TIMER_5MS (5U)
/*************************************************
Function: CanSM_GetComState
Description:
Calls:
Called By:
Input:
Output:
Return:
Others:
*************************************************/
u8 CanSM_GetComState(CAN_CHANNEL ControllerId, CanSM_ComStatuType *pComState)
{
u8 RetResult = CanSM_E_OK;
if(ControllerId >= CANSM_CTRL_NUM)
{
RetResult = IDERORR;
}
else
{
*pComState = CanSM_WarAndComst[ControllerId].CanComStatus;
RetResult = CanSM_E_OK;
}
return RetResult;
}
/*************************************************
Function: CanSM_Bor_Check_Off
Description:
Calls:
Called By:
Input:
Output:
Return:
Others:
*************************************************/
u8 CanSM_GetWarnState(CAN_CHANNEL ControllerId, u8 *pWarnState )
{
u8 RetResult = CanSM_E_OK;
if(ControllerId >= CANSM_CTRL_NUM)
{
RetResult = IDERORR;
}
else
{
*pWarnState = CanSM_WarAndComst[ControllerId].BusOffWarningReq;
}
return RetResult;
}
/*************************************************
Function: CanSM_Bor_Check_Off
Description:
Calls:
Called By:
Input:
Output:
Return:
Others:
*************************************************/
static void CanSM_Bor_Check_Off(CAN_CHANNEL ControllerId)
{
CanSM_NetWorkType *Network = &g_CanNetWorks[ControllerId];
CanSM_NetConfigType *NetConfig = &CanSM_Config.pCanSM_NetConfig[ControllerId];
if (Network->timer < 65535)
{
Network->timer++;
}
if (Network->busoffevent)
{
Network->busoffevent = 0;
Network->timer = 0;
/* test_flag = 0; */
if (Network->count >= NetConfig->CanSMBorCounterErr)
{
/* SAVE DCODE */
CanSM_WarAndComst[ControllerId].BusOffWarningReq = 1;
}
else
{
;
}
/* test_flag = 1; */
CanHwRestart(ControllerId);
Network->BusOffCurStatus = CANSM_BR_RESTART_CC;
CanSM_WarAndComst[ControllerId].CanComStatus = CANSM_BSM_S_UFULLCOM;
}
#if (BOF_FALSE == CANSM_BOR_TX_CONFIRMATION_POLLING)
else if (Network->timer >= NetConfig->CanSMBorTimeTxEnsured)
{
Network->count = 0;
CanSM_WarAndComst[ControllerId].BusOffWarningReq = 0;
Network->BusOffCurStatus = CANSM_BR_NO_BUS_OFF;
/* test_flag = 1; */
}
#else
else if (CAN_TX_OK == CanIf_GetTxConfirmationState(ControllerId))
{
Network->count = 0;
CanSM_WarAndComst[ControllerId].BusOffWarningReq = 0;
Network->BusOffCurStatus = CANSM_BR_NO_BUS_OFF;
/* test_flag = 1; */
}
#endif
else
{
;
}
}
/*************************************************
Function: CanSM_Bor_Restart_CC
Description:
Calls:
Called By:
Input:
Output:
Return:
Others:
*************************************************/
static void CanSM_Bor_Restart_CC(CAN_CHANNEL ControllerId)
{
CanSM_NetWorkType *Network = &g_CanNetWorks[ControllerId];
Network->timer = 0;
/* Restart can */
CanHwRestart(ControllerId);
/* test_flag = 1;*/
Network->BusOffCurStatus = CANSM_BR_RESTART_WAIT;
}
/*************************************************
Function: CanSM_Bor_Restart_Wait
Description:
Calls:
Called By:
Input:
Output:
Return:
Others:
*************************************************/
static void CanSM_Bor_Restart_Wait(CAN_CHANNEL ControllerId)
{
CanSM_NetWorkType *Network = &g_CanNetWorks[ControllerId];
CanSM_NetConfigType *NetConfig = &CanSM_Config.pCanSM_NetConfig[ControllerId];
if ( Network->timer < 65535)
{
Network->timer++;
}
/* test_flag = 1;*/
if (!(CanBusOffDetect(ControllerId)))
{
/* test_flag = 1; */
Network->busoffevent = 0;
Network->BusOffCurStatus = CANSM_BR_TXOFF;
}
else if (Network->timer >= NetConfig->RestartTimeOut)
{
/* test_flag = 1; */
Network->timer = 0;
Network->BusOffCurStatus = CANSM_BR_RESTART_CC;
}
else
{
;
}
}
/*************************************************
Function: CanSM_TxOff_Sub
Description:
Calls:
Called By:
Input:
Output:
Return:
Others:
*************************************************/
static void CanSM_TxOff_Sub(CAN_CHANNEL ControllerId, u16 CanSMBorTime)
{
CanSM_NetWorkType *Network = &g_CanNetWorks[ControllerId];
if (Network->timer >= CanSMBorTime)
{
Network->timer = 0;
Network->BusOffCurStatus = CANSM_BR_CHECK;
/* busoff counter inc */
if (Network->count < 255)
{
Network->count++;
}
CanSM_WarAndComst[ControllerId].CanComStatus = CANSM_BSM_S_FULLCOM;
/* test_flag = 1; */
}
else
{
;
}
}
/*************************************************
Function: CanSM_Bor_TxOff
Description:
Calls:
Called By:
Input:
Output:
Return:
Others:
*************************************************/
static void CanSM_Bor_TxOff(CAN_CHANNEL ControllerId)
{
CanSM_NetWorkType *NetWork = &g_CanNetWorks[ControllerId];
CanSM_NetConfigType *NetConfig = &CanSM_Config.pCanSM_NetConfig[ControllerId];
if ( NetWork->timer < 65535U)
{
NetWork->timer++;
}
if (NetWork->count >= NetConfig->CanSMBorCounterL1ToL2)
{
/* test_flag = 1; */
CanSM_TxOff_Sub(ControllerId,NetConfig->CanSMBorTimeL2);
}
else
{
/* test_flag = 1; */
CanSM_TxOff_Sub(ControllerId,NetConfig->CanSMBorTimeL1);
}
}
/*************************************************
Function: CanSM_Bor_No_BusOff
Description:
Calls:
Called By:
Input:
Output:
Return:
Others:
*************************************************/
static void CanSM_Bor_No_BusOff(CAN_CHANNEL ControllerId)
{
CanSM_NetWor
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
BUS_OFF.zip (9个子文件)
BUS_OFF
CanDriver.o 4KB
CanDriver.h 691B
CanSM.h 3KB
CanSM_Cfg.c 2KB
CanSM_Cfg.o 4KB
CanDriver.c 2KB
CanSM.o 13KB
CanSM_Cfg.h 879B
CanSM.c 13KB
共 9 条
- 1
资源评论
sven365
- 粉丝: 9
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功