引言
CAN總線應(yīng)用中,總線節(jié)點(diǎn)是CAN總線的基本組成部分。CAN總線節(jié)點(diǎn)有兩種典型設(shè)計(jì)方法,第一種方法采用MCU結(jié)合獨(dú)立CAN控制器組成總線節(jié)點(diǎn):第二種方法采用獨(dú)立的MCU,這時(shí)MCU需要內(nèi)部集成CAN控制器。由于第二種設(shè)計(jì)方法所用的器件少,電路關(guān)系簡(jiǎn)單,已得到廣泛應(yīng)用。本文重點(diǎn)分析AVR系列單片機(jī)內(nèi)部集成的CAN控制器及其應(yīng)用方法。
AT90CAN集成CAN總線控制器分析
AVR內(nèi)部集成CAN控制器的芯片主要包括AT90CAN32/64/128三種單片機(jī),它們之間的主要區(qū)別是存儲(chǔ)空間不同。
AT90CAN32/64/128內(nèi)部集成的CAN總線控制器由CAN通道和郵箱組成,其工作參數(shù)通過(guò)寄存器設(shè)置,工作過(guò)程也通過(guò)寄存器監(jiān)控。CAN控制器基本結(jié)構(gòu)如圖1所示。
CAN總線控制器組成
CANh通道
CAN通道是CAN控制器用于完成發(fā)送和接收的部分。使用CAN控制器時(shí),需要對(duì)CAN通道工作模式和位定時(shí)進(jìn)行設(shè)置。
(1)CAN通道工作模式
CAN通道有使能、待命以及只聽三種工作模式。不同模式下通道、時(shí)鐘以及寄存器的工作模式不同,詳細(xì)內(nèi)容見(jiàn)參考文獻(xiàn)[3]。
(2)位定時(shí)
CAN通道位定時(shí)的概念和基本規(guī)定與CAN總線協(xié)議一致。AVR~~列單片機(jī)中,CAN總線控制器時(shí)間份額(TQ即為波特率分頻器輸出時(shí)鐘信號(hào)的周期。CAN總線位周期由同步段(SYNS)、傳播段(PRS)、相位緩沖段l(PHSl)、相位緩沖段2(PHS2)組成,每個(gè)時(shí)間段的長(zhǎng)度都是時(shí)間份額(T∞的整數(shù)倍。通過(guò)位定時(shí)設(shè)置可以確定各時(shí)間段的長(zhǎng)度,同時(shí)還可以設(shè)置重同步跳轉(zhuǎn)寬度(SJw)以及信號(hào)采樣位置和采樣次數(shù)。設(shè)置時(shí),CAN總線位時(shí)間必須設(shè)置在8~25個(gè)時(shí)間份額之間。位定時(shí)設(shè)置完畢后即可計(jì)算總線波特率,計(jì)算方法見(jiàn)參考文獻(xiàn)。




郵箱及報(bào)文對(duì)象(MOb)
AT90CAN32/64/128單片機(jī)集成的CAN控制器通過(guò)郵箱存儲(chǔ)報(bào)文,并以MOb的形式管理。郵箱包含ls個(gè)獨(dú)立的MOb,每個(gè)MOb都可以設(shè)置為接收或發(fā)送模式。發(fā)送時(shí),編號(hào)小的MOb優(yōu)先級(jí)高。接收時(shí),只有當(dāng)CAN控制器接收到報(bào)文的標(biāo)識(shí)符與某個(gè)MOb預(yù)先設(shè)置的標(biāo)識(shí)符吻合時(shí),CAN控制器才會(huì)將接收到的報(bào)文存儲(chǔ)在該MOb中,并可以通過(guò)中斷的方式通知單片機(jī)。CAN控制器還可自動(dòng)對(duì)遠(yuǎn)程幀作出應(yīng)答,從而減輕CPU的負(fù)擔(dān)。
(1)MOb工作模式
MOb包括禁止、發(fā)送、接收、自動(dòng)應(yīng)答、幀緩沖器接收等6種不同的工作模式。芯片復(fù)位后,MOb并沒(méi)有默認(rèn)的工作狀態(tài)。因此,在使能MOb之前必須對(duì)MOb進(jìn)行配置,配置內(nèi)容及相應(yīng)的工作模式如表l所示。
(2)接收濾波器
AT90CAN32/64/128單片機(jī)集成的cAN總線控制器接收?qǐng)?bào)文時(shí),首先要完成接收濾波。接收濾波時(shí),需要將接收?qǐng)?bào)文的ID+RTR+RBn+IDE域與接收模式MOb的IDT+TRITAG+TBnTAG+IDE域進(jìn)行比較,比較過(guò)程中要考慮掩碼(AVR單片機(jī)掩碼為“1”時(shí)無(wú)效,掩碼為“0”時(shí)有效),結(jié)果一致后確認(rèn)匹配,相應(yīng)MOb的內(nèi)容被更新。接收濾波器原理圖如圖2所示。
(3)MOb頁(yè)
郵箱中的MOb以頁(yè)的形式存儲(chǔ)和管理。當(dāng)需要選擇郵箱中某個(gè)MOb進(jìn)行操作時(shí),首先要用CANPAGE寄存器完成對(duì)MOb的選擇,然后才能進(jìn)行相應(yīng)操作。
(4)CAN數(shù)據(jù)緩存區(qū)
為了保護(hù)MOb寄存器的配置,將寄存器存儲(chǔ)在MOb內(nèi)部,而數(shù)據(jù)則存儲(chǔ)在CAN數(shù)據(jù)緩存區(qū)中。緩存區(qū)可看作一個(gè)隊(duì)列,每一個(gè)MOb都對(duì)應(yīng)一個(gè)緩存區(qū),數(shù)據(jù)緩存區(qū)可通過(guò)CAN消息寄存器訪問(wèn)。訪問(wèn)某一個(gè)MOb對(duì)應(yīng)的數(shù)據(jù)緩存區(qū)時(shí)需要使用數(shù)據(jù)索引,該索引是指向緩存區(qū)中某個(gè)數(shù)據(jù)字節(jié)的地址指針。CAN報(bào)文數(shù)據(jù)的第一個(gè)字節(jié)存儲(chǔ)在數(shù)據(jù)緩存區(qū)索引為O的地址。
CAN中斷
CAN控制器包括普通中斷和特殊中斷。普通中斷包括接收完成中斷、發(fā)送完成中斷、錯(cuò)誤中斷f位錯(cuò)誤、填充錯(cuò)誤、CRC校驗(yàn)錯(cuò)誤、形式錯(cuò)誤、應(yīng)答錯(cuò)誤)、幀緩沖區(qū)滿中斷以及總線關(guān)閉設(shè)置中斷等。特殊中斷主要指CAN定時(shí)器超時(shí)中斷。普通中斷由ENIT位使能,特殊中斷由ENORVT位使能。CAN總線控制器各種中斷的相互關(guān)系如圖3所示。
當(dāng)中斷發(fā)生時(shí),相應(yīng)MOb的CANSTMOB寄存器中斷標(biāo)志位或通用CANGIT寄存器的中斷標(biāo)志位置位。如果CANIE寄存器中的ENRX/ENTX/ENERR職位,CANSITn寄存器中相應(yīng)的MOb位置位,以指出發(fā)生中斷的MOb。
為了響應(yīng)Mob中斷,CANsTMOB寄存器中的相應(yīng)位(RXOK、TXOK)必須通過(guò)軟件復(fù)位。具體的復(fù)位操作過(guò)程為“讀一修改一寫入”。
為了響應(yīng)普通中斷,CANGIT寄存器中的相應(yīng)位(BXOK、BOFFIT)必須通過(guò)軟件復(fù)位。該操作需要通過(guò)向這些標(biāo)志位寫入邏輯“1”完成。OVRTIM(cAN定時(shí)器溢出中斷)標(biāo)志位復(fù)位的方式有所不同。當(dāng)執(zhí)行CAN定時(shí)器溢出中斷程序以及CANGIT寄存器中其它中斷標(biāo)志位置位時(shí),OVRTIM標(biāo)志位自動(dòng)復(fù)位。
傳輸過(guò)程中,當(dāng)CAN控制器檢測(cè)到形式錯(cuò)誤時(shí),將同時(shí)觸發(fā)位錯(cuò)誤,從而產(chǎn)生2種錯(cuò)誤中斷。當(dāng)出現(xiàn)MOb錯(cuò)誤時(shí),僅在CANSTMOB寄存器中置位相應(yīng)的標(biāo)志位,CANGIT寄存器不會(huì)發(fā)生變化。
控制寄存器
AVR系列單片機(jī)通過(guò)控制寄存器設(shè)置并控制CAN總線控制器的工作。控制寄存器包括通用寄存器和MOb寄存器。CAN總線控制器寄存器結(jié)構(gòu)如圖4所示。
(1)通用寄存器
通用寄存器包括控制寄存器和狀態(tài)寄存器兩類。
CAN通用控制寄存器(CANGCON)和通用狀態(tài)寄存器(CANGSTA)用于設(shè)置及查詢CAN控制器的工作模式;CAN通用中斷寄存器(CANGIT)和通用中斷使能寄存器(CANGIE)用于使能中斷并查詢中斷標(biāo)志:CAN使能MOb寄存器(CANEN2和CANENl)用于使能MOb。CAN使能MOb中斷寄存器(CANIE2和CANIEl)用于使能MOb中斷;CAN位定時(shí)寄存器(CANBTl、CANBT2和CANBT3)用于設(shè)置位定時(shí)相關(guān)的內(nèi)容,包括時(shí)鐘分頻系數(shù)、同步跳轉(zhuǎn)寬度、總線位周期各段長(zhǎng)度和采樣點(diǎn):CAN定時(shí)器控制寄存器(cANTCON)用于設(shè)置CAN定時(shí)器分頻系數(shù)。CAN定時(shí)器寄存器(cANTIML和CANTIMH)用于讀取CAN定時(shí)器計(jì)數(shù)值:TTC定時(shí)器寄存器(CANTTCL和CANTTCH)用于讀取TTC定時(shí)器計(jì)數(shù)值:CAN發(fā)送錯(cuò)誤計(jì)數(shù)器寄存器(cANTEC)用于記錄CAN發(fā)送錯(cuò)誤次數(shù)。CAN接收錯(cuò)誤計(jì)數(shù)器寄存器(cANREC)用于記錄CAN接收錯(cuò)誤次數(shù):CAN最高優(yōu)先級(jí)MOb寄存器(cANHPMOB)用于記錄具有最高優(yōu)先級(jí)MOb的頁(yè)碼:CAN的MOb頁(yè)寄存器(CANPAGE)用于設(shè)置當(dāng)前有效MOb的頁(yè)碼以及CAN數(shù)據(jù)緩沖區(qū)索引增加模式,同時(shí)可設(shè)置或讀取CAN數(shù)據(jù)緩沖區(qū)索引值。
(2)MOb寄存器
MOb狀態(tài)寄存器(CANSTMOB)用于顯示MOb的狀態(tài),主要包括發(fā)送、接收完成信息以及錯(cuò)誤信息:MOb控制與數(shù)據(jù)長(zhǎng)度控制寄存器(CANCDMOB)用于設(shè)置當(dāng)前有效MOb的工作模式、標(biāo)識(shí)符擴(kuò)展標(biāo)志以及數(shù)據(jù)長(zhǎng)度:標(biāo)識(shí)符寄存器(CANIDTl、CANIDT2、CANIDT3和CANIDT4)用于設(shè)置MOb標(biāo)識(shí)符;標(biāo)識(shí)符屏蔽寄存器(CAN!DMl、CANIDM2、CANIDM3和CANIDM4)用于設(shè)置MOb標(biāo)識(shí)符屏蔽碼:時(shí)間戳寄存器(cANSTML和CANSTMH)用于讀取MOb時(shí)間戳:數(shù)據(jù)寄存器(cANMSG)用于讀寫當(dāng)前有效MOb的數(shù)據(jù)。
控制器工作原理與使用方法
CAN總線控制器根據(jù)通用寄存器的設(shè)置確定其基本工作參數(shù)(位定時(shí)、中斷設(shè)置、CAN定時(shí)器設(shè)置等)。工作時(shí),CAN通道掃描郵箱中的MOb,完成發(fā)送和接收。發(fā)送時(shí),CAN通道尋找設(shè)置為發(fā)送模式并具有最高優(yōu)先級(jí)的MOb,找到后通過(guò)CAN通道向總線發(fā)送該MOb。接收時(shí),CAN通道掃描設(shè)置為接收模式的MOb,通過(guò)接收濾波發(fā)現(xiàn)匹配的MOb后,根據(jù)接收?qǐng)?bào)文刷新匹配的MOb。
根據(jù)上述CAN總線控制器工作原理,首先利用通用控制寄存器完成對(duì)CAN控制器的基本配置,主要包括位定時(shí)、中斷、CAN定時(shí)器等的設(shè)置:然后利用MOb頁(yè)寄存器和MOb寄存器初始化MOb,主要包括標(biāo)識(shí)符、標(biāo)識(shí)符屏蔽碼等;之后使能CAN通道,CAN通道將掃描郵箱內(nèi)的MOb,并根據(jù)MOb設(shè)置進(jìn)行相應(yīng)操作,操作結(jié)果可通過(guò)查詢或中斷的方式監(jiān)控。
集成CAN總線控制器應(yīng)用
應(yīng)用CAN控制器可完成發(fā)送、接收、自動(dòng)應(yīng)答、錯(cuò)誤處理等任務(wù)。下面重點(diǎn)討論發(fā)送和接收的應(yīng)用方法。
發(fā)送數(shù)據(jù)幀或遠(yuǎn)程幀
(1)發(fā)送前初始化。需要初始化的域包括標(biāo)識(shí)符(IDT)、標(biāo)識(shí)符擴(kuò)展位(IDE)、遠(yuǎn)程發(fā)送請(qǐng)求位(TRTrAG)、數(shù)據(jù)長(zhǎng)度代碼(DLC)、保留位(RBnTAG)、消息需要發(fā)送的數(shù)據(jù)(MSG)。
(2)配置MOb(CONMOB)。配置完成后,MOb發(fā)送數(shù)據(jù)幀或遠(yuǎn)程幀準(zhǔn)備就緒。
(3)CAN通道掃描配置為“發(fā)送”狀態(tài)的所有MOb、找到優(yōu)先級(jí)最高的1個(gè)后,將其發(fā)送出去。
(4)發(fā)送結(jié)束后,TXOK標(biāo)志位置位(可產(chǎn)生相應(yīng)中斷)。
(5)在重新始化之前,MOb所有參數(shù)和數(shù)據(jù)均可訪問(wèn)。
3.2接收數(shù)據(jù)幀或遠(yuǎn)程幀
(1)接收前初始化。需要初始化的域包括標(biāo)識(shí)符(IDT)、標(biāo)識(shí)符掩碼(IDMSK)、標(biāo)識(shí)符擴(kuò)展位(IDE)、標(biāo)識(shí)符擴(kuò)展位掩碼(IDEMSK)、遠(yuǎn)程發(fā)送請(qǐng)求位(TRTTAG)、遠(yuǎn)程發(fā)送請(qǐng)求位掩碼(TRTTAGMSK)、數(shù)據(jù)長(zhǎng)度代碼(DLC)、保留位(RBnTAG)。
(2)配置MOb(CONMOB)。配置完成后,MOb接收數(shù)據(jù)幀或遠(yuǎn)程幀準(zhǔn)備就緒。
(3)當(dāng)總線收到幀標(biāo)識(shí)符時(shí),CAN通道掃描所有設(shè)置為“接收”模式的MOb,找出匹配且優(yōu)先級(jí)最高的1個(gè),該MOb的IDT、IDE、DLC由接收到的數(shù)據(jù)幀更新。
(s)接收完成后,接收消息的數(shù)據(jù)被存儲(chǔ)在相應(yīng)MOb的數(shù)據(jù)緩沖區(qū)中,RXOK標(biāo)志位置位(可產(chǎn)生相應(yīng)中斷)。
(6)在重新初始化之前,MOb所有參數(shù)和數(shù)據(jù)均可訪問(wèn)。
結(jié)語(yǔ)
(1)使用AT90CAN32/64/128系列單片機(jī)時(shí),可不使用外部獨(dú)立CAN控制器完成CAN總線節(jié)點(diǎn)的設(shè)計(jì)。
(2)AT90CAN32/64/128系列單片機(jī)集成的CAN總線控制器主要由CAN通道、郵箱和控制寄存器組成。CAN控制器的工作主要通過(guò)寄存器控制完成。