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] = ...@@ -507,7 +507,7 @@ const st_CANMsgAttribute CAN_CH0_CAN_MSG_CONST_ARRAY[CAN_CH0_ID_TOTAL_MAX] =
1000ul, 1000ul,
0x225ul, 0x225ul,
(( void * )0), (( void * )0),
(( void * )0), (CAN_0x225_Receive),
(( void * )0), (( void * )0),
}, },
{ {
...@@ -667,7 +667,7 @@ const st_CANMsgAttribute CAN_CH0_CAN_MSG_CONST_ARRAY[CAN_CH0_ID_TOTAL_MAX] = ...@@ -667,7 +667,7 @@ const st_CANMsgAttribute CAN_CH0_CAN_MSG_CONST_ARRAY[CAN_CH0_ID_TOTAL_MAX] =
1000ul, 1000ul,
0x234ul, 0x234ul,
(( void * )0), (( void * )0),
(( void * )0), (CAN_0x234_Receive),
(( void * )0), (( void * )0),
}, },
{ {
......
...@@ -26,7 +26,7 @@ void Can_Init(void) ...@@ -26,7 +26,7 @@ void Can_Init(void)
Can_Config.MASK[2] = 0x3FFU; Can_Config.MASK[2] = 0x3FFU;
Can_Config.MASK[3] = 0x7FFU; Can_Config.MASK[3] = 0x7FFU;
#endif #endif
Can_Config.rx_callback = Can_Rx_Cak; Can_Config.rx_callback = Read_RingBuff;//Can_Rx_Cak;
COM_CAN_Init(); COM_CAN_Init();
rte_can_init(&Can_Config); rte_can_init(&Can_Config);
...@@ -295,22 +295,42 @@ void COM_CAN_Init(void) ...@@ -295,22 +295,42 @@ void COM_CAN_Init(void)
CAN_CH0_CanMsgOp.u8CAN_RX_ENABLE = CAN_N_RX_Enable; 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_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); CAN_RX_SetEnable(&CAN_CH0_CanMsgOp, CAN_N_RX_Enable);
}
void CAN_TX_Init(void)
{
memset(pTXBuff, 0, sizeof(pTXBuff)); memset(pTXBuff, 0, sizeof(pTXBuff));
CAN_CH0_CanMsgTxOp.CanMsg = (st_CAN_SendOperation *)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_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); 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恢复函数 * @brief Buff恢复函数
* @param deltaTime 调用时间 单位ms 10MS调用 * @param deltaTime 调用时间 单位ms 10MS调用
*/ */
uint16_t CanRxInitflag = 0;
void Can_BusOff_Recover(uint8_t deltaTime) void Can_BusOff_Recover(uint8_t deltaTime)
{ {
if (get_can_busoff(CAN_CH_0) == 2) if (get_can_busoff(CAN_CH_0) == 2)
{ {
CanRxInitflag = 1;
if (RSCAN0Busoff.Status == RSCAN0_BUS_STABLE) if (RSCAN0Busoff.Status == RSCAN0_BUS_STABLE)
{ {
RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV1; RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV1;
...@@ -319,18 +339,20 @@ void Can_BusOff_Recover(uint8_t deltaTime) ...@@ -319,18 +339,20 @@ void Can_BusOff_Recover(uint8_t deltaTime)
if (RSCAN0Busoff.Status == RSCAN0_BUS_OFF_LV1) if (RSCAN0Busoff.Status == RSCAN0_BUS_OFF_LV1)
{ {
RSCAN0Busoff.Timer++; 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.Timer = 0U;
RSCAN0Busoff.Cnt++; RSCAN0Busoff.Cnt++;
if (RSCAN0Busoff.Cnt >= 10U) if (RSCAN0Busoff.Cnt >= 10U)/**/
{ {
RSCAN0Busoff.Cnt = 0U; RSCAN0Busoff.Cnt = 0U;
RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV2; RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV2;
} }
//需调用CAN中止函数,中止所有硬件buf内要发送的数据
Can_QuickTimer_Init();
reset_busoff(CAN_CH_0); reset_busoff(CAN_CH_0);
} }
} }
...@@ -338,9 +360,11 @@ void Can_BusOff_Recover(uint8_t deltaTime) ...@@ -338,9 +360,11 @@ void Can_BusOff_Recover(uint8_t deltaTime)
{ {
RSCAN0Busoff.Timer++; 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; RSCAN0Busoff.Timer = 0U;
//需调用CAN中止函数,中止所有硬件buf内要发送的数据
Can_QuickTimer_Init();
reset_busoff(CAN_CH_0); reset_busoff(CAN_CH_0);
} }
} }
...@@ -350,7 +374,20 @@ void Can_BusOff_Recover(uint8_t deltaTime) ...@@ -350,7 +374,20 @@ void Can_BusOff_Recover(uint8_t deltaTime)
} }
else /* 总线正常,没有Bus-off发生*/ 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 ...@@ -27,18 +27,18 @@ typedef struct
uint8_t Status; uint8_t Status;
uint8_t Timer; uint8_t Timer;
uint8_t Cnt; uint8_t Cnt;
uint8_t ReportDTCCnt; uint8_t RecoverTimer;
} RSCAN0BusoffMonitorStruct; } RSCAN0BusoffMonitorStruct;
extern void CAN_TX_Init(void);
extern void Can_Tx_Apply_Buff(void); extern void Can_Tx_Apply_Buff(void);
extern void Can_RX_Apply_Buff(void); extern void Can_RX_Apply_Buff(void);
extern void Can_BusOff_Recover(uint8_t deltaTime); extern void Can_BusOff_Recover(uint8_t deltaTime);
extern void COM_CAN_Init(void); extern void COM_CAN_Init(void);
extern void Can_Init(void); extern void Can_Init(void);
extern void Can_Rx_Cak(CanTxRxMsg *Msg); extern void Can_Rx_Cak(CanTxRxMsg *Msg);
extern void Busoff(void);
extern uint8_t COM_APP_Process(st_CAN_Msg *Msg); extern uint8_t COM_APP_Process(st_CAN_Msg *Msg);
extern void Can_Write(st_CAN_Msg *Msg); extern void Can_Write(st_CAN_Msg *Msg);
......
...@@ -47,6 +47,7 @@ static void Power_KL30_Init(void) ...@@ -47,6 +47,7 @@ static void Power_KL30_Init(void)
eeprom_StoreInfo_Init(); eeprom_StoreInfo_Init();
Can_Init(); Can_Init();
DFlash_init(); DFlash_init();
CAN_TX_Init();
Analog_Signal_Conv_Init(); Analog_Signal_Conv_Init();
BU98R10_Init(); BU98R10_Init();
Sys_KL30_Init(); Sys_KL30_Init();
...@@ -83,6 +84,7 @@ static void Power_Wakeup_Init(void) ...@@ -83,6 +84,7 @@ static void Power_Wakeup_Init(void)
Simulated_IIC_2_Init(); Simulated_IIC_2_Init();
Gpio_Init(Gpio_WakeUp_Init); Gpio_Init(Gpio_WakeUp_Init);
Can_Init(); Can_Init();
CAN_TX_Init();
eeprom_StoreInfo_Init(); eeprom_StoreInfo_Init();
Analog_Signal_Conv_Init(); Analog_Signal_Conv_Init();
BU98R10_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