打印

dsPIC33EP128GP504芯片寄存器C1BUFPNT1咨询

[复制链接]
384|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
houcs|  楼主 | 2021-3-1 21:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
实验中发现寄存器C1BUFPNT1在接收到报文后里面的值会被修改

使用特权

评论回复
沙发
ousj| | 2021-3-1 22:00 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
houcs|  楼主 | 2021-3-1 22:02 | 只看该作者
按照以下范例,该值为初始化设定后不被修改。 求助各路大神,跪谢!

/******************************************************************************
* 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 );

使用特权

评论回复
地板
xxmmi| | 2021-3-1 22:04 | 只看该作者
什么值被修改了

使用特权

评论回复
5
kangzj| | 2021-3-1 22:08 | 只看该作者
这个寄存器跟接收报文有关系吗

使用特权

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

使用特权

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

使用特权

评论回复
8
houcs|  楼主 | 2021-3-1 22:14 | 只看该作者

使用特权

评论回复
9
gongche| | 2021-3-1 22:16 | 只看该作者
这个至少filter寄存器而已, 按理说是不会变的..

使用特权

评论回复
10
wenfen| | 2021-3-1 22:24 | 只看该作者
再次确认一下, 是不是你搞错了?!

使用特权

评论回复
11
tian111| | 2021-3-1 22:26 | 只看该作者

使用特权

评论回复
12
songqian17| | 2021-3-1 22:28 | 只看该作者
太不科学了。

使用特权

评论回复
13
chuxh| | 2021-3-1 22:31 | 只看该作者
难道这个不会改变,是不是楼主搞错了,看看手册这个怎么介绍的。

使用特权

评论回复
14
llljh| | 2021-3-1 22:33 | 只看该作者
我想知道这三个寄存器是什么关系CiRXFnSID ,CiFMSKSEL1,CiRXMnSID,能举个例子说明一下吗?

使用特权

评论回复
15
renyaq| | 2021-3-1 22:35 | 只看该作者
CiBUFPNT1这个寄存器是将屏蔽后的标识符存入其中吧。

使用特权

评论回复
16
houcs|  楼主 | 2021-3-1 22:38 | 只看该作者

嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

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

本版积分规则

743

主题

8382

帖子

5

粉丝