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

📄 mscan.c

📁 mscan总线freescale通讯协议
💻 C
字号:
/*  Include  */
#include <hidef.h> /* for EnableInterrupts macro */
#include <MC68HC908GZ60.h> /* include peripheral declarations */
#include "Common.h"
#include "MSCAN.h"
#include "ESCI.h"

/* Global Variables */
extern Mytype can_r,can_t;
extern UINT32 vms_time;
extern UINT8 acpower_limit;
extern UINT8 command[9];
extern UINT8 flag2;
extern UINT16 rpm_fb;
extern UINT16 dcc_fb;
extern UINT8 acp_status;

/*****************************************************************************
 * Function:   CAN_Transmit()      
 *
 * Description:     none
 *
 * Returns:         none
 *
 * Notes:           
 *					        
 *****************************************************************************/
  
void CAN_Transmit(UINT8 _acpower,UINT8 _accommand,UINT16 _acpspd,UINT8 _acstatus){
        															
  can_t.dsr0 = _acpower;
  can_t.dsr1 = _accommand;
  can_t.dsr2 = (UINT8)_acpspd;
  can_t.dsr3 = _acpspd>>8;
  can_t.dsr7 = _acstatus;
    
  if(CTFLG_TXE0==1){

      DLR0   =  can_t.dlr;

      DSR00  =  can_t.dsr0;
      DSR10  =  can_t.dsr1;
      DSR20  =  can_t.dsr2;
      DSR30  =  can_t.dsr3;
      DSR40  =  can_t.dsr4;
      DSR50  =  can_t.dsr5;
      DSR60  =  can_t.dsr6;
      DSR70  =  can_t.dsr7;

      IDR00  =  can_t.idr0;        
      IDR10  =  can_t.idr1;
      IDR20  =  can_t.idr2;  
      IDR30  =  can_t.idr3;       
      
      TBPR0  =  0x00;

      CTFLG  = 1;        
  }else if(CTFLG_TXE1==1){

      DLR1   =  can_t.dlr;

      DSR01  =  can_t.dsr0;
      DSR11  =  can_t.dsr1;
      DSR21  =  can_t.dsr2;
      DSR31  =  can_t.dsr3;
      DSR41  =  can_t.dsr4;
      DSR51  =  can_t.dsr5;
      DSR61  =  can_t.dsr6;
      DSR71  =  can_t.dsr7;

      IDR01  =  can_t.idr0;        
      IDR11  =  can_t.idr1;
      IDR21  =  can_t.idr2;  
      IDR31  =  can_t.idr3;

      TBPR1  =  0x01;

      CTFLG  = 2;
   }else if(CTFLG_TXE2==1){

      DLR2   =  can_t.dlr;

      DSR02  =  can_t.dsr0;
      DSR12  =  can_t.dsr1;
      DSR22  =  can_t.dsr2;
      DSR32  =  can_t.dsr3;
      DSR42  =  can_t.dsr4;
      DSR52  =  can_t.dsr5;
      DSR62  =  can_t.dsr6;
      DSR72  =  can_t.dsr7;

      IDR02  =  can_t.idr0;        
      IDR12  =  can_t.idr1;
      IDR22  =  can_t.idr2;  
      IDR32  =  can_t.idr3;

      TBPR2  =  0x01;

      CTFLG  = 4;
   }
            
}


/*****************************************************************************
 * Function:   CAN_Receive()      
 *
 * Description:     none
 *
 * Returns:         none
 *
 * Notes:           
 *					        
 *****************************************************************************/

void interrupt CAN_Receive(void){
  
  UINT16 id,id_m;
  
  can_r.idr0 =  REC_IDR0;              
  can_r.idr1 =  REC_IDR1;
  can_r.idr2 =  REC_IDR2;
  can_r.idr3 =  REC_IDR3;	
  									 
  id = ((((UINT16)can_r.idr0)<<8)+can_r.idr1)>>5;
  
  if(id == VMSStatus_A){
    
    //vms_time=((UINT32)can_r.dsr0)<<24+((UINT32)can_r.dsr1)<<16+((UINT32)can_r.dsr2)<<8+can_r.dsr3;
    id_m = 20;
    flag2|=0x01;      // set vmsstatus_flag
  
  }else if(id == VMS2AC_EHPS){
   
    can_r.dsr0 =  REC_DSR0;
    //can_r.dsr1 =  REC_DSR1;
    //can_r.dsr2 =  REC_DSR2;
    //can_r.dsr3 =  REC_DSR3;
    //can_r.dsr4 =  REC_DSR4;
    //can_r.dsr5 =  REC_DSR5;
    //can_r.dsr6 =  REC_DSR6;
    //can_r.dsr7 =  REC_DSR7; 
    
    acpower_limit=can_r.dsr0;
    id_m = 30;
  
  }else if(id == ACP2AC){
    
    can_r.dsr0 =  REC_DSR0;
    can_r.dsr1 =  REC_DSR1;
    can_r.dsr2 =  REC_DSR2;
    can_r.dsr3 =  REC_DSR3;
    //can_r.dsr4 =  REC_DSR4;
    //can_r.dsr5 =  REC_DSR5;
    //can_r.dsr6 =  REC_DSR6;
    can_r.dsr7 =  REC_DSR7; 
    
    id_m = 40;
    rpm_fb = ((UINT16)can_r.dsr1<<8)+can_r.dsr0;
    dcc_fb = (((UINT16)can_r.dsr3<<8)+can_r.dsr2)/64;
    acp_status = can_r.dsr7;
    
  }
  
 /* if(id != VMSStatus_A){
  
    
    command[0]=can_r.dsr0;
    command[1]=can_r.dsr1;
    command[2]=can_r.dsr2;																									 
    command[3]=can_r.dsr3;
    command[4]=can_r.dsr4;
    command[5]=can_r.dsr5;                 
    command[6]=can_r.dsr6; 	              
    command[7]=can_r.dsr7;
    command[8]=id_m;  
  
    SCI_Transmit();
    
  }*/
    
  CRFLG_RXF = 1;			 //Clear the flag

}

⌨️ 快捷键说明

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