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

📄 canbus.c

📁 新能源燃料电池小车系统
💻 C
📖 第 1 页 / 共 3 页
字号:
        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 + -