Commit 4ab79f59 authored by 李冠华's avatar 李冠华

🐞 fix:根据最新驱动,调通CAN功能

parent 40b31df2
......@@ -507,7 +507,7 @@ const st_CANMsgAttribute CAN_CH0_CAN_MSG_CONST_ARRAY[CAN_CH0_ID_TOTAL_MAX] =
1000ul,
0x225ul,
(( void * )0),
(( void * )0),
(CAN_0x225_Receive),
(( void * )0),
},
{
......@@ -667,7 +667,7 @@ const st_CANMsgAttribute CAN_CH0_CAN_MSG_CONST_ARRAY[CAN_CH0_ID_TOTAL_MAX] =
1000ul,
0x234ul,
(( void * )0),
(( void * )0),
(CAN_0x234_Receive),
(( void * )0),
},
{
......
......@@ -26,7 +26,7 @@ void Can_Init(void)
Can_Config.MASK[2] = 0x3FFU;
Can_Config.MASK[3] = 0x7FFU;
#endif
Can_Config.rx_callback = Can_Rx_Cak;
Can_Config.rx_callback = Read_RingBuff;//Can_Rx_Cak;
COM_CAN_Init();
rte_can_init(&Can_Config);
......@@ -295,22 +295,42 @@ void COM_CAN_Init(void)
CAN_CH0_CanMsgOp.u8CAN_RX_ENABLE = CAN_N_RX_Enable;
Can_RX_BuffInit(&CAN_CH0_CanMsgOp, CAN_CH0_CAN_MSG_CONST_ARRAY, CAN_CH0_ID_TOTAL_MAX);
CAN_RX_SetEnable(&CAN_CH0_CanMsgOp, CAN_N_RX_Enable);
}
void CAN_TX_Init(void)
{
memset(pTXBuff, 0, sizeof(pTXBuff));
CAN_CH0_CanMsgTxOp.CanMsg = (st_CAN_SendOperation *)pTXBuff;
CAN_CH0_CanMsgTxOp.pCAN_SendAttribute = CAN_CH0_CANSendAttr;
CAN_CH0_CanMsgTxOp.Total_Msg = CAN_CH0_ID_SEND_TOTAL;
CAN_CH0_CanMsgTxOp.Can_Write = COM_APP_Process;
CAN_CH0_CanMsgTxOp.u8CAN_TX_ENABLE = CAN_N_TX_Disable;
Can_TX_BuffInit(&CAN_CH0_CanMsgTxOp, CAN_CH0_CANSendAttr, CAN_CH0_ID_SEND_TOTAL, COM_APP_Process);
CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable);
}
void Can_QuickTimer_Init(void)
{
uint32_t i = 0u;
for (i = 0u; i < CAN_CH0_ID_SEND_TOTAL; i++)
{
Can_Msg_TX_FastInitCycle(&CAN_CH0_CanMsgTxOp, i, CAN_CH0_CANSendAttr[i].u32MsgCycleOffset);
}
}
/**
* @brief Buff恢复函数
* @param deltaTime 调用时间 单位ms 10MS调用
*/
uint16_t CanRxInitflag = 0;
void Can_BusOff_Recover(uint8_t deltaTime)
{
if (get_can_busoff(CAN_CH_0) == 2)
{
CanRxInitflag = 1;
if (RSCAN0Busoff.Status == RSCAN0_BUS_STABLE)
{
RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV1;
......@@ -319,18 +339,20 @@ void Can_BusOff_Recover(uint8_t deltaTime)
if (RSCAN0Busoff.Status == RSCAN0_BUS_OFF_LV1)
{
RSCAN0Busoff.Timer++;
if (RSCAN0Busoff.Timer >= RSCAN0_BUS_OFF_LV1_RECOVERY_TIME / deltaTime)
if (RSCAN0Busoff.Timer >= RSCAN0_BUS_OFF_LV1_RECOVERY_TIME / deltaTime)/**/
{
RSCAN0Busoff.Timer = 0U;
RSCAN0Busoff.Cnt++;
if (RSCAN0Busoff.Cnt >= 10U)
if (RSCAN0Busoff.Cnt >= 10U)/**/
{
RSCAN0Busoff.Cnt = 0U;
RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV2;
}
//需调用CAN中止函数,中止所有硬件buf内要发送的数据
Can_QuickTimer_Init();
reset_busoff(CAN_CH_0);
}
}
......@@ -338,9 +360,11 @@ void Can_BusOff_Recover(uint8_t deltaTime)
{
RSCAN0Busoff.Timer++;
if (RSCAN0Busoff.Timer >= RSCAN0_BUS_OFF_LV2_RECOVERY_TIME / deltaTime)
if (RSCAN0Busoff.Timer >= RSCAN0_BUS_OFF_LV2_RECOVERY_TIME / deltaTime)/**/
{
RSCAN0Busoff.Timer = 0U;
//需调用CAN中止函数,中止所有硬件buf内要发送的数据
Can_QuickTimer_Init();
reset_busoff(CAN_CH_0);
}
}
......@@ -350,7 +374,20 @@ void Can_BusOff_Recover(uint8_t deltaTime)
}
else /* 总线正常,没有Bus-off发生*/
{
RSCAN0Busoff.RecoverTimer++;
if (RSCAN0Busoff.RecoverTimer >= 4)
{
RSCAN0Busoff.RecoverTimer = 0;
RSCAN0Busoff.Status = RSCAN0_BUS_STABLE;
RSCAN0Busoff.Timer = 0;
RSCAN0Busoff.Cnt = 0;
}
if(CanRxInitflag == 1)
{
CanRxInitflag = 0;
Can_RX_Apply_Buff();
}
}
}
......
......@@ -27,18 +27,18 @@ typedef struct
uint8_t Status;
uint8_t Timer;
uint8_t Cnt;
uint8_t ReportDTCCnt;
uint8_t RecoverTimer;
} RSCAN0BusoffMonitorStruct;
extern void CAN_TX_Init(void);
extern void Can_Tx_Apply_Buff(void);
extern void Can_RX_Apply_Buff(void);
extern void Can_BusOff_Recover(uint8_t deltaTime);
extern void COM_CAN_Init(void);
extern void Can_Init(void);
extern void Can_Rx_Cak(CanTxRxMsg *Msg);
extern void Busoff(void);
extern uint8_t COM_APP_Process(st_CAN_Msg *Msg);
extern void Can_Write(st_CAN_Msg *Msg);
......
......@@ -47,6 +47,7 @@ static void Power_KL30_Init(void)
eeprom_StoreInfo_Init();
Can_Init();
DFlash_init();
CAN_TX_Init();
Analog_Signal_Conv_Init();
BU98R10_Init();
Sys_KL30_Init();
......@@ -83,6 +84,7 @@ static void Power_Wakeup_Init(void)
Simulated_IIC_2_Init();
Gpio_Init(Gpio_WakeUp_Init);
Can_Init();
CAN_TX_Init();
eeprom_StoreInfo_Init();
Analog_Signal_Conv_Init();
BU98R10_Init();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment