基于AT90CAN128單片機的某車型CAN總線系統(tǒng)設(shè)計
聯(lián)合制動單元提供給駕駛員計算機終端的消息內(nèi)容包括:聯(lián)合制動單元狀態(tài)信息(7字節(jié),分別為液力制動扭矩、機械制動扭矩、合成扭矩、速度以及緊急回路和正常油壓的數(shù)值,以及正常制動回路油位和緊急制動回路油位的報警狀態(tài))、聯(lián)合制動單元報警信息(2字節(jié),分別為正常制動回路油位報警和緊急制動回路油位的報警)、聯(lián)合制動單元制動返回消息(2字節(jié),分別為收到的前驅(qū)或后驅(qū)制動命令的命令數(shù)據(jù)和命令值)等。
2.3 軟件設(shè)計(CAN總線通訊部分)
2.3.1 初始化部分
初始化前將CAN通用控制寄存器的最高位置1(復位模式)。完成后,回到操作模式。
下面給出了CAN控制器的初始化程序:
void CAN_INIT ( void )
{
CANGCON = 0x80 ; /*進入復位模式并且復位MOb*/
while ( ENFG == 1 ) ; /*測試CANGSTA中的ENFG位是否為0*/
CANGIE = 0xB0 ; /*使能所有中斷及接收、發(fā)送中斷*/
CANIE2 = 0xFF ; /*MOb 0~7中斷使能*/
CANIE1 = 0x00 ; /*MOb 8~14中斷禁止*/
CANBT1 = 0x02 ; /*設(shè)置波特率為500kbps*/
CANBT2 = 0x20 ;
CANBT3 = 0x01 ;
CANTCON = 0x8F ; /*設(shè)置定時器預定標*/
/*以“聯(lián)合制動單元狀態(tài)查詢消息”為例*/
CANPAGE = TX_PAGE ; /*指定此消息的MOb頁(寄存器中的高4位)*/
CANCDMOB = 0x17 ; /*禁止狀態(tài),IDE位為1表示擴展幀,數(shù)據(jù)長度代碼為7*/
CANIDT1 = 0x84 ; /*標識符設(shè)置*/
CANIDT2 = 0xB1 ;
CANIDT3 = 0x18 ;
CANIDT4 = 0xF2 ;
CANIDM1 = 0xFF ; /*標識符屏蔽設(shè)置*/
CANIDM2 = 0xFF ;
CANIDM3 = 0xFF ;
CANIDM4 = 0xFF ;
CANGCON = 0x02 ; /*進入操作模式*/
While ( ENFG == 0 ) ; /*測試CANGSTA中的ENFG位是否為1*/
}
2.3.2 消息的發(fā)送部分
消息的發(fā)送均采用中斷方式實現(xiàn)。首先通過設(shè)置CANPAGE寄存器來指定被發(fā)送的頁數(shù),將數(shù)據(jù)裝載到CANMSG寄存器中,然后由CANCDMOB寄存器來控制發(fā)送動作,將消息發(fā)送出去,同時將觸發(fā)CANSTMOB中的TXOK中斷。
評論