打印
[技术问答]

NUC970 CAN接收任意ID的数据

[复制链接]
843|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wzhzn|  楼主 | 2021-3-25 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、NUC970 裸机程序2、怎样配置CAN的寄存器,使CAN通信能够接收任意ID的数据包。
谢谢!

使用特权

评论回复
沙发
twjiang| | 2021-3-25 16:43 | 只看该作者
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;
}

使用特权

评论回复
板凳
twjiang| | 2021-3-26 17:25 | 只看该作者

Reference: NUC970 Technical Reference Manual Page 822,  (CAN_IFn_MASK2), Msk[28:16] = 0 即可。
Msk[28:16] = 0 The corresponding bit in the identifier of the message object cannot inhibit the match in the acceptance filtering.


以下表述有误:
/*  参考 NUC970 Technical Reference Manual Page 824.  CAN_IFn_ARB2, Bit 15, 0 = The Message Object is ignored by the Message Handler
             当把第15位配置成0,将会忽略指定的消息对象,即所有的CAN消息对象将会被处理! */

使用特权

评论回复
地板
laocuo1142| | 2021-12-15 15:54 | 只看该作者

我认为例程和底层的驱动均是基于标识符列表模式,没有屏蔽位模式。因英语水平所限,不知怎样设置成屏蔽位模式,请各位指教,谢谢!

使用特权

评论回复
5
flycamelaaa| | 2021-12-15 15:55 | 只看该作者
Reference: NUC970 Technical Reference Manual Page 822,  (CAN_IFn_MASK2), Msk[28:16] = 0 即可。

以下表述有误:
/*  参考 NUC970 Technical Reference Manual Page 824.  CAN_IFn_ARB2, Bit 15, 0 = The Message Object is ignored by the Message Handler
             当把第15位配置成0,将会忽略指定的消息对象,即所有的CAN消息对象将会被处理! */

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

12

帖子

1

粉丝