<del id="dhfrq"></del>

    1. <tr id="dhfrq"></tr>
      成人午夜激情在线观看,国产精品一线天粉嫩av,99精品国产综合久久久久五月天 ,一卡2卡三卡4卡免费网站,国产高清在线男人的天堂,五月天国产成人AV免费观看,67194熟妇在线观看线路,成人无码潮喷在线观看
      現在位置:范文先生網>理工論文>電子通信論文>基于CPLD的系統中I2C總線的設計

      基于CPLD的系統中I2C總線的設計

      時間:2023-02-20 23:47:21 電子通信論文 我要投稿
      • 相關推薦

      基于CPLD的系統中I2C總線的設計

      摘要:在介紹I2C總線協議的基礎上,討論了基于CPLD的系統中I2C總線的設計技術,并結合工程實例設計了I2C總線IP核,給出了部分源代碼和仿真結果。

          關鍵詞:I2C總線 IP核 CPLD

      I2C總線是PHILIPS公司推出的新一代串行總線,其應用日漸廣泛?1~2?。目前許多單片機都帶有I2C總線接口,能方便地實現I2C總線設計;對沒有I2C總線的微控制器(MCU),可以采用兩條I/O口線進行模擬。在以單片機為MCU的系統中很容易實現I2C總線的模擬擴展,有現成的通用軟件包可以使用?2~3?。

      對有些基于CPLD的系統,要與帶有I2C總線接口的外圍器件連接,實現起來相對復雜一些。為實現系統中的I2C總線接口,可以另外引入單片機,也可以采用PCF8584或者PCA9564器件(PHILIPS公司推出的專用I2C總線擴展器)進行擴展,但這樣會增加系統成本,使系統冗余復雜。像ALTERA、XILINX等一些大公司有專用的基于CPLD器件的I2C總線IP核,但這些IP核的通用性不強,需要的外圍控制信號較多,占用系統很大的資源,因此直接采用這種IP核不可取。

      鑒于此,依照I2C總線協議的時序要求,在基于CPLD的系統中開發了自己的I2C總線IP核。對于一些帶有I2C總線接口的外圍器件較少、對I2C總線功能要求較簡單的CPLD系統,自主開發IP核顯得既經濟又方便。
      (范文先生網www.ycxgx.cn收集整理)
      1 I2C總線的協議

      I2C總線僅僅依靠兩根連線就實現了完善的全雙工同步數據傳送:一根為串行數據線(SDA),一根為串行時鐘線(SCL)。該總線協議有嚴格的時序要求?偩工作時,由時鐘控制線SCL傳送時鐘脈沖,由串行數據線SDA傳送數據?偩傳送的每幀數據均為一個字節(8 bit),但啟動I2C總線后,傳送的字節個數沒有限制,只要求每傳送一個字節后,對方回應一個應答位(Acknowledge Bit)。發送數據時首先發送數據的最高位(MSB)。

      I2C總線協議規定,啟動總線后第一個字節的高7位是從器件的尋址地址,第8位為方向位(“0”表示主器件對從器件的寫操作;“1”表示主器件對從器件的讀操作),其余的字節為操作的數據?偩每次傳送開始時有起始信號,結束時有停止信號。在總線傳送完一個或幾個字節后,可以使SCL線的電平變低,從而使傳送暫停。

      圖1列出了I2C總線上典型信號的時序,圖2表示I2C總線上一次完整的數據傳送過程。

      依據I2C總線的傳輸協議,總線工作時的具體時序如下:

      起始信號(S):在時鐘SCL為高電平期間,數據線SDA出現由高電平向低電平的變化,用于啟動I2C總線,準備開始傳送數據;

      停止信號(P):在時鐘SCL為高電平期間,數據線SDA出現由低電平向高電平的變化,用于停止I2C總線上的數據傳送;

      應答信號(A):I2C總線的第9個脈沖對應應答位,若SDA線上顯示低電平則為總線“應答”(A),若SDA線上顯示高電平則為“非應答”(/A);

      數據位傳送:I2C總線起始信號或應答信號之后的第1~8個時鐘脈沖對應一個字節的8位數據傳送。在脈沖高電平期間,數據串行傳送;在脈沖低電平期間,數據準備,允許總線上數據電平變化。

      2 應用實例

      2.1 實例模型介紹

      現舉某應用實例,要求對顯示器的視頻信號進行采集、處理和再顯示,整個系統采用CPLD器件進行控制。信號采集采用A/D公司的專用視頻采集芯片AD9883,該芯片在使用前需要依據實際的功能指標進行初始化。初始化過程依靠AD9883的SDA和SCL兩引腳進行。在系統中用CPLD器件,ALTERA公司的EPM3256A,實現初始化:按照I2C總線協議向AD9883的19個內部寄存器(01H~13H)寫入19組固定的8位數據;第14H寄存器為只讀型同步檢測寄存器,僅用于檢測幾個關鍵的數據設置。

      可見該I2C總線模型如下:單主操作,只實現簡單的寫和讀操作(亦可只有寫操作,只是硬件調試的時候會麻煩些),寫地址連續,沒有競爭和仲裁,是很簡單的I2C總線系統。由此設計了如圖3所示的IP核。其中,RESET為復位信號,CLK為系統時鐘。

      為了軟件仿真方便,把雙向數據線SDA用分離的兩條線模擬:SDA為數據輸出,SDAACK為SDA的應答信號。軟件仿真成功后,只要把SDA設置為雙向,稍微修改一下程序就可以向CPLD器件下載,進行實際應用。

      對AD

      9883內部地址連續的寄存器進行初始化,I2C總線上傳輸的時序信號依次為:開始信號(S);從器件地址和寫操作位(SLAW);內部寄存器基地址(Base Address);寫入基地址的數據(Data0);寫入下一地址(Base Address+1)的數據(Data1);寫入地址(Base Address+2)的數據(Data2);……;寫入地址(Base Address+18)的數據(Data18);停止信號(P)。

      針對AD9883,如果電路中的A0引腳?55#?接電源,則SLAW=“10011001”;Base Address=“00000001”,Data0~Data18是依據實際需要寫入的初始化數據。

      2.2 IP核程序的編寫

      整個程序用VHDL語言編制,SCL輸出時鐘的設計是基于CLK輸入時鐘的64分頻的。程序由三個狀態組成:開始(START)、轉換(SHIFT)和應答(ACK)。狀態定義如下:

      type states is ?start?shift?ack??

      signal my_states ?states?

      下面給出部分進程的源代碼以供參考。

      2.2.1開始信號的產生

      PROCESS?clk?

      if clk’event and clk=‘1’ then

      TWCR<=DATAIN?

      SCL<=‘1’?

      else

      TWCR<=?others=>‘0’??

      end if?

      if TWCR=“10000000” then ——比較寄存器TWCR的開始

      值設置(由用戶決定)

      STRB<=‘1’?

      end if?

      if STRB=‘1’ then ——開始條件

      INT<=INT+“000001”? ——INT為時鐘脈沖計數

      if INT<=“011000” then ——產生SDA的下降沿

      SDA<=‘1’?

      else

      SDA<=‘0’?

      end if?

      if INT>=“011110” then ——STRB歸0,保證只產生

      一次開始信號

      STRB <=‘0’?

      INT<=“000000”?

      end if?

      end if?

      等所有的初始化數據傳輸完畢后即產生停止信號,過程與上面相類似,在此省略。

      2.2.2 數據轉換過程

      數據轉換過程采用移位傳輸,傳輸8位之后即進入應答狀態。

      when shift=>

      if cnt=“010000” then ——cnt為clk脈沖計數,由

      實際的時鐘頻率決定cnt的值

      COUNT<=COUNT+“0001”? ——COUNT為數據移位個

      數計數?MSR為移位寄存器

      MSR<=MSR?6 downto 0?&txtag?

      txtag<=‘0’?

      if COUNT=“1000” then

      my_states<=ack?

      TACK<=‘1’? ——TACK為應答標志位

      else

      SDA<=MSR?7??

      my_states<=shift?

      TACK<=‘0’?

      end if?

      end if?

      圖4 數據傳輸仿真波形 圖5 SDA非應答時的仿真波形

          2.2.3 數據輸入

      一般情況下,I2C總線傳輸的數據要由外部ROM或其它專門的數據存儲區來存儲,但在數據相對固定且數據量不是很大的情況下,可以將初始化的數據寫在程序中,這樣可減少頻繁的數據交換,簡化操作。AD9883的初始化數據就屬于這種情況,可以通過檢測應答信號來改變輸入的值。程序如下:

      PROCESS?clk? ——數據輸入

      if clk’event and clk=‘1’ then

      CASE ackint IS ——ackint為應答計數,每應答

      一次,輸入改變一次

      when “00000”=> DATAIN<=“10000000”?

      when “00001”=> DATAIN<=“01010010”?

      when “00010”=> DATAIN<=“11010000”?

      ……

      when “10010”=> DATAIN<=“00000000”?

      when “10011”=> DATAIN<=“00000000”?

      when others=> DATAIN<=“ZZZZZZZZ”?

      END CASE?

      end if?

      2.3 仿真結果

      把自主開發的IP核置于MAX+PLUS II 10.0開發環境下,選用EPM3128ATC100-10器件,經過編譯、調試與仿真,證明該程序符合設計要求。圖4是模擬產生開始信號并傳輸兩組二進制數據“10011001”和“10101010”(十進制表示為153和170)的仿真波形。圖5是傳輸數據“10011001”后沒有應答時的仿真結果,此時總線處于暫停狀態。

      仿真完成后,通過編程電纜將pof文件下載到實際電路的EPM3128ATC100-10中,然后對AD9883進行初始化,結果工作正常,這進一步驗證了采用該自主開發的IP核完全可滿足I2C總線的時序要求,能實現I2C總線的功能。


      【基于CPLD的系統中I2C總線的設計】相關文章:

      基于DSP與CPLD的I2C總線接口的設計與實現08-06

      基于VHDL的I2C總線控制核設計08-06

      CPLD在DSP系統中的應用設計08-06

      基于FPGA的總線型LVDS通信系統設計08-06

      基于USB2.0總線的高速數據采集系統設計08-06

      基于CAN總線的EV電控系統通信的設計與開發08-06

      基于IIS總線的嵌入式音頻系統設計08-06

      基于CEBus總線的鐵路燈塔控制系統的設計08-06

      基于USB總線的實時數據采集系統設計與實現08-06

      主站蜘蛛池模板: 少妇人妻偷人精品系列| 国产精品一区二区在线欢| 男女爽爽无遮挡午夜视频| 一本大道久久东京热AV| 免费国产一级 片内射老| 不卡一区二区三区在线视频| 强奷乱码欧妇女中文字幕熟女| 国产玩具酱一区二区三区| 波多野结衣久久一区二区| 极品一区二区三区水蜜桃| 成人国产精品中文字幕| 性欧美乱熟妇xxxx白浆| 国产精品人成在线播放蜜臀| 久久久久香蕉国产线看观看伊| 中文字幕无码久久精品| аⅴ天堂中文在线网| 国产精品黄色片在线观看| 天堂亚洲免费视频| 在线精品自拍亚洲第一区| 精品人妻中文字幕在线| 在线日韩一区二区| 中文字幕久久六月色综合| 97se综合| 黄色不卡视频一区二区三区| 国产成人午夜福利院| 内射干少妇亚洲69XXX| 国产真实精品久久二三区| 最新中文乱码字字幕在线| 久久99久久99精品免观看| 加勒比无码人妻东京热| 中文字幕无码免费久久9一区9| 亚洲成a人片在线观看久| 黑森林福利视频导航| a级免费视频| 日本一区二区三区视频一| 成午夜福利人试看120秒| 国产熟女50岁一区二区| 国产性色的免费视频网站| 国产精品无码素人福利不卡| 91精品国产麻豆国产自产| 免费人成视频网站在线18|