基于CAN總線(xiàn)的機車(chē)實(shí)時(shí)監控系統
//將地址設置到驗收屏蔽寄存器 0(bank1)
candat=0x00; //bank1:驗收屏蔽0
candat=0x0f; //bank1:驗收屏蔽1無(wú)關(guān)
candat=0xff; //bank1:驗收屏蔽2無(wú)關(guān)
candat=0xff; //bank1:驗收屏蔽3無(wú)關(guān)
canadr=acfmod;
//將地址設置到acf模式寄存器
candat=0x55;
//單驗收濾波器使用11位id(sff)
canadr=acfprio;
//將地址設置到acf優(yōu)先級寄存器
candat=0xff;
//所有濾波器都為高優(yōu)先級
canadr=acfen;
//將地址設置到acf使能寄存器
candat=0x01;
//使能bank1的驗收濾波器
canmod=0x00;
//選擇操作模式,退出 can控制器復位模式
}
4 系統軟件設計
4.1 can初始化子程序
can控制器的初始化是系統設計工作中極為重要的部分,它是can總線(xiàn)正常工作的前提,關(guān)系整個(gè)車(chē)載系統能否正常工作,初始化工作既是一個(gè)重點(diǎn),也是一個(gè)難點(diǎn)。can通信初始化包括操作模式的設置、驗收濾波器的設置、總線(xiàn)定時(shí)器的設置等。驗收濾波器的設置決定了節點(diǎn)所接收的信息的格式;定時(shí)器設置確定 can總線(xiàn)數據傳輸波特率。80c51cpu接口將pelican與p87c591微控制器內部總線(xiàn)相連,通過(guò)5個(gè)特殊功能寄存器canadr、 candat、canmod、cansta和cancon對pelican寄存器和ram區進(jìn)行快捷的訪(fǎng)問(wèn)。對can進(jìn)行初始化實(shí)際就是對以上5個(gè)特殊功 能寄存器的進(jìn)行讀寫(xiě)訪(fǎng)問(wèn)。以下是用c語(yǔ)言編寫(xiě)的初始化子程序代碼。
void init_can(void)
{
canmod=0x01;
//將can控制器設置為復位模式以啟動(dòng)初始化
p1m2=p1m2|0x02;
//p1m2.1=`1`,p1m1.1=`0`(默 認)
canadr=btr0;
//btr0和btr1編程為125kbit/s@12mhz
candat=0x45;
canadr=btr1;
//tseg1=12,tseg2=3,sjw=2
candat=0x2b;
//sample=1->sample point~81%
canadr=acr10;
//將地址設置到驗收代碼寄存器0(bank1)
candat=0x40; // 驗收濾波代碼
candat=0xe0; //驗收濾波代碼
canadr=amr10;
//將地址設置到驗收屏蔽寄存器 0(bank1)
candat=0x00; //bank1:驗收屏蔽0
candat=0x0f; //bank1:驗收屏蔽1無(wú)關(guān)
candat=0xff; //bank1:驗收屏蔽2無(wú)關(guān)
candat=0xff; //bank1:驗收屏蔽3無(wú)關(guān)
canadr=acfmod;
//將地址設置到acf模式寄存器
candat=0x55;
//單驗收濾波器使用11位id(sff)
canadr=acfprio;
//將地址設置到acf優(yōu)先級寄存器
candat=0xff;
//所有濾波器都為高優(yōu)先級
canadr=acfen;
//將地址設置到acf使能寄存器
candat=0x01;
//使能bank1的驗收濾波器
canmod=0x00;
//選擇操作模式,退出 can控制器復位模式
}
評論