基于dsPIC33FJ128MC506的CAN通信(07-100)
接收過濾寄存器和屏蔽寄存器的設(shè)置
本文引用地址:http://2s4d.com/article/92042.htm/* 下面的函數(shù)用來設(shè)置接收過濾器"n" ,各輸入?yún)?shù)的意義分別為:
n-> 過濾器號,范圍為[0-15]
identifier-> 合法的標(biāo)識符
exide -> 是否擴展數(shù)據(jù)幀,"0" 表示為標(biāo)準(zhǔn)數(shù)據(jù)幀,"1"表示為擴展數(shù)據(jù)幀
bufPnt -> 過濾后的信息存放的緩沖區(qū),范圍為[0-15]
maskSel -> 關(guān)連的屏蔽寄存器[0-3] */
void ecan1WriteRxAcptFilter(int n, long identifier, unsigned int exide, unsigned int bufPnt, unsigned int maskSel)
{
/*定義局部變量*/
unsigned long sid10_0=0, eid15_0=0, eid17_16=0;
unsigned int *sidRegAddr,*bufPntRegAddr,*maskSelRegAddr, *fltEnRegAddr;
/*因為將要設(shè)置的特殊寄存器要與別的寄存器共用地址,所以需設(shè)置控制位WIN*/
C1CTRL1bits.WIN=1;
/* 根據(jù)輸入的參數(shù),計算出相應(yīng)寄存器的地址,包括濾波器n的地址、緩沖指針寄存器地址、相關(guān)的屏蔽寄存器的地址及接收過濾使能寄存器的相關(guān)位*/
// 接過過濾寄存器的地址
sidRegAddr = (unsigned int *)(&C1RXF0SID + (n << 1));
//報文緩沖區(qū)地址
bufPntRegAddr = (unsigned int *)(&C1BUFPNT1 + ((n >> 2)*2) ) ;
//屏蔽寄存器地址
maskSelRegAddr = (unsigned int *)(&C1FMSKSEL1 + ((n >> 3)*2));
//過濾器使能地址
評論