找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

NUC970 CAN接收任意ID的数据

[复制链接]
楼主
admin 发表于 2021-3-25 16:48:44 | 显示全部楼层
The Message Objects and Identifier Masks for acceptance filtering of received messaged in the Message RAM.

https://github.com/OpenNuvoton/NUC970_NonOS_BSP/tree/master/SampleCode/CAN

int32_t CAN_SetRxMsgObj(UINT32  uCAN, uint8_t u8MsgObj, uint8_t u8idType, uint32_t u32id, uint8_t u8singleOrFifoLast)
{
    UINT32 uOffset = uCAN * CAN_OFFSET;

    if((inpw(REG_CAN0_IF2_CREQ+uOffset) & CAN_IF_CREQ_BUSY_Msk) != 0)
    {
        return FALSE;
    }

    /* Command Setting */
    outpw((REG_CAN0_IF2_CMASK+uOffset), (CAN_IF_CMASK_WRRD_Msk | CAN_IF_CMASK_MASK_Msk | CAN_IF_CMASK_ARB_Msk |
                                         CAN_IF_CMASK_CONTROL_Msk | CAN_IF_CMASK_DATAA_Msk | CAN_IF_CMASK_DATAB_Msk));

    if (u8idType == CAN_STD_ID)   /* According STD/EXT ID format,Configure Mask and Arbitration register */
    {
        outpw((REG_CAN0_IF2_ARB1+uOffset), 0x0);
        outpw((REG_CAN0_IF2_ARB2+uOffset), (CAN_IF_ARB2_MSGVAL_Msk | (u32id & 0x7FF)<< 2)); /* Identifier Masks */       /*  参考 NUC970 Technical Reference Manual Page 824.  CAN_IFn_ARB2, Bit 15, 0 = The Message Object is ignored by the Message Handler
             当把第15位配置成0,将会忽略指定的消息对象,即所有的CAN消息对象将会被处理! */
    }
    else
    {
        outpw((REG_CAN0_IF2_ARB1+uOffset), (u32id & 0xFFFF));
        outpw((REG_CAN0_IF2_ARB2+uOffset), (CAN_IF_ARB2_MSGVAL_Msk | CAN_IF_ARB2_XTD_Msk | (u32id & 0x1FFF0000)>>16));
    }

    outpw((REG_CAN0_IF2_MCON+uOffset), (inpw(REG_CAN0_IF2_MCON+uOffset) | CAN_IF_MCON_UMASK_Msk | CAN_IF_MCON_RXIE_Msk));

    if(u8singleOrFifoLast)
    {
        outpw((REG_CAN0_IF2_MCON+uOffset), (inpw(REG_CAN0_IF2_MCON+uOffset) | CAN_IF_MCON_EOB_Msk));
    }
    else
    {
        outpw((REG_CAN0_IF2_MCON+uOffset), (inpw(REG_CAN0_IF2_MCON+uOffset) & ~CAN_IF_MCON_EOB_Msk));
    }

    outpw((REG_CAN0_IF2_DAT_A1+uOffset), 0x0);
    outpw((REG_CAN0_IF2_DAT_A2+uOffset), 0x0);
    outpw((REG_CAN0_IF2_DAT_B1+uOffset), 0x0);
    outpw((REG_CAN0_IF2_DAT_B2+uOffset), 0x0);

    outpw((REG_CAN0_IF2_CREQ+uOffset), (1 + u8MsgObj)); /* Message Object */

    return TRUE;
}
牛卧堂
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU