圖像采集和處理是DSP應用的一個重要領域,本文結合作者開發的基于DSP的圖像采集、處理系統、以CMOS圖像采集芯片OV7620為例,介紹DSP芯片通過I2C模塊對I2C設備進行配置的過程。
I2C總線最早是由Philips公司提出的串行通信接口規范,標準I2C總線只使用兩條線通信,能將多個具有I2C接口的設備連接,進行可靠的通信,連接到同一總線的I2C器件數量,只受總線最大電容400pF的限制,而且最高通信速率可以達到3.4Mb/s,由于I2C接口簡單,使用方便,被很多芯片采用,成為一種廣泛應用的接口[1]。
DSP即數字信號處理器,是一種廣泛應用的嵌入式處理器,主要應用是實時快速地實現各種數字信號處理算法,目前,國際主要的DSP供應商是TI公司,其TMS32系列產品占據了DSP市場近一半的份額,為了用戶能方便快捷的進行系統的開發與集成,TI公司在一些型號的DSP中集成了I2C通信模塊,本文以TMS320C6713為例,使用TI公司DSP開發工具CCS2.2提供的CSL(Chip Support Lib,片級支持庫)配置I2C模塊。
圖像采集和處理是DSP應用的一個重要領域,本文結合作者開發的基于DSP的圖像采集、處理系統、以CMOS圖像采集芯片OV7620為例,介紹DSP芯片通過I2C模塊對I2C設備進行配置的過程。
1 TI公司帶I2C接口的DSP
在嵌入式系統開發過程中,如果處理器沒有I2C接口而系統中又存在I2C器件時,通用的辦法是利用處理器的兩根引腳分別模擬SDA和SCL信號,并利用程序模擬接口,這種方法的通用性好,靈活可靠,但是移植性差,不同型號的處理器需要不同的程序,盡管在網上能夠下載到這類程序的源代碼,但是進行程序移植仍會浪費開發人員大量的時間,而且使得程序變得龐大,不易維護。
為了用戶能方便快捷地進行系統的開發與集成,TI公司在一些型號的DSP中集成了I2C通信模塊,例如TMS320C6713、TMS320C6416、TMS320C5509等。
TMS320C6713是一款高性能浮點DSP,內部集成2個I2C接口:I2C0和I2C1。其中,I2C1的引腳與McBSP1(Multichannel Buffered Serial Port 1,多通道緩存串口1)的引腳復用,默認情況下是激活McBSP1,使用I2C1必須將寄存器DEVCFG的最低位置1[2,3]。I2C模塊的結構如圖1所示。
I2CDXR是發送緩存,I2CXSR是發送移位寄存器。總線上的數據送到I2CDXR之后,被拷貝到I2CXSR,按位移出,送到SDA,先移出的位是最高位。I2CDRR與I2CRSR分別是接收緩存和接收移位寄存器,負責將SDA上的數據移入,合并成字節后,放到接收緩存,并將數據發送到數據總線。
I2C模塊有5種狀態會產生中斷信號,作為中斷源提供給DSP中斷系統調用,這5種狀態是:準確好發送數據、準確好接收數據、可以訪問寄存器、主機沒收到響應信號和總線仲裁失敗。因為I2C模塊能夠提供中斷信號,可以編制中斷處理函數,中斷中相應I2C事件,確保了響應的實時性。
I2C模擬還可以與EDMA(Enhanced Direct Memory Access,增強型內存直接訪問)配合工作。當數據由I2CDXR拷貝到I2CXSR或由I2CRSR拷貝到I2CDRR時,都會觸發EDMA操作,EDMA會發送下一個數據或讀取收到的數據。由于EDMA操作不占用DSP處理時間,可以大大提高DSP的運算速度,避免流水線被不停的打斷,因此,如果使用I2C模塊與外設進行數據量比較大的數據交換,比如,將緩存中的大量數據保存到I2C接口的Flash中,可以使用EDMA操作,如果交換的數據量比較小,而對實時性比較高,比如,接收I2C接口傳感器的采集數據,可以采用DSP中斷的方式;如果交換的數據量比較小,對實時性要求又不高,比如,對I2C設備進行設置,則可以使用DSP查詢狀態位的方式,本文例程使用I2C模塊配置OV7620,采用查詢方式。
為使I2C模塊正常工作,必須為其提供驅動時鐘,在TMS320C6713中,I2C模塊的時鐘由系統時鐘經分頻得到,如圖2所示。
外接時鐘為DSP系統的外接時鐘,本文設計的系統時鐘頻率為25MHz,PLL為系統的鎖相環,先對外接時鐘分頻,再倍頻,鎖定時鐘,然后按照不同的分頻系數,分出三個時鐘,供TMS320C6713使用,其中的一個輸出到I2C模塊,I2C模塊先根據IPSC的值將時鐘預分頻,分頻后的時鐘供I2C模塊使用,同時,根據ICCL與ICCH的值再將時鐘分頻,分別控制SCL的低電平與高電平周期,SCL的頻率為
在配置I2C模塊之前,必須配置PLL。TMS320C6713的I2C不支持高速模式,一般配置在標準模式下。
2 使用CSL配置I2C模塊
對I2C模塊的控制是通過操作控制/狀態寄存器組實現的。TMS320C6713的寄存器映射到地址空間,可以通過地址操作直接讀寫寄存器,如
#define I2CMDR0 0x01B40024
*(volatile unsigned int *)I2CMDR0&=~0x20;
通過地址操作讀寫寄存器,語法簡單,編譯效率高,但是程序的可讀性和可移植性差,不易維護。
在DSP應用系統中,一般會涉及到大量DSP器件,特別是片上外設的編程處理工作,在開發初期消耗了開發人員較多精力,TI公司在開發環境CCS中,提供了CSL。多數CSL模塊都由對應的函數、宏、類和表示符號組成。可以簡單方便地完成對DSP器件片上外設配置和控制的編程工作,從而簡化DSP片上外設開發工作,縮短了開發周期,具有標準化控制和管理片上外設的能力,減少了DSP硬件特殊性對用戶程序代碼的影響,方便用戶在不同器件間進行代碼移植。但是使用CSL進行外設控制對用戶代碼執行效率可能會造成一些影響[4]。
本文先給出配置PLL的程序,再給出配置I2C模塊的程序,因為DSP電路板的時鐘并不相同,PLL配置程序并不具有很強的可移植性,同時為了提高編譯、執行效率,配置PLL的程序采用直接地址操作的方式,寄存器的宏定義請參考相應的DSP數據手冊。本例程參考了文獻[2],DSP系統的外接時鐘為25MHz。
注意,DSP系統的內部時鐘大部分來自于PLL,PLL設置程序必須放在全部的最前面,只有對PLL配置成功,系統才能正常的工作。
提供時鐘之后,可以對I2C模塊進行配置。本文將I2C0配制成主機發送模式,工作頻率為100kHz,非連續發送,7位地址。因為本程序是為配置OV7620作準備,所以并沒有使用EDMA與DSP中斷。
注意,I2C0在發送一個字節后,自動緩緩到主機接收模式,為了驗證I2C0工作是否正常,可以將I2C0與I2C1環接。
本例程只提供配置I2C模塊所需的頭文件。
3 使用I2C模塊配置OV7620
Omnivision公司推出的CMOS彩色圖像傳感器OV7620,最大分辨率為664×492,不但能工作在逐行掃描方式下,也能工作在隔行掃描方式下,可通過I2C總線配置片內寄存器,以使其輸出RGB原始數據,本文設計的系統加電復位后,先由TMS320C6713產生I2C總線信號來對OV7620工作寄存器進行初始化,然后OV7620即可開始按要求輸出圖像信號,包括行同步信號HREF、場同步信號VSYNC、像素時鐘信號PCLK和數字圖像信號[5]。DSP通過EDMA接收原始圖像數據,進行中值濾波,去掉噪聲,再進行有關的圖象處理,下面給出OV7620的初始化程序。
OV7620initial()函數的4個參數分別為CMOS感光區域起始點和區域范圍,I2C_SetOV7620()為自定義的函數,通過I2C發送兩個數據,第一個數據為OV7620的寄存器地址,第二個數據為寄存器內容。
4 結論
本文介紹了I2C總線規范,以TMS320C6713為例,說明TI一些DSP中I2C模塊的結果及各部分的功能,介紹了如何配置DSP的PLL及系統時鐘;給出了開發環境CCS中CSL的使用方法,對TMS320C6713的I2C模塊進行了配置,對OV7620進行了配置。
編輯:jq
-
傳感器
+關注
關注
2551文章
51163瀏覽量
754133 -
dsp
+關注
關注
553文章
8011瀏覽量
349126 -
信號處理器
+關注
關注
1文章
254瀏覽量
25287 -
I2C總線
+關注
關注
8文章
391瀏覽量
60974
發布評論請先 登錄
相關推薦
評論