打印
[DSP编程]

ECAN的ECanbRegs.CANRMP寄存器问题

[复制链接]
1807|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
现象:通过不同的ID发送到邮箱2、12和24,接着对应的RMP位被置位,然后去清除某一RMP时,其他的RMP也被清除了。
问题:清除某一RPM,其余的RMP也被清除,这是什么原因?DSP数据手册没有说明啊,你们有没有遇到过?
Uint32 test_CanRec1=0,test_CanRec2=0;
Uint16 test_CanRec3=0,test_CanRec4=0;
#pragma CODE_SECTION(CAN_Receiv_EventManager, "ramfuncs");
void CAN_Receiv_EventManager(void){
        if(Par_uCAN_OPrater_EN == 1 && Par_FieldBusType == 3){
                test_CanRec2 = ECanbRegs.CANRMP.all;
                if(test_CanRec4 & 0x0001){
                        if(ECanbRegs.CANRMP.bit.RMP24 == 1){                      //
                                ECanbRegs.CANRMP.bit.RMP24 = 1;
                        }
                }
                if(test_CanRec4 & 0x0004){
                        if(ECanbRegs.CANRMP.bit.RMP2 == 1){                      //
                                ECanbRegs.CANRMP.bit.RMP2 = 1;
                        }
                }
                test_CanRec1 = ECanbRegs.CANRMP.all;
                if(test_CanRec4 & 0x0002){
                        if(ECanbRegs.CANRMP.bit.RMP12 == 1){
                                ECanbRegs.CANRMP.bit.RMP12 = 1;
                        }
                }
                test_CanRec3 = (Uint16)(ECanbRegs.CANRMP.all >>10);
        }
}

相关帖子

沙发
chenzhi658|  楼主 | 2017-7-13 14:49 | 只看该作者
坐等大神

使用特权

评论回复
板凳
chenzhi658|  楼主 | 2017-7-13 16:13 | 只看该作者

问题解决了,原来是代码书写问题,
比如清除24邮箱需要
ECanbShadow.CANRMP.all = 0;
ECanbShadow.CANRMP.bit.RMP24 = 1;
ECanbRegs.CANRMP.all = ECanbShadow.CANRMP.all;

使用特权

评论回复
地板
太不专一| | 2017-7-14 16:16 | 只看该作者
对啊,CAN的很多寄存器都必须用影子寄存器操作。

使用特权

评论回复
5
chenzhi658|  楼主 | 2017-7-17 11:00 | 只看该作者
太不专一 发表于 2017-7-14 16:16
对啊,CAN的很多寄存器都必须用影子寄存器操作。

但是
发送邮箱这样子,会多发
ECanbShadow.CANTRS.all = ECanbRegs.CANTRS.all;
ECanbShadow.CANTRS.bit.TRS17 = 1;
ECanbRegs.CANTRS.all = ECanbShadow.CANTRS.all;
也要这样写,才不会多发。你们也是这样子发送邮箱得嘛???
ECanbShadow.CANTRS.all = 0;
ECanbShadow.CANTRS.bit.TRS17 = 1;
ECanbRegs.CANTRS.all = ECanbShadow.CANTRS.all;

使用特权

评论回复
6
太不专一| | 2017-7-27 15:44 | 只看该作者
chenzhi658 发表于 2017-7-17 11:00
但是
发送邮箱这样子,会多发
ECanbShadow.CANTRS.all = ECanbRegs.CANTRS.all;

                        tempEcanReg.CANTRS.all = EcanReg->CANTRS.all;
                        tempEcanReg.CANTRS.bit.TRS1 = 1;
                        EcanReg->CANTRS.all = tempEcanReg.CANTRS.all;
不会多发啊

使用特权

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

本版积分规则

29

主题

247

帖子

1

粉丝