基于DSP虛擬I2C總線軟件包的設(shè)計(jì)及應(yīng)用實(shí)例
X1203中的時(shí)鐘/控制寄存器(CCR)分5部分:2個(gè)8字節(jié)報(bào)警寄存器(Alarm0、Alarm1),1個(gè)1字節(jié)控制寄存器,1個(gè)8字節(jié)實(shí)時(shí)時(shí)鐘寄存器和1個(gè)1字節(jié)狀態(tài)寄存器。通過(guò)報(bào)警寄存器可設(shè)置報(bào)警發(fā)生的時(shí)間,控制寄存器可使能或禁止報(bào)警中斷信號(hào)的輸出,實(shí)時(shí)時(shí)鐘寄存器以BCD碼存儲(chǔ)了秒、分、時(shí)、日、星期、月和年,狀態(tài)寄存器中保存了用于報(bào)警狀態(tài)標(biāo)志位及讀寫(xiě)使能狀態(tài)位。其中狀態(tài)寄存器設(shè)置決定著數(shù)據(jù)是否能成功地寫(xiě)入。該寄存器如表1所列。
BAT標(biāo)識(shí)器件當(dāng)前用VBack還是用VCC工作。AL1、AL0標(biāo)識(shí)Alarm0、Alarm1是否實(shí)時(shí)時(shí)鐘匹配。RTCF表示實(shí)時(shí)時(shí)鐘是否失效,在總電源失效后該位置1。RWEL為寄存器寫(xiě)使能鎖存,為0表示禁止,在任何寫(xiě)時(shí)鐘/控制寄存器之前必須將該位置1。WEL為寫(xiě)使能鎖存,低表示禁止,通過(guò)該位寫(xiě)1、其它位寫(xiě)0,可使該位置位;通過(guò)該位寫(xiě)0、其它位寫(xiě)0,可使該位清0。只有按規(guī)定順序設(shè)置RWEL和WEL,才能成功寫(xiě)入CCR。
目前,很多DSP芯片尚不直接支持I2C的接口,F(xiàn)206也不例外,因而這里采用2根通用I/O口線模擬I2C接口。F206與X1203的接口采用如圖2所示的接口方案。
圖2中在X1、X2端接入32.768 kHz的石英晶振,將時(shí)鐘源配置為片內(nèi)振蕩器。在VCC和VBACK之間通過(guò)二極管和電阻相連,并與地間加入1個(gè)0.47 F的大電容。這樣,在電源出現(xiàn)故障或系統(tǒng)電源關(guān)閉時(shí),仍可靠VBACK端的大電容供電維持時(shí)鐘芯片的正常工作。它與F206間接口采用3根口線,這里采用IO2模擬通信用的時(shí)鐘信號(hào),IO3作為數(shù)據(jù)輸入、輸出口線。端可根據(jù)用戶需要而定,若需要時(shí)鐘芯片產(chǎn)生中斷,可將該端接到F206的中斷口線上。注意其中的SDA端和端為漏極開(kāi)路,必須加上拉電阻,否則不能正常通信。
3.2 X1203的讀寫(xiě)操作
這里僅給出F206對(duì)X1203進(jìn)行讀寫(xiě)的基本流程,如圖3、圖4所示,分別為對(duì)時(shí)鐘芯片的讀、寫(xiě)過(guò)程。其中進(jìn)行寄存器寫(xiě)時(shí),須注意SR寄存器中WEL和RWEL的設(shè)置是否正確,即首先設(shè)置WEL有效,而后將WEL、RWEL都置1,否則數(shù)據(jù)將不能正確寫(xiě)入。在寫(xiě)結(jié)束后,應(yīng)將WEL、RWEL置為無(wú)效,以免產(chǎn)生誤操作。
此外還須指出,在系統(tǒng)首次上電后(VBack和VCC都失效后),至少有一字節(jié)寫(xiě)入RTC寄存器時(shí),系統(tǒng)才開(kāi)始工作。在實(shí)際使用中,應(yīng)首先判斷SR中的RTCF位是否為1,若是,表明系統(tǒng)為首次使用或VBack和VCC都已失效,須對(duì)X1203至少進(jìn)行一次寫(xiě)入操作,使其正常計(jì)數(shù)。
結(jié)束語(yǔ)
I2C總線應(yīng)用已日益廣泛,而其協(xié)議的復(fù)雜性和操作的特殊性又限制了推廣速度。本文介紹的一種基于DSP的虛擬I2C總線軟件包,簡(jiǎn)化了TMS320C2XX與I2C器件間接口程序設(shè)計(jì),用戶無(wú)需了解I2C總線協(xié)議的細(xì)節(jié),僅需通過(guò)唯一的接口界面wrnbyte/ rdnbyte即可實(shí)現(xiàn)相應(yīng)的接口。本文還給出了一個(gè)TMS320F206與時(shí)鐘芯片X1203間的接口實(shí)例,介紹了軟件包的使用方法,希望能供讀者參考。
評(píng)論