123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- /********************************************************************************
- * 常州易控汽车电子股份有限公司
- * (c) Copyright 2009-2015 ECTEK
- * 保留所有权利
- ********************************************************************************
- * 工程名称:整车管理
- * 文件名: CANNet.c
- * 功能描述 : CAN总线管理
- * 引用记录:
- * 备注:
- * 修订记录:
- * 日期 版本 作者 描述
- * 2011.07.14 00.01.00 李中 第一版
- *******************************************************************************/
- #include "HardwareLib.h"
- #include "CANNet.h"
- #include "AccPedCD.h"
- MCANDrv_infoMsgConfS_TYPE CANNet_infoMsgTxConfSA[3];
- MCAN_stRetE_TYPE CAN1Result;
- uint16 CANNet_idxSchedUB;
- MCANDrv_infoMsgConfS_TYPE CANNet_InfoRxMsgConfSA[128];
- uint8 CANNet_datRxMsgBufM[128][9];
- void CANNet_Init(void)
- {
- /*示例代码*/
- /*各个CAN节点初始化*/
- MCANDrv_SetBaudrate(_CAN_INDEX_CAN0, 250000);
- MCANDrv_SetCANMode(_CAN_INDEX_CAN0, MCAN_NODEMODE_BUF);
- MCANDrv_SetCallbackFunc(_CAN_INDEX_CAN0, (pFunc_RxMsgCallback)CANNet_RecvMsgCAN0, NULL_PTR);
- MCANDrv_SetBaudrate(_CAN_INDEX_CAN1, 250000);
- MCANDrv_SetCANMode(_CAN_INDEX_CAN1, MCAN_NODEMODE_BUF);
- MCANDrv_SetCallbackFunc(_CAN_INDEX_CAN1, (pFunc_RxMsgCallback)CANNet_RecvMsgCAN1, NULL_PTR);
- /*第2路CAN用于CCP、UDS协议,由底层配置*/
- /*接收报文初始化*/
- // CANNet_InfoRxMsgConfSA[0].infoMsgIDUI = 0x1F000023UL;
- // CANNet_InfoRxMsgConfSA[0].infoMsgParU.B.CAN = 0;
- // CANNet_InfoRxMsgConfSA[0].infoMsgParU.B.MO = 0;
- // CANNet_InfoRxMsgConfSA[0].infoMsgParU.B.DIR = _MCAN_DIR_RX;
- // CANNet_InfoRxMsgConfSA[0].infoMsgParU.B.DLC = 8;
- // CANNet_InfoRxMsgConfSA[0].infoMsgParU.B.IDE = _MCAN_IDE_EXT;
- // MCANDrv_SetMsgObj(CANNet_InfoRxMsgConfSA[0], CANNet_RecvMsgCAN0);
- /*发送报文初始化*/
- CANNet_infoMsgTxConfSA[0].infoMsgIDUI = 0x1F000024UL;
- CANNet_infoMsgTxConfSA[0].infoMsgParU.B.CAN = 0;
- CANNet_infoMsgTxConfSA[0].infoMsgParU.B.MO = 0;
- CANNet_infoMsgTxConfSA[0].infoMsgParU.B.DIR = _MCAN_DIR_TX;
- CANNet_infoMsgTxConfSA[0].infoMsgParU.B.DLC = 8;
- CANNet_infoMsgTxConfSA[0].infoMsgParU.B.IDE = _MCAN_IDE_EXT;
- // MCANDrv_SetMsgObj(CANNet_infoMsgTxConfSA[0], NULL_PTR);
- CANNet_infoMsgTxConfSA[1].infoMsgIDUI = 0x1F000025UL;
- CANNet_infoMsgTxConfSA[1].infoMsgParU.B.CAN = 1;
- CANNet_infoMsgTxConfSA[1].infoMsgParU.B.MO = 1;
- CANNet_infoMsgTxConfSA[1].infoMsgParU.B.DIR = _MCAN_DIR_TX;
- CANNet_infoMsgTxConfSA[1].infoMsgParU.B.DLC = 8;
- CANNet_infoMsgTxConfSA[1].infoMsgParU.B.IDE = _MCAN_IDE_EXT;
- // MCANDrv_SetMsgObj(CANNet_infoMsgTxConfSA[1], NULL_PTR);
- CANNet_infoMsgTxConfSA[2].infoMsgIDUI = 0x1F000026UL;
- CANNet_infoMsgTxConfSA[2].infoMsgParU.B.CAN = 2;
- CANNet_infoMsgTxConfSA[2].infoMsgParU.B.MO = 2;
- CANNet_infoMsgTxConfSA[2].infoMsgParU.B.DIR = _MCAN_DIR_TX;
- CANNet_infoMsgTxConfSA[2].infoMsgParU.B.DLC = 8;
- CANNet_infoMsgTxConfSA[2].infoMsgParU.B.IDE = _MCAN_IDE_EXT;
- }
- // CAN0接收消息处理函数 VCU
- void CANNet_RecvMsgCAN0(MCANDrv_infoMsgS_TYPE infoMsgS)
- {
- // CAN接收样例
- // uint8 idxIncUB, idxByteUB;
- // for (idxIncUB = 0; idxIncUB < 128; idxIncUB++)
- // {
- // if (infoMsgS.infoConfS.infoMsgIDUI == CANNet_InfoRxMsgConfSA[idxIncUB].infoMsgIDUI)
- // {
- // for (idxByteUB = 0; idxByteUB < 8; idxByteUB++)
- // {
- // CANNet_datRxMsgBufM[idxIncUB][idxByteUB] = infoMsgS.datMsgUBA[idxByteUB];
- // }
- // CANNet_datRxMsgBufM[idxIncUB][8]++;
- // }
- // }
- VcuDecodeFunction(infoMsgS.infoConfS.infoMsgIDUI,infoMsgS.datMsgUBA);
- }
- // CAN1接收消息处理函数
- void CANNet_RecvMsgCAN1(MCANDrv_infoMsgS_TYPE infoMsgS)
- {
- // CAN接收样例
- // uint8 idxIncUB, idxByteUB;
- // for (idxIncUB = 0; idxIncUB < 128; idxIncUB++)
- // {
- // if (infoMsgS.infoConfS.infoMsgIDUI == CANNet_InfoRxMsgConfSA[idxIncUB].infoMsgIDUI)
- // {
- // for (idxByteUB = 0; idxByteUB < 8; idxByteUB++)
- // {
- // CANNet_datRxMsgBufM[idxIncUB][idxByteUB] = infoMsgS.datMsgUBA[idxByteUB];
- // }
- //
- // CANNet_datRxMsgBufM[idxIncUB][8]++;
- // }
- // }
- BcuDecodeFunction(infoMsgS.infoConfS.infoMsgIDUI,infoMsgS.datMsgUBA);
- }
- //
- //发送消息管理
- void CAN0Net_Manage1ms(void)
- {
- static UINT32 Can0TimerCounter = 0;
- static UINT8 VcuIDIdx = 0;
- MCANDrv_infoMsgS_TYPE infoMsgS;
- static BOOL ChkFlg = FALSE;
- //sizeof(Ebc2VcuOutTable)/8
- if(Can0TimerCounter%100==0)
- {
- if(Can0TimerCounter%(Ebc2VcuOutTable[VcuIDIdx][1])==0)
- {
- CANNet_infoMsgTxConfSA[0].infoMsgIDUI = Ebc2VcuOutTable[VcuIDIdx][0];
- infoMsgS.infoConfS = CANNet_infoMsgTxConfSA[0];
- memset(infoMsgS.datMsgUBA,0x00,8);
- VcuEncodeFunction(Ebc2VcuOutTable[VcuIDIdx][0],&(infoMsgS.datMsgUBA[0]));
- MCANDrv_SendMsg(infoMsgS);
- }
- VcuIDIdx++;
- ChkFlg = FALSE;
- }
- if(VcuIDIdx>=(sizeof(Ebc2VcuOutTable)/8))
- {
- VcuIDIdx = 0;
- ChkFlg = TRUE;
- }
- if(ChkFlg)
- {
- Can0TimerCounter = Can0TimerCounter + 1;
- }
- }
- void CAN1Net_Manage1ms(void)
- {
- static UINT32 Can1TimerCounter = 0;
- static UINT8 BcuIDIdx = 0;
- static BOOL BcuChkFlg = FALSE;
- MCANDrv_infoMsgS_TYPE infoMsgS;
- if(Can1TimerCounter%100==0)
- {
- if(Can1TimerCounter%(Ebc2BcuOutTable[BcuIDIdx][1])==0)
- {
- CANNet_infoMsgTxConfSA[1].infoMsgIDUI = Ebc2BcuOutTable[BcuIDIdx][0];
- infoMsgS.infoConfS = CANNet_infoMsgTxConfSA[1];
- memset(infoMsgS.datMsgUBA,0x00,8);
- BcuEncodeFunction(Ebc2BcuOutTable[BcuIDIdx][0],&(infoMsgS.datMsgUBA[0]));
- CAN1Result = MCANDrv_SendMsg(infoMsgS);
- CANNet_infoMsgTxConfSA[2].infoMsgIDUI = 0x7F0;
- infoMsgS.infoConfS = CANNet_infoMsgTxConfSA[2];
- infoMsgS.datMsgUBA[0] = (uint8)(CAN1Result >> 24);
- infoMsgS.datMsgUBA[1] = (uint8)(CAN1Result >> 16);
- infoMsgS.datMsgUBA[2] = (uint8)(CAN1Result >> 8);
- infoMsgS.datMsgUBA[3] = (uint8)(CAN1Result >> 0);
- infoMsgS.datMsgUBA[4] = (uint8)(Can1TimerCounter >> 24);
- infoMsgS.datMsgUBA[5] = (uint8)(Can1TimerCounter >> 16);
- infoMsgS.datMsgUBA[6] = (uint8)(Can1TimerCounter >> 8);
- infoMsgS.datMsgUBA[7] = (uint8)(Can1TimerCounter);
- MCANDrv_SendMsg(infoMsgS);
- }
- BcuIDIdx++;
- BcuChkFlg = FALSE;
- }
- if(BcuIDIdx>=(sizeof(Ebc2BcuOutTable)/8))
- {
- BcuIDIdx = 0;
- BcuChkFlg = TRUE;
- }
- if(BcuChkFlg)
- {
- Can1TimerCounter = Can1TimerCounter +1;
- }
- }
- void CAN2Net_Manage1ms(void)
- {
- static UINT32 Can2TimerCounter = 0;
- MCANDrv_infoMsgS_TYPE infoMsgS;
- if(Can2TimerCounter%100==0)
- {
- }
- Can2TimerCounter = Can2TimerCounter +1;
- #ifdef _APP_TEST_CODE
- switch (CANNet_idxSchedUB)
- {
- case 0:
- CANNet_infoMsgTxConfSA[2].infoMsgIDUI = 0x7F0;
- infoMsgS.infoConfS = CANNet_infoMsgTxConfSA[2];
- infoMsgS.datMsgUBA[0] = (uint8)(PressureValue >> 24);
- infoMsgS.datMsgUBA[1] = (uint8)(PressureValue >> 16);
- infoMsgS.datMsgUBA[2] = (uint8)(PressureValue >> 8);
- infoMsgS.datMsgUBA[3] = (uint8)(PressureValue >> 0);
- infoMsgS.datMsgUBA[4] = (uint8)(Distence1 >> 8);
- infoMsgS.datMsgUBA[5] = (uint8)(Distence1);
- infoMsgS.datMsgUBA[6] = (uint8)(Distence2 >> 8);
- infoMsgS.datMsgUBA[7] = (uint8)(Distence2);
- MCANDrv_SendMsg(infoMsgS);
- break;
- case 1:
- CANNet_infoMsgTxConfSA[2].infoMsgIDUI = 0x7F1;
- infoMsgS.infoConfS = CANNet_infoMsgTxConfSA[2];
- infoMsgS.datMsgUBA[0] = (uint8)(Switch1);
- infoMsgS.datMsgUBA[1] = (uint8)(Switch2);
- infoMsgS.datMsgUBA[2] = 0xFF;
- infoMsgS.datMsgUBA[3] = 0xFF;
- infoMsgS.datMsgUBA[4] = (uint8)(PressureValue >> 24);
- infoMsgS.datMsgUBA[5] = (uint8)(PressureValue >> 16);
- infoMsgS.datMsgUBA[6] = (uint8)(PressureValue >> 8);
- infoMsgS.datMsgUBA[7] = (uint8)(PressureValue >> 0);
- MCANDrv_SendMsg(infoMsgS);
- break;
- case 2:
- CANNet_infoMsgTxConfSA[2].infoMsgIDUI = 0x7F2;
- infoMsgS.infoConfS = CANNet_infoMsgTxConfSA[2];
- infoMsgS.datMsgUBA[0] = ControlState;
- infoMsgS.datMsgUBA[1] = 0xFF;
- infoMsgS.datMsgUBA[2] = 0xFF;
- infoMsgS.datMsgUBA[3] = 0xFF;
- infoMsgS.datMsgUBA[4] = (uint8)(Control_Times >> 24);
- infoMsgS.datMsgUBA[5] = (uint8)(Control_Times >> 16);
- infoMsgS.datMsgUBA[6] = (uint8)(Control_Times >> 8);
- infoMsgS.datMsgUBA[7] = (uint8)(Control_Times);
- MCANDrv_SendMsg(infoMsgS);
- break;
- default:
- break;
- }
- CANNet_idxSchedUB = (uint16)((CANNet_idxSchedUB + 1) % 100); // 100ms一个完整循环
- #endif
- }
|