基于dsPIC33FJ128MC506的CAN通信(07-100)
C1CTRL1bits.REQOP=4;
本文引用地址:http://www.biyoush.com/article/92042.htmwhile(C1CTRL1bits.OPMODE!=4); //請求進(jìn)入配置模式
ecan1ClkInit(); //調(diào)用波特率設(shè)置函數(shù)
C1FCTRLbits.DMABS=0b000; //在DMA RAM 中設(shè)置4個CAN報(bào)文緩沖
ecan1WriteRxAcptFilter(1,0x36,0,2,0); //配置接過收濾寄存器
/*配置接收屏蔽寄存器,要注意的是,這里設(shè)為“1”的位是非屏蔽位,設(shè)為“0”的位為屏蔽位。這里的0x7FF將會對標(biāo)準(zhǔn)幀ID的每一位都進(jìn)行檢查是否對應(yīng)的過濾器相匹配*/
ecan1WriteRxAcptMask(0,0x7ff,0);
C1CTRL1bits.REQOP=0;
while(C1CTRL1bits.OPMODE!=0); //進(jìn)入正常模式
/*以下語句設(shè)置CAN報(bào)文的發(fā)射接收控制*/
C1RXFUL1=C1RXFUL2=C1RXOVF1=C1RXOVF2=0x0000;
C1TR01CONbits.TXEN0=1; /*ECAN1的0緩沖器為發(fā)射緩沖 */
C1TR01CONbits.TXEN1=0; /* ECAN1的1緩沖器為接收緩沖 */
C1TR01CONbits.TX0PRI=0b11; /* 發(fā)射緩沖的優(yōu)先級*/
}
數(shù)據(jù)的發(fā)射和接收
寫報(bào)文ID
下面的函數(shù)將一個報(bào)文ID寫到ECAN1的發(fā)射緩沖區(qū),其中各個參數(shù)代表的含義如下:
/*buf -> 發(fā)射寄存器號
txIdentifier ->發(fā)射報(bào)文的ID
ide -> "0" 報(bào)文為標(biāo)準(zhǔn)幀
"1" 報(bào)文為擴(kuò)展幀
remoteTransmit -> "0" 報(bào)文為正常報(bào)文
"1" 報(bào)文為遠(yuǎn)程報(bào)文 */
void ecan1WriteTxMsgBufId(unsigned int buf, long txIdentifier, unsigned int ide, unsigned int remoteTransmit)
{
評論