你是對的。
參考其它的bsp, 在看是否為busy. busy也是不清標志位
void CAN_CLR_INT_PENDING_BIT(CAN_T *tCAN, uint8_t u32MsgNum)
{
uint32_t u32MsgIfNum = 0;
uint32_t u32IFBusyCount = 0;
while(u32IFBusyCount < 0x10000000)
{
if((tCAN->IF[0].CREQ & CAN_IF_CREQ_BUSY_Msk) == 0)
{
u32MsgIfNum = 0;
break;
}
else if((tCAN->IF[1].CREQ & CAN_IF_CREQ_BUSY_Msk) == 0)
{
u32MsgIfNum = 1;
break;
}
u32IFBusyCount++;
}
tCAN->IF[u32MsgIfNum].CMASK = CAN_IF_CMASK_CLRINTPND_Msk | CAN_IF_CMASK_TXRQSTNEWDAT_Msk;
tCAN->IF[u32MsgIfNum].CREQ = 1 + u32MsgNum;
}
|