基于dsPIC33FJ128MC506的CAN通信(07-100)
C1CTRL1bits.REQOP=4;
本文引用地址:http://m.butianyuan.cn/article/92042.htmwhile(C1CTRL1bits.OPMODE!=4); //請(qǐng)求進(jìn)入配置模式
ecan1ClkInit(); //調(diào)用波特率設(shè)置函數(shù)
C1FCTRLbits.DMABS=0b000; //在DMA RAM 中設(shè)置4個(gè)CAN報(bào)文緩沖
ecan1WriteRxAcptFilter(1,0x36,0,2,0); //配置接過(guò)收濾寄存器
/*配置接收屏蔽寄存器,要注意的是,這里設(shè)為“1”的位是非屏蔽位,設(shè)為“0”的位為屏蔽位。這里的0x7FF將會(huì)對(duì)標(biāo)準(zhǔn)幀ID的每一位都進(jìn)行檢查是否對(duì)應(yīng)的過(guò)濾器相匹配*/
ecan1WriteRxAcptMask(0,0x7ff,0);
C1CTRL1bits.REQOP=0;
while(C1CTRL1bits.OPMODE!=0); //進(jìn)入正常模式
/*以下語(yǔ)句設(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)先級(jí)*/
}
數(shù)據(jù)的發(fā)射和接收
寫(xiě)報(bào)文ID
下面的函數(shù)將一個(gè)報(bào)文ID寫(xiě)到ECAN1的發(fā)射緩沖區(qū),其中各個(gè)參數(shù)代表的含義如下:
/*buf -> 發(fā)射寄存器號(hào)
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)
{
評(píng)論