基于dsPIC33FJ128MC506的CAN通信(07-100)
下面的函数用来写接收屏蔽寄存器"m" ,各输入参数的意义分别为:
本文引用地址:http://www.amcfsurvey.com/article/92042.htmm-> 屏蔽寄存器号[0-3]
identifier->屏蔽位
mide -> "0" 表示无论是标准帧还是扩展帧,屏蔽器都起作用
"1" 表示屏蔽器是否起作用要参照'exide' 位 */
void ecan1WriteRxAcptMask(int m, long identifier, unsigned int mide)
{
/*定义局部变量*/
unsigned long sid10_0=0, eid15_0=0, eid17_16=0;
unsigned int *maskRegAddr;
//因为将要设置的特殊寄存器要与别的寄存器共用地址,所以需设置控制位WIN
C1CTRL1bits.WIN=1;
/* 根据"m"计算出CiRXMmSID 寄存器的地址*/
maskRegAddr = (unsigned int *)(&C1RXM0SID + (m << 2));
/* 将屏敝ID写入到屏蔽寄存器中*/
if(mide==1) { //扩展帧格式
eid15_0 = (identifier & 0xFFFF);
eid17_16= (identifier>>16) & 0x3;
sid10_0 = (identifier>>18) & 0x7FF;
*maskRegAddr=(sid10_0)<<5 + 0x8 + eid17_16;
*(maskRegAddr+2)= eid15_0;
}else{ // 标准帧格式
sid10_0 = (identifier & 0x7FF);
*maskRegAddr=(sid10_0)<<5; *(maskRegAddr+2)=0;
}
评论