用單片機(jī)實(shí)現(xiàn)基于I2C串行總線的音頻處理系統(tǒng)
目前,消費(fèi)類(lèi)電子產(chǎn)品(如彩電、音響等)的功能多樣化使得控制電路變得更為復(fù)雜。而Philips公司推出的集成電路芯片間總線I2CBUS(Inter ICBUS)是目前眾多總線中最簡(jiǎn)潔有效、使用也為廣泛的一種總線格式。I2C總線通常是以硬件來(lái)實(shí)現(xiàn)的,這就要求所選器件必須具有I2C總線接口,但目前廣泛使用的MCS-51系列單片機(jī)并不具備I2C總線的專(zhuān)用硬件部分。本文結(jié)合筆者采用單片機(jī)8031實(shí)現(xiàn)對(duì)具有I2C總線接口的立體聲音頻處理芯片TDA7313的控制,介紹了I2C總線以及基于I2C串行總線的單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)方法和程序。
1 I2C總線簡(jiǎn)介
1.1 I2C總線的組成
I2C串行總線是用雙向數(shù)據(jù)線(SDA)和串行時(shí)鐘線(SCL)兩根信號(hào)線,在連接到該總線的器件之間傳送信息。它屬于多主控器總線,圖1所示是其組成框圖??偩€上的每個(gè)器件均可設(shè)置一個(gè)唯一地址,然后根據(jù)所設(shè)的功能進(jìn)行信息的發(fā)送或接收。除了作為發(fā)送器和接收器以外,在執(zhí)行數(shù)據(jù)傳輸時(shí),總線的器件還可以設(shè)定為主控器和被控器。通常由主控器啟動(dòng)總線上的數(shù)據(jù)傳輸,并產(chǎn)生數(shù)據(jù)傳輸所需的時(shí)鐘信號(hào)。而被其尋址的其它器件均為被控器,這意味著總線上可連接多個(gè)有控制總線的器件。
圖1 I2C總線的組成
I2C總線上的數(shù)據(jù)傳輸率為100 kbit/s,快速方式下可達(dá)400 kbit/s。連接到總線上的器件數(shù)僅受400 pF的總線電容的限制。同時(shí),為了避免總線信號(hào)的混亂,要求連接到總線上的各器件輸出端必須是集電極開(kāi)路或漏極開(kāi)路,以便產(chǎn)生“線與”功能。I2C總線上的SDA和SCL線都是雙向傳輸線,它們可通過(guò)一個(gè)電阻連接到正電源端,當(dāng)總線處于空閑狀態(tài)時(shí),兩條線均為高電平。
1.2 I2C總線數(shù)據(jù)傳輸格式
在I2C總線傳輸過(guò)程中,僅當(dāng)總線空閑(SCL線和SDA線均為高電平)時(shí),數(shù)據(jù)傳送才能開(kāi)始,此時(shí)總線上的任何器件均可以控制總線。圖2所示是兩種特定的開(kāi)始和停止條件,其中當(dāng)SCL線為高電平且SDA線由高變低時(shí)為開(kāi)始條件(S);而當(dāng)SCL線為高電平且SDA線由低變高時(shí)為結(jié)束條件(P)。在數(shù)據(jù)傳送過(guò)程中,當(dāng)SCL線為高電平時(shí),SDA線必須是穩(wěn)定的高或低電平才能使數(shù)據(jù)有效。只有當(dāng)SCL線上的時(shí)鐘信號(hào)為低時(shí),SDA線的狀態(tài)才能改變,且每位數(shù)據(jù)需一個(gè)時(shí)鐘脈沖。所有數(shù)據(jù)都是按字節(jié)發(fā)送的,每次發(fā)送的字節(jié)數(shù)不限。每發(fā)送完一個(gè)字節(jié),主控器釋放SDA線(呈高電平)并由受控器下拉SDA線,從而使SDA線為穩(wěn)定的低電平來(lái)作為有效應(yīng)答位以表示傳輸成功,此時(shí)主控器必須產(chǎn)生一個(gè)與此位相應(yīng)的額外時(shí)鐘脈沖。
圖2 I2C串行總線數(shù)據(jù)操作時(shí)序
圖3為I2C 總線數(shù)據(jù)傳輸格式。其中第一部分為數(shù)據(jù)傳輸起始信號(hào),即由此開(kāi)始進(jìn)行數(shù)據(jù)傳送;第二部分為受控器地址,用來(lái)選擇向哪個(gè)受控器傳送數(shù)據(jù);第三部分為讀/寫(xiě)控制位,用于指示受控器的工作方式,0表示寫(xiě),1表示讀;第四部分是被主控器選中的受控器向主控器回傳的確認(rèn)信號(hào);第五部分是所傳送的數(shù)據(jù),每傳送一個(gè)字節(jié)數(shù)據(jù),都要求有一個(gè)應(yīng)答位;第六部分是數(shù)據(jù)傳輸?shù)慕Y(jié)束信號(hào)。
圖3 數(shù)據(jù)傳輸格式
每個(gè)具有I2C總線接口的受控器件都有唯一固定的地址,當(dāng)主控器發(fā)送數(shù)據(jù)時(shí),I2C總線上掛接的受控器件都會(huì)將主控器發(fā)出的、位于起始信號(hào)后的8位地址信息與自己的地址進(jìn)行比較,如果兩者相同,則認(rèn)為該受控器件被選中,然后按照讀/寫(xiě)位規(guī)定的工作方式接收或發(fā)送數(shù)據(jù)。
2 I2C總線在單片機(jī)中的實(shí)現(xiàn)
本音頻處理系統(tǒng)中所使用的IC控制芯片為T(mén)DA7313,它是具有音量、高低音調(diào)的左右平衡及前后混頻調(diào)整的立體聲音頻數(shù)字處理器件,它的輸入通道可以選擇,并具有相應(yīng)的外部響度調(diào)整函數(shù)以及I2C串行總線接口,因此可廣泛應(yīng)用于汽車(chē)音響和高保真系統(tǒng)中。TDA7313與單片機(jī)8031的連線和基本的管腳定義如圖4所示。
圖4 單片機(jī)與TDA7313的接口電路
由于單片機(jī)8031不具有I2C 總線硬件接口,因此只能通過(guò)編寫(xiě)軟件產(chǎn)生串行時(shí)鐘信號(hào)。當(dāng)系統(tǒng)傳輸數(shù)據(jù)時(shí),先由單片機(jī)給出一個(gè)啟始信號(hào);接著送出器件TDA7313的7位地址及讀/寫(xiě)控制位并等待應(yīng)答信號(hào);當(dāng)收到應(yīng)答信號(hào)后,系統(tǒng)根據(jù)訪問(wèn)要求進(jìn)行相應(yīng)操作。在實(shí)際操作過(guò)程中,一般都是通過(guò)CPU向TDA7313輸入一連串的特定數(shù)字命令來(lái)實(shí)現(xiàn)對(duì)整個(gè)系統(tǒng)的音頻處理,所以對(duì)TDA7313的操作主要是寫(xiě)操作。