Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
d8d96bd242
|
|||
|
5f6eb7aa69
|
|||
|
3a05efb36b
|
|||
|
de0f671c26
|
|||
|
aa1b0ccb18
|
|||
|
7faf6491ec
|
|||
|
49fcacf9cc
|
|||
|
ec86a22bb1
|
|||
|
1b85816262
|
|||
|
481910f755
|
|||
|
c1bcad0c50
|
|||
|
b1d8ce2643
|
|||
|
007ad1dda6
|
@@ -1088,13 +1088,13 @@ void CAN3_SCE_IRQHandler(void)
|
|||||||
break;
|
break;
|
||||||
case RT_CAN_BUS_ACK_ERR:/* attention !!! test ack err's unit is transmit unit */
|
case RT_CAN_BUS_ACK_ERR:/* attention !!! test ack err's unit is transmit unit */
|
||||||
drv_can3.device.status.ackerrcnt++;
|
drv_can3.device.status.ackerrcnt++;
|
||||||
if (!READ_BIT(drv_can3.CanHandle.Instance->TSR, CAN_FLAG_TXOK0))
|
// if (!READ_BIT(drv_can3.CanHandle.Instance->TSR, CAN_FLAG_TXOK0))
|
||||||
rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 0 << 8);
|
// rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 0 << 8);
|
||||||
else if (!READ_BIT(drv_can3.CanHandle.Instance->TSR, CAN_FLAG_TXOK0))
|
// else if (!READ_BIT(drv_can3.CanHandle.Instance->TSR, CAN_FLAG_TXOK0))
|
||||||
rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 1 << 8);
|
// rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 1 << 8);
|
||||||
else if (!READ_BIT(drv_can3.CanHandle.Instance->TSR, CAN_FLAG_TXOK0))
|
// else if (!READ_BIT(drv_can3.CanHandle.Instance->TSR, CAN_FLAG_TXOK0))
|
||||||
rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 2 << 8);
|
// rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 2 << 8);
|
||||||
break;
|
// break;
|
||||||
case RT_CAN_BUS_IMPLICIT_BIT_ERR:
|
case RT_CAN_BUS_IMPLICIT_BIT_ERR:
|
||||||
case RT_CAN_BUS_EXPLICIT_BIT_ERR:
|
case RT_CAN_BUS_EXPLICIT_BIT_ERR:
|
||||||
drv_can3.device.status.biterrcnt++;
|
drv_can3.device.status.biterrcnt++;
|
||||||
@@ -1109,6 +1109,16 @@ void CAN3_SCE_IRQHandler(void)
|
|||||||
drv_can3.device.status.snderrcnt = (errtype >> 16 & 0xFF);
|
drv_can3.device.status.snderrcnt = (errtype >> 16 & 0xFF);
|
||||||
drv_can3.device.status.errcode = errtype & 0x07;
|
drv_can3.device.status.errcode = errtype & 0x07;
|
||||||
hcan->Instance->MSR |= CAN_MSR_ERRI;
|
hcan->Instance->MSR |= CAN_MSR_ERRI;
|
||||||
|
|
||||||
|
// 警告: 为了避免can 发送线程在异常情况被阻塞,在遇到异常时,强制异常结束发送逻辑
|
||||||
|
// 本段代码待测试 !!!!
|
||||||
|
if (!READ_BIT(drv_can3.CanHandle.Instance->TSR, CAN_FLAG_TXOK0))
|
||||||
|
rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 0 << 8);
|
||||||
|
else if (!READ_BIT(drv_can3.CanHandle.Instance->TSR, CAN_FLAG_TXOK0))
|
||||||
|
rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 1 << 8);
|
||||||
|
else if (!READ_BIT(drv_can3.CanHandle.Instance->TSR, CAN_FLAG_TXOK0))
|
||||||
|
rt_hw_can_isr(&drv_can3.device, RT_CAN_EVENT_TX_FAIL | 2 << 8);
|
||||||
|
|
||||||
rt_interrupt_leave();
|
rt_interrupt_leave();
|
||||||
}
|
}
|
||||||
#endif /* BSP_USING_CAN3 */
|
#endif /* BSP_USING_CAN3 */
|
||||||
|
|||||||
Reference in New Issue
Block a user