| 摘要:VIIC是主方式下的虛擬I2C總線軟件包,用于80C51系列單片機(jī)的單主系統(tǒng)中。只需兩根普通I/O口線就可隨時擴(kuò)展I2C總線外圍器件。將VIIC1.0裝入程序存儲器中,對其中的符號單元賦值后,使用三條通用操作命令就可實(shí)現(xiàn)任何I2C總線外圍器件的應(yīng)用程序設(shè)計。本文以VIIC為例,介紹應(yīng)用軟件形式的廣義平臺設(shè)計方法,給出VIIC1.0程序文本。按照這一思路,也可移植到其他系列的嵌入式系統(tǒng)中。 關(guān)鍵詞:平臺模式虛擬I2C總線VIIC應(yīng)用程序設(shè)計 一、 I2C總線及其虛擬應(yīng)用 1. I2C總線應(yīng)用呼喚平臺模式 目前,單片機(jī)應(yīng)用系統(tǒng)的外圍擴(kuò)展已從并行方式為主過渡到以串行方式為主的時代。許多新型外圍器件都帶有串行擴(kuò)展接口。通常的串行擴(kuò)展接口和串行擴(kuò)展總線有UART的移位寄存器方式、MOTOROLA公司的SPI、NS公司的Microwire、Dallas公司的1\ Wire和Philips公司的I2C總線等。其中,I2C總線提供了較完善的總線協(xié)議、最簡單的串行連接方式,并提供了總線操作的狀態(tài)處理軟件包,因而得到了廣泛的應(yīng)用。但廠家并未提供完善的平臺模式應(yīng)用軟件包。因此,用戶在擴(kuò)展I2C總線外圍器件時,還要在了解I2C總線協(xié)議、操作原理的基礎(chǔ)上,采用直接方式進(jìn)行I2C總線外圍器件的應(yīng)用程序設(shè)計。迄今為止,許多期刊的文章中還是以這種方式來介紹I2C總線的擴(kuò)展應(yīng)用。由于I2C總線協(xié)議的復(fù)雜性和操作管理的特殊性,從I2C總線結(jié)構(gòu)原理到I2C總線應(yīng)用的直接設(shè)計方式難度較大,使I2C總線推廣應(yīng)用較慢。因此,迫切呼喚推出I2C總線的應(yīng)用軟件平臺,使人們不必了解I2C總線就能設(shè)計I2C總線應(yīng)用程序。 2. 廣泛使用的主工作方式 I2C總線是1個十分完善的多主系統(tǒng)總線,總線上可以掛接多個MCU,因此有4種工作方式,即主發(fā)送、主接收、從發(fā)送、從接收。但實(shí)際的單片機(jī)應(yīng)用系統(tǒng)絕大多數(shù)都是單個MCU系統(tǒng),只用到I2C總線的主方式,即主發(fā)送與主接收。 3. 虛擬I2C總線的廣泛需求 目前,有許多外圍器件帶有I2C總線接口,然而,帶有I2C總線接口的MCU只有少數(shù)廠家的個別型號,致使I2C總線難以推廣。因此,人們便使用MCU通用的I/O口來虛擬I2C總線接口。早期東芝公司在彩電中就在自己的MCU中虛擬I2C總線接口,實(shí)現(xiàn)I2C總線外圍器件擴(kuò)展的虛擬應(yīng)用。 采用虛擬I2C總線后,任何1個廠家的單片機(jī)都可以無障礙地使用I2C總線外圍器件。同樣,虛擬I2C總線的應(yīng)用也呼喚平臺模式。 二、 VIIC1.0軟件包設(shè)計 VIIC1.0是物化形式為軟件包文檔的廣義平臺,適合在80C51單片機(jī)系列單主系統(tǒng)中應(yīng)用。 按照廣義平臺設(shè)計內(nèi)容,VIIC有最佳包容性設(shè)計、后歸一化設(shè)計、前歸一化設(shè)計、物化設(shè)計和應(yīng)用界面設(shè)計。 1. 最佳包容性設(shè)計 最佳包容性設(shè)計是廣義平臺適用范圍的最佳選擇性設(shè)計。完整的I2C總線有4種操作方式,并且有指定的端口,有地址寄存器(S1ADR)來設(shè)定MCU的地址。在VIIC的包容性設(shè)計中規(guī)定為主方式下的通用I/O口虛擬。規(guī)定為主方式后,避免了多主方式下極大難度的總線沖突仲裁處理程序設(shè)計,又保證了能滿足絕大多數(shù)I2C總線擴(kuò)展應(yīng)用。采用通用I/O口的虛擬,使用戶可隨意規(guī)定虛擬I2C總線端口,擴(kuò)大了虛擬I2C總線應(yīng)用的靈活性。 2. 后歸一化設(shè)計 后歸一化設(shè)計是確定應(yīng)用范圍的相關(guān)設(shè)計。VIIC的后歸一化設(shè)計有: (1) 應(yīng)用范圍指定為帶I2C總線的外圍器件擴(kuò)展; (2) 所有I2C總線外圍器件的操作方式歸一化為外圍器件N個字節(jié)的讀寫操作; (3) 總線節(jié)點(diǎn)通信方式歸一化為SLAW/SLAR節(jié)點(diǎn)尋址后的點(diǎn)對點(diǎn)的讀寫操作。 3. 前歸一化設(shè)計 前歸一化設(shè)計是從I2C總線協(xié)議原理、操作方式、時序規(guī)則出發(fā),實(shí)現(xiàn)后歸一要求的設(shè)計。VIIC的前歸一化設(shè)計有: (1) 時序的指令模擬即模擬I2C總線操作時序。I2C總線操作的典型時序信號有起始位(STAR)、停止位(STOP)、發(fā)送應(yīng)答位(MACK)、發(fā)送非應(yīng)答位(MNACK)。 (2) 數(shù)據(jù)傳送操作虛擬即模擬I2C數(shù)據(jù)傳送過程。例如,應(yīng)答位檢查(CACK)、發(fā)送1個字節(jié)數(shù)據(jù)(WRBYT)、接收1個字節(jié)數(shù)據(jù)(RDBYT)。 (3) 外圍器件讀寫操作虛擬。要求虛擬1個I2C總線讀寫操作過程(RDNBYT、WRNBYT)。 4. VIIC1.0的結(jié)構(gòu)設(shè)計 (1) VIIC1.0的組成。 根據(jù)歸一化設(shè)計,主方式下虛擬I2C總線由下列9個子程序組成: · 時序模擬子程序STAR,STOP,MACK,MNACK; · 操作模擬子程序CACK,WRBYT,RDBYT; · 數(shù)據(jù)讀寫子程序RDNBYT,WRNBYT。 由于篇幅所限,本文中省略了VIIC1.0軟件包中這9個子程序的虛擬設(shè)計方法。需要詳細(xì)了解的讀者可參看文尾參考資料2中7.3節(jié)“I2C總線的串行擴(kuò)展技術(shù)”的有關(guān)部分。 (2) 軟件包的出口界面 軟件包VIIC實(shí)現(xiàn)非介入性操作,出口界面是軟件包應(yīng)用時惟一的觸及面。VIIC1.0中的出口界面為數(shù)據(jù)讀寫子程序 RDNBYT/WRNBYT。 (3) 軟件包的符號單元 VIIC中的符號標(biāo)記有發(fā)送數(shù)據(jù)緩沖區(qū)MTD、接收數(shù)據(jù)緩沖區(qū)MRD、傳送字節(jié)數(shù)存放單元NUMBYT以及尋址字節(jié)SLAW/SLAR存放單元SLA。這些符號單元都采用了標(biāo)準(zhǔn)I2C總線狀態(tài)處理軟件包中規(guī)定的字符標(biāo)記。 5. 應(yīng)用界面設(shè)計 VIIC1.0軟件包規(guī)定了讀寫子程序RDNBYT/WRNBYT的惟一出口界面,因此RDNBYT/WRNBYT的調(diào)用操作命令,以及滿足調(diào)用操作的初始化操作的三條命令為VIIC的應(yīng)用界面,即: MOV SLA,#SLAR/SLAW ;總線上節(jié)點(diǎn)尋址并確定傳送方向 MOV NUMBYT,#N ;確定傳送字節(jié)數(shù)N LCALL RDNBYT/WRNBYT ;讀/寫操作調(diào)用 三、 VIIC1.0軟件包清單 VIIC1.0軟件包清單如下。 ①STAR:SETB VSDA;啟動I2C總線 SETB VSCL NOP NOP CLR VSDA NOP NOP CLR VSCL RET ②STOP: CLR VSDA ;停止I2C總線數(shù)據(jù)傳送 SETB VSCL NOP NOP SETB VSDA NOP NOP CLR VSDA CLR VSCL RET ③MACK: CLR VSDA ;發(fā)送應(yīng)答位 SETB VSCL NOP NOP CLR VSCL SETB VSDA RET ④MNACK: SETB VSDA ;發(fā)送非應(yīng)答位 SETB VSCL NOP NOP CLR VSCL |