TI系列DSP的I2C模塊配置與應(yīng)用
I2C總線最早是由Philips公司提出的串行通信接口規(guī)范,標(biāo)準(zhǔn)I2C總線只使用兩條線通信,能將多個(gè)具有I2C接口的設(shè)備連接,進(jìn)行可靠的通信,連接到同一總線的I2C器件數(shù)量,只受總線最大電容400pF的限制,而且最高通信速率可以達(dá)到3.4Mb/s,由于I2C接口簡(jiǎn)單,使用方便,被很多芯片采用,成為一種廣泛應(yīng)用的接口[1]。
DSP即數(shù)字信號(hào)處理器,是一種廣泛應(yīng)用的嵌入式處理器,主要應(yīng)用是實(shí)時(shí)快速地實(shí)現(xiàn)各種數(shù)字信號(hào)處理算法,目前,國(guó)際主要的DSP供應(yīng)商是TI公司,其TMS32系列產(chǎn)品占據(jù)了DSP市場(chǎng)近一半的份額,為了用戶能方便快捷的進(jìn)行系統(tǒng)的開發(fā)與集成,TI公司在一些型號(hào)的DSP中集成了I2C通信模塊,本文以TMS320C6713為例,使用TI公司DSP開發(fā)工具CCS2.2提供的CSL(Chip Support Lib,片級(jí)支持庫(kù))配置I2C模塊。
圖像采集和處理是DSP應(yīng)用的一個(gè)重要領(lǐng)域,本文結(jié)合作者開發(fā)的基于DSP的圖像采集、處理系統(tǒng)、以CMOS圖像采集芯片OV7620為例,介紹DSP芯片通過(guò)I2C模塊對(duì)I2C設(shè)備進(jìn)行配置的過(guò)程。
1 TI公司帶I2C接口的DSP
在嵌入式系統(tǒng)開發(fā)過(guò)程中,如果處理器沒有I2C接口而系統(tǒng)中又存在I2C器件時(shí),通用的辦法是利用處理器的兩根引腳分別模擬SDA和SCL信號(hào),并利用程序模擬接口,這種方法的通用性好,靈活可靠,但是移植性差,不同型號(hào)的處理器需要不同的程序,盡管在網(wǎng)上能夠下載到這類程序的源代碼,但是進(jìn)行程序移植仍會(huì)浪費(fèi)開發(fā)人員大量的時(shí)間,而且使得程序變得龐大,不易維護(hù)。
為了用戶能方便快捷地進(jìn)行系統(tǒng)的開發(fā)與集成,TI公司在一些型號(hào)的DSP中集成了I2C通信模塊,例如TMS320C6713、TMS320C6416、TMS320C5509等。
TMS320C6713是一款高性能浮點(diǎn)DSP,內(nèi)部集成2個(gè)I2C接口:I2C0和I2C1。其中,I2C1的引腳與McBSP1(Multichannel Buffered Serial Port 1,多通道緩存串口1)的引腳復(fù)用,默認(rèn)情況下是激活McBSP1,使用I2C1必須將寄存器DEVCFG的最低位置1[2,3]。I2C模塊的結(jié)構(gòu)如圖1所示。
I2CDXR是發(fā)送緩存,I2CXSR是發(fā)送移位寄存器??偩€上的數(shù)據(jù)送到I2CDXR之后,被拷貝到I2CXSR,按位移出,送到SDA,先移出的位是最高位。I2CDRR與I2CRSR分別是接收緩存和接收移位寄存器,負(fù)責(zé)將SDA上的數(shù)據(jù)移入,合并成字節(jié)后,放到接收緩存,并將數(shù)據(jù)發(fā)送到數(shù)據(jù)總線。
I2C模塊有5種狀態(tài)會(huì)產(chǎn)生中斷信號(hào),作為中斷源提供給DSP中斷系統(tǒng)調(diào)用,這5種狀態(tài)是:準(zhǔn)確好發(fā)送數(shù)據(jù)、準(zhǔn)確好接收數(shù)據(jù)、可以訪問寄存器、主機(jī)沒收到響應(yīng)信號(hào)和總線仲裁失敗。因?yàn)镮2C模塊能夠提供中斷信號(hào),可以編制中斷處理函數(shù),中斷中相應(yīng)I2C事件,確保了響應(yīng)的實(shí)時(shí)性。
I2C模擬還可以與EDMA(Enhanced Direct Memory Access,增強(qiáng)型內(nèi)存直接訪問)配合工作。當(dāng)數(shù)據(jù)由I2CDXR拷貝到I2CXSR或由I2CRSR拷貝到I2CDRR時(shí),都會(huì)觸發(fā)EDMA操作,EDMA會(huì)發(fā)送下一個(gè)數(shù)據(jù)或讀取收到的數(shù)據(jù)。由于EDMA操作不占用DSP處理時(shí)間,可以大大提高DSP的運(yùn)算速度,避免流水線被不停的打斷,因此,如果使用I2C模塊與外設(shè)進(jìn)行數(shù)據(jù)量比較大的數(shù)據(jù)交換,比如,將緩存中的大量數(shù)據(jù)保存到I2C接口的Flash中,可以使用EDMA操作,如果交換的數(shù)據(jù)量比較小,而對(duì)實(shí)時(shí)性比較高,比如,接收I2C接口傳感器的采集數(shù)據(jù),可以采用DSP中斷的方式;如果交換的數(shù)據(jù)量比較小,對(duì)實(shí)時(shí)性要求又不高,比如,對(duì)I2C設(shè)備進(jìn)行設(shè)置,則可以使用DSP查詢狀態(tài)位的方式,本文例程使用I2C模塊配置OV7620,采用查詢方式。
為使I2C模塊正常工作,必須為其提供驅(qū)動(dòng)時(shí)鐘,在TMS320C6713中,I2C模塊的時(shí)鐘由系統(tǒng)時(shí)鐘經(jīng)分頻得到,如圖2所示。
外接時(shí)鐘為DSP系統(tǒng)的外接時(shí)鐘,本文設(shè)計(jì)的系統(tǒng)時(shí)鐘頻率為25MHz,PLL為系統(tǒng)的鎖相環(huán),先對(duì)外接時(shí)鐘分頻,再倍頻,鎖定時(shí)鐘,然后按照不同的分頻系數(shù),分出三個(gè)時(shí)鐘,供TMS320C6713使用,其中的一個(gè)輸出到I2C模塊,I2C模塊先根據(jù)IPSC的值將時(shí)鐘預(yù)分頻,分頻后的時(shí)鐘供I2C模塊使用,同時(shí),根據(jù)ICCL與ICCH的值再將時(shí)鐘分頻,分別控制SCL的低電平與高電平周期,SCL的頻率為
在配置I2C模塊之前,必須配置PLL。TMS320C6713的I2C不支持高速模式,一般配置在標(biāo)準(zhǔn)模式下。
2 使用CSL配置I2C模塊
對(duì)I2C模塊的控制是通過(guò)操作控制/狀態(tài)寄存器組實(shí)現(xiàn)的。TMS320C6713的寄存器映射到地址空間,可以通過(guò)地址操作直接讀寫寄存器,如
#define I2CMDR0 0x01B40024
*(volatile unsigned int *)I2CMDR0&=~0x20;
通過(guò)地址操作讀寫寄存器,語(yǔ)法簡(jiǎn)單,編譯效率高,但是程序的可讀性和可移植性差,不易維護(hù)。
在DSP應(yīng)用系統(tǒng)中,一般會(huì)涉及到大量DSP器件,特別是片上外設(shè)的編程處理工作,在開發(fā)初期消耗了開發(fā)人員較多精力,TI公司在開發(fā)環(huán)境CCS中,提供了CSL。多數(shù)CSL模塊都由對(duì)應(yīng)的函數(shù)、宏、類和表示符號(hào)組成??梢院?jiǎn)單方便地完成對(duì)DSP器件片上外設(shè)配置和控制的編程工作,從而簡(jiǎn)化DSP片上外設(shè)開發(fā)工作,縮短了開發(fā)周期,具有標(biāo)準(zhǔn)化控制和管理片上外設(shè)的能力,減少了DSP硬件特殊性對(duì)用戶程序代碼的影響,方便用戶在不同器件間進(jìn)行代碼移植。但是使用CSL進(jìn)行外設(shè)控制對(duì)用戶代碼執(zhí)行效率可能會(huì)造成一些影響[4]。
本文先給出配置PLL的程序,再給出配置I2C模塊的程序,因?yàn)镈SP電路板的時(shí)鐘并不相同,PLL配置程序并不具有很強(qiáng)的可移植性,同時(shí)為了提高編譯、執(zhí)行效率,配置PLL的程序采用直接地址操作的方式,寄存器的宏定義請(qǐng)參考相應(yīng)的DSP數(shù)據(jù)手冊(cè)。本例程參考了文獻(xiàn)[2],DSP系統(tǒng)的外接時(shí)鐘為25MHz。
注意,DSP系統(tǒng)的內(nèi)部時(shí)鐘大部分來(lái)自于PLL,PLL設(shè)置程序必須放在全部的最前面,只有對(duì)PLL配置成功,系統(tǒng)才能正常的工作。
提供時(shí)鐘之后,可以對(duì)I2C模塊進(jìn)行配置。本文將I2C0配制成主機(jī)發(fā)送模式,工作頻率為100kHz,非連續(xù)發(fā)送,7位地址。因?yàn)楸境绦蚴菫榕渲肙V7620作準(zhǔn)備,所以并沒有使用EDMA與DSP中斷。
注意,I2C0在發(fā)送一個(gè)字節(jié)后,自動(dòng)緩緩到主機(jī)接收模式,為了驗(yàn)證I2C0工作是否正常,可以將I2C0與I2C1環(huán)接。
本例程只提供配置I2C模塊所需的頭文件。
3 使用I2C模塊配置OV7620
Omnivision公司推出的CMOS彩色圖像傳感器OV7620,最大分辨率為664
評(píng)論