85 lines
1.8 KiB
C
85 lines
1.8 KiB
C
#include "boot_macrodriver.h"
|
|
#include "boot_userdefine.h"
|
|
#include "r_rl78_can_sfr.h"
|
|
#include "r_rl78_can_drv.h"
|
|
#include "boot_can_user.h"
|
|
|
|
#define C_100MS_1MS 100
|
|
|
|
can_frame_t Boot_TxCanMessage;
|
|
can_frame_t Boot_RxCanMessage;
|
|
|
|
unsigned char BusOff_flag = 0;
|
|
|
|
void Copy_Array_to_Array(unsigned char *dest, unsigned char *src,unsigned char count)
|
|
{
|
|
unsigned char i = 0;
|
|
|
|
while( i < count)
|
|
{
|
|
i++;
|
|
*dest++ = *src++;
|
|
}
|
|
}
|
|
|
|
unsigned char TransmitCAN_Message(unsigned int ID,unsigned char Dlc,unsigned char *Data)
|
|
{
|
|
can_frame_t Boot_TxCanMessage;
|
|
Can_RtnType re_flag;
|
|
Boot_TxCanMessage.IDL=ID;
|
|
Boot_TxCanMessage.DLC=Dlc;
|
|
Boot_TxCanMessage.IDE = 0; /* IDE 0:Standard 1:Extend */
|
|
Boot_TxCanMessage.RTR = 0; /* RTR 0:Data 1:Remote */
|
|
Boot_TxCanMessage.THDSE = 0; /* Transmit History Data Store Enable */
|
|
Boot_TxCanMessage.IDH = 0; /* ID Data (high) */
|
|
Boot_TxCanMessage.DLC = 8; /* DLC Data */
|
|
Boot_TxCanMessage.LBL = 0; /* Label Data */
|
|
Boot_TxCanMessage.TS = 0; /* Timestamp Data */
|
|
Copy_Array_to_Array(Boot_TxCanMessage.DB,Data,Dlc);
|
|
re_flag=R_CAN_TrmByTRFIFO0_CH0(&Boot_TxCanMessage);
|
|
if(re_flag == CAN_RTN_OK)
|
|
{
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
void BusOff_Detect(void)
|
|
{
|
|
if(R_CAN_ReadChStatus_CH0()&0x02)
|
|
{
|
|
if(C0ERFLL&0x08)
|
|
{
|
|
if(BusOff_flag==0)
|
|
{
|
|
BusOff_flag=1;//clear after 40 IGN cycle
|
|
}
|
|
}
|
|
if(C0ERFLL!=0)
|
|
{
|
|
C0ERFLL=0;
|
|
}
|
|
C0CTRL&=0xfffc;
|
|
}
|
|
else
|
|
{
|
|
BusOff_flag=0;
|
|
}
|
|
}
|
|
|
|
/******************************/
|
|
//获取can总线出错状态
|
|
//返回值
|
|
/******************************/
|
|
unsigned char GetCanBusOffErr(void)
|
|
{
|
|
if(BusOff_flag==0)
|
|
return 0;
|
|
else
|
|
return 1;
|
|
}
|
|
|