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




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