周永剛
(中國電子科技集團公司第四十一研究所,山東青島266555)
AVR ATmega 系列單片機片內(nèi)集成兩線串行接口TWI 模塊。采用TWI 協(xié)議,設計者可通過兩根雙向總線,即一根時鐘線SCL 和一根數(shù)據(jù)線SDA,最多連接128 個從設備[1]。實現(xiàn)總線連接時唯一需要增加的外部設備是兩條總線上的上拉電阻。所有與總線相連的設備都需要定義各自的設備地址。 實際上,TWI 接口時序與常見的I2C 總線是兼容的,因此,只需要控制相關寄存器,就能夠實現(xiàn)通過TWI 傳輸數(shù)據(jù),TWI 通信工作于主從模式,把系統(tǒng)任務進行了合理的分工,節(jié)省了硬件資源,減少了工作量,從而使編程簡單,開發(fā)更容易。
TWI 總線是簡單同時強大而靈活的通信接口, 具有最高達400kHz 的數(shù)據(jù)傳輸率。 TWI 總線協(xié)議可僅用兩根線將不同的設備互連到一起。 支持主機和從機操作、多主機仲裁。 AVR 單片機的TWI 模塊由以下幾個子模塊構成[2]:
當CPU 對應的端口設置為SCL 和SDA 引腳時,可以設定相應I/O 口內(nèi)部上拉電阻有效,這樣可以省略外部的上拉電阻。
TWI 工作于主機模式時, 時鐘信號SCL 的周期由比特率發(fā)生器控制。 具體由TWI 狀態(tài)寄存器TWSR 的預分頻系數(shù)以及比特率寄存器TWBR 設定,SCL 的頻率計算公式如公式(1):
其中,TWBR 為TWI 波特率寄存器的值;TWPS 為TWI 狀態(tài)寄存器預分頻位的值。 在主機模式下,TWBR 的值應大于10,否則可能會產(chǎn)生不正確的輸出。
該單元包括數(shù)據(jù)與地址移位寄存器TWDR, 起始/終止信號(START/STOP)控制器和總線仲裁判定硬件電路。
地址匹配單元將檢測從總線上接收到的地址是否與TWAR 寄存器中的7 位地址相匹配。 一旦地址匹配成功,控制單元將按照得到的通知作出相應的響應。
控制單元監(jiān)聽總線TWI 總線,并根據(jù)TWI 控制寄存器TWCR 的設置作出相應的響應。 當TWI 總線上產(chǎn)生需要應用程序干預處理的事件時,TWI 中斷標志位TWINT 置位,時鐘線SCL 被拉低,暫停TWI總線上的數(shù)據(jù)傳輸。
TWBR:TWI 比特率寄存器。
TWCR:TWI 控制寄存器。
TWSR:TWI 狀態(tài)寄存器。
TWDR:TWI 數(shù)據(jù)寄存器。
TWAR:TWI(從機)地址寄存器。
AVR 的TWI 接口是面向字節(jié)和基于中斷的。所有的總線事件,如接收到一個字節(jié)或發(fā)送一個START 信號等, 都會產(chǎn)生一個TWI 中斷。由于TWI 接口是基于中斷的,因此TWI 接口在字節(jié)發(fā)送和接受過程中,不需要應用程序的干預[3]。TWI 狀態(tài)寄存器TWSR 包含了表面當前TWI 總線狀態(tài)的值。 應用程序可以讀取TWSR 的狀態(tài)碼,判別此時的狀態(tài)是否正確,并通過設置控制寄存器,決定在下一個TWI 總線周期TWI 接口的工作[4]。
TWI 可以工作于4 種不同的模式,即主機發(fā)送模式(MT)、主機接收模式(MR)、從機發(fā)送模式(ST)、從機接收模式(SR)。當TWI 上出現(xiàn)多個主機時,就會發(fā)生多主機仲裁。除了依靠自身硬件的檢測外,還可以通過軟件讀取TWSR 狀態(tài)寄存器判斷自己在總線中的精確狀態(tài),以便為下一步動作提供更精確的診斷依據(jù)。
主機模式下,主機可向從機發(fā)送或接收數(shù)據(jù)。為了進入主機模式,必須先發(fā)送START 信號; 緊接著的地址包格式?jīng)Q定是進入主機發(fā)送模式或者主機接收模式。 如果發(fā)送SLA+W,則進入主機發(fā)送模式;如果發(fā)送SLA+R,則進入主機接收模式。
從機模式下,從機只需要監(jiān)聽TWI 總線,如果接收到SLA+R 并回復ACK 后,則進入從機發(fā)送模式;如果接收到SLA+W 并回復ACK后,則進入從機接收模式。
圖1 系統(tǒng)硬件結構
在交流電源分配柜中,采集板負責采集交流電壓、交流電流、交流頻率和30 熔絲告警信息,采集數(shù)據(jù)后發(fā)送到顯示板;顯示板具備告警門限設置、數(shù)據(jù)顯示以及數(shù)據(jù)上傳服務器等功能。 采集板和顯示板的CPU 均采用ATmega8 芯片?;赥WI 接口的硬件電路實現(xiàn)非常方便,只需要將兩片ATmega8 芯片的SCL 和SDA 引腳通過上拉電阻與+5V電源相連接即可。 硬件電路如圖1 所示。
采集板CPU 采集數(shù)據(jù)后, 通過TWI 總線發(fā)送數(shù)據(jù)到顯示板CPU,顯示板CPU 接收數(shù)據(jù)后,給采集板CPU 回復相應的數(shù)據(jù)。 顯示板CPU 在用戶重新設定告警門限后, 需要設定值發(fā)送給采集板進行設定。 因此在該系統(tǒng)中采集板CPU 工作于主機發(fā)送和主機接收模式,顯示板CPU 工作于從機接收和從機發(fā)送模式。
在主機模式[5]下,主機通過發(fā)送START 信號啟動總線,確認START信號發(fā)送后,發(fā)送從機地址和寫標志位等待從機響應,得到從機的響應后,發(fā)送數(shù)據(jù)到從機。同時在總線空閑時,主機每隔一段時間發(fā)送從機地址和讀標志位進入主機接收模式,接收從機的告警門限值,接收完后設定主機的門限值。主機在初始化后,需要執(zhí)行包括主機讀、主機寫程序,并把讀取到數(shù)據(jù)從緩沖區(qū)中轉存。 為了保證TWI 總線的穩(wěn)定運行,只有主機發(fā)送模式(MT)和主機接收模式(MR)程序是不夠的,還必須有一定的系統(tǒng)總線狀態(tài)錯誤處理程序[6],以防止TWI 總線在受到外界干擾時出現(xiàn)故障??紤]本文所設計的系統(tǒng)是主機與從機不會實時發(fā)生變化的總線網(wǎng)絡系統(tǒng), 所以對于主機而言還要有容錯處理程序。中斷流程圖如圖2 所示。
圖2 主機模式中斷流程圖
在從機模式[7]下,由于從機也需要處理不通的事件,需要采用中斷的方式處理接收和發(fā)送數(shù)據(jù), 這樣可以有效的提高程序的運行程序。通過檢測TWSR 狀態(tài)碼,進行不同的處理。 從機在被尋址后,回復主機,判斷是否進入從機接收模式或從機發(fā)送模式。 進入從機接收模式時,在RAM 中開辟一塊數(shù)據(jù)緩沖區(qū),用于接收數(shù)據(jù);進入從機發(fā)送模式時,將需要發(fā)送的數(shù)據(jù)裝入發(fā)送緩沖區(qū),中斷程序在自動響應主機進行數(shù)據(jù)發(fā)送。 中斷流程圖如圖3 所示。
圖3 從機模式中斷流程圖
利用TWI 接口實現(xiàn)AVR 單片機主從機通信,簡化了硬件和軟件設計, 縮短了系統(tǒng)開發(fā)周期。 在TWI 通信程序中增加了容錯處理程序,使總線運行穩(wěn)定可靠,提高了系統(tǒng)的抗干擾能力。在通信中采用了TWI 中斷,合理安排事件處理時間,有效提高了程序的運行效率。
[1]ATmega8 Datasheet[Z]. ATMEL Corporation.
[2]馬潮,詹衛(wèi)前,耿德根,等.ATmega8 原理及應用手冊[M].北京:清華大學出版社,2002.
[3]郭祥軍.AVR 單片機的TWI 總線的原理及應用[J].單片機與嵌入式系統(tǒng)應用,2006(8):37-39.
[4]楚天鵬,鄭華耀.TWI 接口多機通信的實現(xiàn)[J].裝備制造技術,2008(6):96-98.
[5]AVR315: Using the TWI module as I2C master[OL]. www.atmel.com.
[6]汪海波,王卓然,耿德根,等.深入淺出AVR 單片機[M].北京:中國電力出版社,2008.
[7]AVR311: Using the TWI module as I2C slave[OL]. www.atmel.com.