[技术问答] 新唐M453系列CAN的库函数CAN_CLR_INT_PENDING_BIT锁问题

[复制链接]
1455|3
 楼主| 845780319 发表于 2019-4-23 08:57 | 显示全部楼层 |阅读模式
CAN_CLR_INT_PENDING_BIT函数中有if((u32MsgIfNum = LockIF_TL(tCAN)) == 2)
                                                     u32MsgIfNum  = 0;
LockIF_TL函数我理解本意是判断接口1,2是否空闲使用,如果没有空闲的话不应该清除标志位。我是不是把该函数理解错了。
BigLeo8 发表于 2019-4-23 09:29 | 显示全部楼层
帮你顶下,如果有需要,可以加我1099811789
jasontu 发表于 2019-4-23 11:55 | 显示全部楼层
你是對的。
參考其它的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;

}
小明的同学 发表于 2019-4-23 13:01 | 显示全部楼层
不懂啊,这个函数的原型处没有备注?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部