CFMOTO/ECU_APP/user/can_user.c
2024-03-18 00:26:23 +08:00

183 lines
4.6 KiB
C

#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 = 1000;
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_403 CAN_403;
Can_Msg_Type_26D CAN_26D;
Can_Msg_Type_212 CAN_212;
extern uint16_t g_adval[12];
extern uint16_t ZYMotorLocation;
extern uint16_t KBMotorLocation;
uint16_t ECM_lost_count,GBC_lost_count;
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)
{
Copy_Array_to_Array(TxCanMessage.DB, CAN_212.Msg_Byte, 8);
}
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 */
TxCanMessage.IDL = 0x212; /* ID Data (low) */
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();
GBC_lost_count = 1000;
ECM_lost_count = 1000;
}
//extern uint8_t flagOverCurrentKB,flagOverCurrentZY;
uint8_t txbuf1[8],txbuf2[8],txbuf3[8];
extern uint16_t SupplyVoltage;
void TxTestMsg(void)
{
uint8_t testdata[8] = {0};
if ((App28sTxRxStatus & DCM28S_MASK_TX_DISABLE) == 0)
{
return;
}
testdata[0] = SupplyVoltage>>8;
testdata[1] = SupplyVoltage;
testdata[2] = ECM_lost_count>0?1:0;
testdata[3] = GBC_lost_count>0?1:0;
TransmitCAN_Message(0x333,8,testdata);
}
//立即发送
void ClearTxCounter(void)
{
Can_Msg_Change();
air_req_timer = 0;
}
void CommunicationLostDetected(void)
{
if (App28sTxRxStatus & 0x02 != 0) // Rx enable
{
if (ECM_lost_count > 0)
{
ECM_lost_count--;
}
if (GBC_lost_count > 0)
{
GBC_lost_count--;
}
}
}
void TxServe(void)
{
Can_RtnType re_flag;
static unsigned char sucNwSendCnt = 0;
CommunicationLostDetected();
////////////////////////////////////////////////////////////////////////
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))//
{
BusOff_flag = 0;
Can_Msg_Change_Bcm();
re_flag = 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;
}