|
我用C8051F040调试CAN的时候,我通过设置屏蔽ID在同一消息目标中接收多个ID的报文,但怎么老是不能接受其<br /><br />他的ID,现在我只能接受相同设置的ID,下面是我的接受初始化程序<br /><br />void init_msg_object_RX (unsigned char MsgNum,unsigned int id) <br />{<br /> unsigned int temp;<br /> SFRPAGE = CAN0_PAGE;<br /> CAN0ADR = IF2CMDMSK; <br /> CAN0DAT = 0x00bb; <br /> /* IF2 Command Mask Registers =0x00bbWR/RD=1,Mask=0,Arb=1,Control=1,ClrIntPnd=1,TxRqst=0,DataA=1,DataB=1,一次发送8字节数据*/<br />//-----------------------感觉可能是这里设置的不对--------------------<br /> CAN0ADR = IF2MSK1; <br /> CAN0DAT = 0; <br /> CAN0DAT = 0xffc0;//屏蔽掉ID的最低四位,但实际上还是没有被屏蔽,不知是为什么<br /><br /> CAN0ADR = IF2ARB1; <br /> CAN0DAT = 0x0000; <br /> /*IF2 Arbitration Registers1 =0x0000,即ID15-0=0*/ <br /> temp=id<<2; //标准id为ID28-ID18,所以要左移2位<br /> temp&=0x1fff;<br /> temp|=0x8000;<br /> CAN0DAT = temp; <br /> /*IF2 Arbitration Registers2=100(id)00b<br /> MsgVal=1,Xtd=0,为标准模式,扩展ID无效,Dir=0,为接收*/<br /> CAN0DAT = 0x1488;<br /> /*IF2 Message Control Registers=0x0488<br /> NewDat=0,MsgLst=0,IntPnd=0,UMask=0,TxIE=0,RxIE=1,接收中断使 能;RmtEn=0,TxRqst=0EoB=1,DLC3-0=1000,即数据长度为8*/<br />//------------------------------------------------------------------- <br /><br /> CAN0ADR = IF2CMDRQST; <br /> CAN0DATL = MsgNum; <br /> /*IF2 Command Request Registers=MsgNum,将以上配置写入MsgNum号消息*/<br />}<br /><br /><br />希望知道的大侠给指点一下,迷茫了好几天了,谢谢!<br />另外如果从一个消息目标接收多个ID的报文,怎么确认是那个ID的报文那?怎么从RAM中读取消息ID?<br /><br /><br /><br /> |
|