<br />有关ecan的接收屏蔽问题<br />我想屏蔽掉can标识符的后三位,我这是标准的can没有扩展位,前几位的can标识符的前8位为1000 1001,是不是MID还是按照不屏蔽之前的设置,跟发送邮箱的一致,只要设置屏蔽寄存器屏蔽掉想要屏蔽的位就可以了?我是再初始化程序中设置的接收以及接收屏蔽,程序如下,结果总是不对,不知道为什么,大家帮忙看一下谢谢了。<br />void InitECan(void)<br />{<br /> struct ECAN_REGS ECanaShadow;<br /> struct LAM_REGS ECanaLAMRegs;<br /> EALLOW;<br /> ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all;<br /> ECanaShadow.CANTIOC.bit.TXFUNC = 1;<br /> ECanaRegs.CANTIOC.all = ECanaShadow.CANRIOC.all;<br /> <br /> ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all;<br /> ECanaShadow.CANRIOC.bit.RXFUNC = 1;<br /> ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all;<br /> EDIS;<br /> <br /><br /><br /> ECanaRegs.CANME.all = 0x00000000; <br /> //ECanaMboxes.MBOX16.MID.all=0x113C0000;<br /> ECanaMboxes.MBOX16.MID.all=0x51200000;<br /> ECanaLAMRegs.LAM16.all=0x801FFFFF;<br /> ECanaMboxes.MBOX16.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX16.MCF.bit.DLC = ECanaMboxes.MBOX0.MCF.bit.DLC; <br /><br /> /*0~15 is TX,16~31 is RX*/<br /> ECanaRegs.CANMD.all = 0xFFFF0000;<br /> <br /> /*32个邮箱使能*/<br /> ECanaRegs.CANME.all = 0x00010001;<br /> <br /> <br /> ECanaMboxes.MBOX0.MCF.all = 0;<br /> ECanaMboxes.MBOX1.MCF.all = 0;<br /> ECanaMboxes.MBOX2.MCF.all = 0;<br /> ECanaMboxes.MBOX3.MCF.all = 0;<br /> ECanaMboxes.MBOX4.MCF.all = 0;<br /> ECanaMboxes.MBOX5.MCF.all = 0;<br /> ECanaMboxes.MBOX6.MCF.all = 0;<br /> ECanaMboxes.MBOX7.MCF.all = 0;<br /> ECanaMboxes.MBOX8.MCF.all = 0;<br /> ECanaMboxes.MBOX9.MCF.all = 0;<br /> ECanaMboxes.MBOX10.MCF.all = 0;<br /> ECanaMboxes.MBOX11.MCF.all = 0;<br /> ECanaMboxes.MBOX12.MCF.all = 0;<br /> ECanaMboxes.MBOX13.MCF.all = 0;<br /> ECanaMboxes.MBOX14.MCF.all = 0;<br /> ECanaMboxes.MBOX15.MCF.all = 0;<br /> ECanaMboxes.MBOX16.MCF.all = 0;<br /> ECanaMboxes.MBOX17.MCF.all = 0;<br /> ECanaMboxes.MBOX18.MCF.all = 0;<br /> ECanaMboxes.MBOX19.MCF.all = 0;<br /> ECanaMboxes.MBOX20.MCF.all = 0;<br /> ECanaMboxes.MBOX21.MCF.all = 0;<br /> ECanaMboxes.MBOX22.MCF.all = 0;<br /> ECanaMboxes.MBOX23.MCF.all = 0;<br /> ECanaMboxes.MBOX24.MCF.all = 0;<br /> ECanaMboxes.MBOX25.MCF.all = 0;<br /> ECanaMboxes.MBOX26.MCF.all = 0;<br /> ECanaMboxes.MBOX27.MCF.all = 0;<br /> ECanaMboxes.MBOX28.MCF.all = 0;<br /> ECanaMboxes.MBOX29.MCF.all = 0;<br /> ECanaMboxes.MBOX30.MCF.all = 0;<br /> ECanaMboxes.MBOX31.MCF.all = 0;<br /> <br /><br /> //没有远方应答帧被请求<br /> ECanaMboxes.MBOX0.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX1.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX2.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX3.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX4.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX5.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX6.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX7.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX8.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX9.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX10.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX11.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX12.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX13.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX14.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX15.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX16.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX17.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX18.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX19.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX20.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX21.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX22.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX23.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX24.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX25.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX26.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX27.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX28.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX29.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX30.MCF.bit.RTR = 0;<br /> ECanaMboxes.MBOX31.MCF.bit.RTR = 0;<br /> EALLOW;<br /> /*邮箱屏蔽使能*/<br /> ECanaRegs.CANMIM.all = 0xFFFFFFFF;<br /> ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;<br /> ECanaShadow.CANMC.bit.CCR = 1;<br /> ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;<br /> EDIS;<br /> <br /> do<br /> {<br /> ECanaShadow.CANES.all = ECanaRegs.CANES.all;<br /> }while(ECanaShadow.CANES.bit.CCE != 1);<br /> <br /> EALLOW;<br /> ECanaShadow.CANBTC.bit.BRP = 19;<br /> ECanaShadow.CANBTC.bit.TSEG2 = 5;<br /> ECanaShadow.CANBTC.bit.TSEG1 =7;<br /> <br /> /*(BRPREG+1)=10 feeds a 15MHz CAN clock*/<br /> // if (baud_rate==BR125)<br /> //ECanaShadow.CANBTC.bit.BRP = 79;//位定时器控制寄存器<br /> /*150/10=15*/<br /> //else<br /> //if(baud_rate==BR250)<br /> // ECanaShadow.CANBTC.bit.BRP = 39;<br /> //else<br /> // if(baud_rate==BR500) <br /> // ECanaShadow.CANBTC.bit.BRP = 19;<br /> ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all;<br /> <br /> ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;<br /> ECanaShadow.CANMC.bit.CCR = 0;<br /> ECanaShadow.CANMC.bit.DBO=1;<br /> ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;<br /> EDIS;<br /> <br /> do<br /> {<br /> ECanaShadow.CANES.all = ECanaRegs.CANES.all;<br /> }while(ECanaShadow.CANES.bit.CCE != 0);<br /><br /><br /> EALLOW;<br /> ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;<br /> ECanaShadow.CANMC.bit.STM = 1;<br /> ECanaShadow.CANMC.bit.SCB = 1;<br /> ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;<br /> EDIS;<br /> <br /> ECanaRegs.CANME.all = 0x00000000;<br /><br /> <br /> <br /> #if CAN_INT<br /> EALLOW;<br /> ECanaRegs.CANMIM.all = 0xffffffff;<br /> ECanaRegs.CANMIL.all = 0;<br /> ECanaRegs.CANGIF0.all = 0xFFFFFFFF;<br /> ECanaRegs.CANGIF1.all = 0xFFFFFFFF;<br /> ECanaRegs.CANGIM.bit.I0EN = 1;<br /> ECanaRegs.CANGIM.bit.I1EN = 1;<br /> ECanaRegs.CANGIM.all = 0x3ff07;<br /> EDIS;<br /> PieCtrl.PIEIER9.bit.INTx6 = 1;<br /> PieCtrl.PIEIER9.bit.INTx5 = 1;<br /> #endif<br />}<br /><br /><br /><br /><br /> |
|