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