打印
[PIC®/AVR®/dsPIC®产品]

dsPIC33EP128GP504芯片寄存器C1BUFPNT1咨询

[复制链接]
946|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
arvinwan|  楼主 | 2019-10-25 09:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
实验中发现寄存器C1BUFPNT1在接收到报文后里面的值会被修改,按照以下范例,该值为初始化设定后不被修改。 求助各路大神,跪谢!

/******************************************************************************
* Function:     void Ecan1WriteRxAcptFilter(int16_t n, int32_t identifier,
*               uint16_t exide,uint16_t bufPnt,uint16_t maskSel)
*
* PreCondition:  None
*
* Input:         n-> Filter number [0-15]
*                identifier-> Bit ordering is given below
*                Filter Identifier (29-bits) :
*                0b000f ffff ffff ffff ffff ffff ffff ffff
*                     |____________|_____________________|
*                        SID10:0          EID17:0
*
*               Filter Identifier (11-bits) :
*               0b0000 0000 0000 0000 0000 0fff ffff ffff
*                                           |___________|
*                                             SID10:
*               exide -> "0" for standard identifier
*                        "1" for Extended identifier
*               bufPnt -> Message buffer to store filtered message [0-15]
*               maskSel -> Optinal Masking of identifier bits [0-3]
*
* Output:        None
*
* Side Effects:  None
*
* Overview:      Configures Acceptance filter "n" for ECAN1.
*****************************************************************************/
void Ecan1WriteRxAcptFilter( int16_t n, int32_t identifier, uint16_t exide, uint16_t bufPnt, uint16_t maskSel )
{
    uint32_t    sid10_0 = 0;

    uint32_t    eid15_0 = 0;

    uint32_t    eid17_16 = 0;
    uint16_t    *sidRegAddr;
    uint16_t    *bufPntRegAddr;
    uint16_t    *maskSelRegAddr;
    uint16_t    *fltEnRegAddr;

    C1CTRL1bits.WIN = 1;

    // Obtain the Address of CiRXFnSID, CiBUFPNTn, CiFMSKSELn and CiFEN register for a given filter number "n"
    sidRegAddr = ( uint16_t * ) ( &C1RXF0SID + (n << 1) );
    bufPntRegAddr = ( uint16_t * ) ( &C1BUFPNT1 + (n >> 2) );
    maskSelRegAddr = ( uint16_t * ) ( &C1FMSKSEL1 + (n >> 3) );
    fltEnRegAddr = ( uint16_t * ) ( &C1FEN1 );

使用特权

评论回复
沙发
arvinwan|  楼主 | 2019-10-25 10:30 | 只看该作者
各位大神,万谢!

使用特权

评论回复
板凳
EgbertCui| | 2019-10-25 11:02 | 只看该作者
坐等高手

使用特权

评论回复
地板
antusheng| | 2019-10-25 15:03 | 只看该作者
什么值被修改了

使用特权

评论回复
5
huahuagg| | 2019-10-26 22:07 | 只看该作者
这个寄存器跟接收报文有关系吗

使用特权

评论回复
6
huahuagg| | 2019-10-26 22:07 | 只看该作者
没用过这个系列,也不知道这个功能,如果有关系,就会改,要不然怎么可能改了其他代码。

使用特权

评论回复
7
arvinwan|  楼主 | 2019-10-28 10:28 | 只看该作者
C1BUFPNT1的值会被修改为6,与初始化不同,从手册上来看这个寄存器是个指针寄存器,按理不会被修改

583785db651f520695.png (1.37 KB )

583785db651f520695.png

使用特权

评论回复
8
CoolSilicon| | 2019-10-28 10:40 | 只看该作者
这个至少filter寄存器而已, 按理说是不会变的..
麻烦你再次确认一下, 是不是你搞错了?!

使用特权

评论回复
9
zhuotuzi| | 2019-10-31 20:32 | 只看该作者

使用特权

评论回复
10
zhuotuzi| | 2019-10-31 20:33 | 只看该作者
太不科学了。

使用特权

评论回复
11
gaoyang9992006| | 2019-10-31 20:55 | 只看该作者
难道这个不会改变,是不是楼主搞错了,看看手册这个怎么介绍的。

使用特权

评论回复
12
风凌天| | 2019-11-25 13:54 | 只看该作者
我想知道这三个寄存器是什么关系CiRXFnSID ,CiFMSKSEL1,CiRXMnSID,能举个例子说明一下吗?
CiBUFPNT1这个寄存器是将屏蔽后的标识符存入其中吧。
能帮我解答一下吗?谢谢!

使用特权

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

本版积分规则

1

主题

3

帖子

0

粉丝