?? canbus.c
字號:
MsgSdCANFCE[StSTMsg].data[4]= frqR1; // | ____LOAD rotate speed of fans to send
MsgSdCANFCE[StSTMsg].data[5]= frqR2; // |/
MsgSdCANFCE[StSTMsg].data[6]= 0;//(unsigned char)(ATD[indexFMA]&0x00FF); // | ____LOAD air flowrate to send
MsgSdCANFCE[StSTMsg].data[7]= 0;//(unsigned char)(ATD[indexFMA]>>8); // |/
}
/************************************************************************/
/*CAN0初始化*/
/*************************************************************************/
void CAN0Init(void)
{
/*set CAN0 at PM0 PM1*/
MODRR_MODRR0= 0;
MODRR_MODRR1= 0;
CAN0CTL0_INITRQ = 1; //entry into initialize mode
CAN0CTL0_WUPE = 1;
while(CAN0CTL1_INITAK == 0); //wait until into the initialize mode
CAN0CTL1 = VALUE_CAN0CTL1;
CAN0BTR0 = VALUE_CAN0BTR0;
CAN0BTR1 = VALUE_CAN0BTR1; //set BaudRate=500k
CAN0IDMR0 = VALUE_CAN0IDMR0; //set accept and filter
CAN0IDMR1 = VALUE_CAN0IDMR1;
CAN0IDMR2 = VALUE_CAN0IDMR2;
CAN0IDMR3 = VALUE_CAN0IDMR3;
CAN0IDMR4 = VALUE_CAN0IDMR4;
CAN0IDMR5 = VALUE_CAN0IDMR5;
CAN0IDMR6 = VALUE_CAN0IDMR6;
CAN0IDMR7 = VALUE_CAN0IDMR7;
CAN0IDAC = VALUE_CAN0IDAC;
CAN0IDAR0 = VALUE_CAN0IDAR0;
CAN0IDAR1 = VALUE_CAN0IDAR1;
CAN0IDAR2 = VALUE_CAN0IDAR2;
CAN0IDAR3 = VALUE_CAN0IDAR3;
CAN0IDAR4 = VALUE_CAN0IDAR4;
CAN0IDAR5 = VALUE_CAN0IDAR5;
CAN0IDAR6 = VALUE_CAN0IDAR6;
CAN0IDAR7 = VALUE_CAN0IDAR7;
CAN0CTL0_INITRQ = 0; //enable normal operation mode
while(CAN0CTL1_INITAK != 0); //wait until into normal operation mode
CAN0CTL0_TIME = 1; //enable internal timer
CAN0CTL0_WUPE = 1; //WAKE UP enable
CAN0RIER = 0xC5; //only enable receive buffer full interrupt
}
/*************************************************************************
CAN1初始化
*************************************************************************/
void CAN1Init(void)
{
/*set CAN1 at PM2 PM3*/
MODRR_MODRR2= 0;
MODRR_MODRR3= 0;
CAN1CTL0_INITRQ = 1; /*entry into initialize mode*/
CAN1CTL0_WUPE = 1;
while(CAN1CTL1_INITAK == 0); //wait until into the initialize mode
CAN1CTL1 = VALUE_CAN1CTL1;
CAN1BTR0 = VALUE_CAN1BTR0; /*set SJW=2, Prescaler value=4*/
CAN1BTR1 = VALUE_CAN1BTR1; /*set TSEG2=3,TSEG1=4 Bit Rate=125k*/
CAN1IDMR0 = VALUE_CAN1IDMR0; /*define to accept all coming message*/
CAN1IDMR1 = VALUE_CAN1IDMR1;
CAN1IDMR2 = VALUE_CAN1IDMR2;
CAN1IDMR3 = VALUE_CAN1IDMR3;
CAN1IDMR4 = VALUE_CAN1IDMR4;
CAN1IDMR5 = VALUE_CAN1IDMR5;
CAN1IDMR6 = VALUE_CAN1IDMR6;
CAN1IDMR7 = VALUE_CAN1IDMR7;
CAN1IDAC = VALUE_CAN1IDAC;
CAN1IDAR0 = VALUE_CAN1IDAR0;
CAN1IDAR1 = VALUE_CAN1IDAR1;
CAN1IDAR2 = VALUE_CAN1IDAR2;
CAN1IDAR3 = VALUE_CAN1IDAR3;
CAN1IDAR4 = VALUE_CAN1IDAR4;
CAN1IDAR5 = VALUE_CAN1IDAR5;
CAN1IDAR6 = VALUE_CAN1IDAR6;
CAN1IDAR7 = VALUE_CAN1IDAR7;
CAN1CTL0_INITRQ = 0; /*enable normal operation mode*/
while(CAN1CTL1_INITAK != 0); //wait until into normal operation mode
CAN1CTL0_TIME = 1; /*enable internal timer*/
CAN1CTL0_WUPE = 1; /*WAKE UP enable*/
CAN1RIER = 0xC5; /*only enable receive buffer full interrupt*/
}
void CANMsgCfg(void)
{unsigned char index;
CAN_ID temp;
for(index=0;index<CANVMS_TXD;index++)
{
temp=CANVMS_Sd_ID[index];
temp.ID=temp.ID<<21;
MsgSdCANVMS[index].ID=temp;
MsgSdCANVMS[index].IdType=CANVMSFormat;
MsgSdCANVMS[index].length=8;
}
for(index=0;index<CANVMS_RXD;index++)
{
temp=CANVMS_Rd_ID[index];
temp.ID=temp.ID<<21;
MsgRdCANVMS[index].ID=temp;
MsgRdCANVMS[index].IdType=CANVMSFormat;
MsgRdCANVMS[index].length=0;
}
for(index=0;index<CANFCE_TXD;index++)
{
temp=CANFCE_Sd_ID[index];
temp.ID=temp.ID<<21;
MsgSdCANFCE[index].ID=temp;
MsgSdCANFCE[index].IdType=CANFCEFormat;
MsgSdCANFCE[index].length=8;
}
for(index=0;index<CANFCE_RXD;index++)
{
temp=CANFCE_Rd_ID[index];
temp.ID=temp.ID<<21;
MsgRdCANFCE[index].ID=temp;
MsgRdCANFCE[index].IdType=CANFCEFormat;
MsgRdCANFCE[index].length=0;
}
}
void FCECmdDeal(void)
{/****************************************************************/
/*______The following process is only for manual operation______*/
/*______operation for water injection is not included in ______*/
unsigned int tempDate=0;
if(IsIdleCtrl||IsManualCtrl)
{ modeCtrl=ModeManual;
if(((MsgRdCANFCE[FCSCmd].data[0])&0x01)&&(!sysFlgCMP)){ EnableDAINI;} //Judge and start DA Initiation wait
StateDevice.StateBytes.DevStateL=MsgRdCANFCE[FCSCmd].data[0];
StateDevice.StateBytes.DevStateH=MsgRdCANFCE[FCSCmd].data[1];
if(sysFlgDrv==1) {DriverEnable; }
else {DriverDisable;}
if(sysFlgHEV2==1) {ACT_SUPPLY_HYDROGEN;}
else {STP_SUPPLY_HYDROGEN;}
if(sysFlgHEV3==1) {ACT_DRAIN_HYDROGEN; }
else {STP_DRAIN_HYDROGEN; }
if(sysFlgWEV1==1) {ACT_DRAIN_WATER; }
else {STP_DRAIN_WATER; }
if(sysFlgCNT==1) {ACT_STCNT; }
else {STP_STCNT; }
if(sysFlgCMP==1) {ACT_CMPCNT; }
else {STP_CMPCNT;}
if(sysFlgFAN1==1) {ACT_FAN1; }
else {STP_FAN1; }
if(sysFlgFAN2==1) {ACT_FAN2; }
else {STP_FAN2; }
if(sysFlgCWP==1) {ACT_CWP; }
else {STP_CWP; }
tempDate=MsgRdCANFCE[FCSCmd].data[2];
tempDate+=((unsigned int)MsgRdCANFCE[FCSCmd].data[3])<<8;
Ncp=(unsigned char)tempDate;
perCANFCETimer=MsgRdCANFCE[FCSCmd].data[6]+(MsgRdCANFCE[FCSCmd].data[7]&0X03)*256;
CANFCETrigger =MsgRdCANFCE[FCSCmd].data[7]>>2;
if(CANFCETrigger==NoTrigger)TaskCANFCE=0;
else TaskCANFCE=1;
}
if((StatusofActs&0XFFFC)==0X0000) modeCtrl=ModeIdle;
}
void VMSCmdDeal(void)
{ unsigned int Psetnew;
/*if system is not in VMS control mode and system is in idle state then set the mode is VMSCmdDeal*/
if((IsIdleCtrl)&&(SysStatus==ECU_Ready))modeCtrl=ModeVMSAuto;
if(IsVMSAutoCtrl)
{ /*In VMS auto control mode deal the VMS command*/
/*Change the run state first and then evaluate the Pset
if decrease output power set the plimit directly*/
//SysRun=((MsgRdCANVMS[VMS2FCE].data[2]&0X0C)==0X08);
SysRun=((MsgRdCANVMS[VMS2FCE].data[2]&0X0C)==0X08);
SysEmgency=((MsgRdCANVMS[VMS2FCE].data[2]&0X03)==0X01);
Psetnew=MsgRdCANVMS[VMS2FCE].data[0];
Psetnew+=MsgRdCANVMS[VMS2FCE].data[1]*256;
Psetnew*=60;
if(Pset!=Psetnew)
{ SysPsetChange=1;
//if((PLmt-PPar)>Psetnew)PLmt=Psetnew;
Pset=Psetnew;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -