打印
[技术问答]

新唐M453系列CAN的库函数CAN_CLR_INT_PENDING_BIT锁问题

[复制链接]
1166|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

粉丝