#include "r_cg_macrodriver.h" #include "r_cg_userdefine.h" #include "r_rl78_can_sfr.h" #include "r_rl78_can_drv.h" #include "appTask.h" #include "can_user.h" #include "CanNw.h" #include "PINdef.h" #include "extern.h" #include "hwCtrl.h" #define C_100MS_1MS 100 unsigned char App28sTxRxStatus = 3; unsigned char Nw28sTxRxStatus = 3; can_frame_t TxCanMessage; can_frame_t TxCanMessage1; can_frame_t RxCanMessage; unsigned char CAN_SEND_COMPLETE; uint16_t air_req_timer = C_100MS_1MS; unsigned char BusOff_flag = 0; unsigned char BusOff_IGN_cycle_count = 0; unsigned int BusOff_Detect_delay_count = 2000; unsigned char Can_2F_SET_run = 0; unsigned char DiagnosticSession_Present = 1; // unsigned char Tx_Rx_Enable = 3; // 0:none 1:Tx 2:Rx 3:Tx Rx Can_Msg_Type_101 CAN_101; Can_Msg_Type_220 CAN_220; extern uint16_t g_adval[12]; extern uint16_t ZYMotorLocation; extern uint16_t KBMotorLocation; void Copy_Array_to_Array(unsigned char *dest, unsigned char *src, unsigned char count) { unsigned char i = 0; while (i < count) { i++; *dest++ = *src++; } } void Can_Msg_Change_Bcm(void) { #if NOW_BOARD == RIGHT_BOARD Copy_Array_to_Array(TxCanMessage.DB, CAN_101.Msg_Byte, 8); #else Copy_Array_to_Array(TxCanMessage.DB, CAN_220.Msg_Byte, 8); #endif } void CAN_TX_MESSAGE_INIT(void) { CAN_STB = 0; TxCanMessage.IDE = 0; /* IDE 0:Standard 1:Extend */ TxCanMessage.RTR = 0; /* RTR 0:Data 1:Remote */ TxCanMessage.THDSE = 0; /* Transmit History Data Store Enable */ #if NOW_BOARD == LEFT_BOARD TxCanMessage.IDL = 0x220; /* ID Data (low) */ #else TxCanMessage.IDL = 0x101; /* ID Data (low) */ #endif TxCanMessage.IDH = 0; /* ID Data (high) */ TxCanMessage.DLC = 8; /* DLC Data */ TxCanMessage.LBL = 0; /* Label Data */ TxCanMessage.TS = 0; /* Timestamp Data */ Can_Msg_Change_Bcm(); } //extern uint8_t flagOverCurrentKB,flagOverCurrentZY; uint8_t txbuf1[8],txbuf2[8],txbuf3[8]; void TxTestMsg(void) { if ((App28sTxRxStatus & DCM28S_MASK_TX_DISABLE) == 0) { return; } } //立即发送 void ClearTxCounter(void) { Can_Msg_Change(); air_req_timer = 0; } extern unsigned char rollingcounter; void TxServe(void) { //Can_RtnType re_flag; static unsigned char sucNwSendCnt = 0; //////////////////////////////////////////////////////////////////////// if ((ucNwSendPduType == SEND_NWAPP_PDU) || (ucNwSendPduType == SEND_APP_PDU)) { if (ucNwSendPduType == SEND_NWAPP_PDU) { if (uiNwPduCycCnt == 0) { uiNwPduCycCnt = uiSetNwPduCycVal; if ((Nw28sTxRxStatus & DCM28S_MASK_TX_DISABLE) != 0) { //R_CAN_TrmByTRFIFO0_CH0(&TxCanNwPdu_436); if (ImmediateNM_count < 5) ImmediateNM_count++; } } sucNwSendCnt = 0; } else { if (sucNwSendCnt > 0) { if (uiNwPduCycCnt == 0) { sucNwSendCnt--; uiNwPduCycCnt = uiSetNwPduCycVal; if ((Nw28sTxRxStatus & DCM28S_MASK_TX_DISABLE) != 0) { R_CAN_TrmByTRFIFO0_CH0(&TxCanNwPdu_436); if (ImmediateNM_count < 5) ImmediateNM_count++; } } } } } else { ; /*sotp can transmit*/ } //CAN_STB = 0; if ((air_req_timer == 0) && ((App28sTxRxStatus & DCM28S_MASK_TX_DISABLE) != 0))// { Can_Msg_Change_Bcm(); R_CAN_TrmByTRFIFO0_CH0(&TxCanMessage); //TxTestMsg(); air_req_timer = C_100MS_1MS; } } void Can_init_id(can_frame_t *TxMessage, unsigned int canid) { TxMessage->IDE = 0; TxMessage->RTR = 0; TxMessage->THDSE = 0; TxMessage->IDL = canid; TxMessage->IDH = 0x0000; TxMessage->DLC = 8; TxMessage->LBL = 0; TxMessage->TS = 0; }