<rt id="m4md3"></rt>
  • <bdo id="m4md3"><meter id="m4md3"></meter></bdo>
  • <label id="m4md3"></label>
      <center id="m4md3"><optgroup id="m4md3"></optgroup></center>
      產品分類

      當前位置: 首頁 > 工業電氣產品 > 端子與連接器 > 線路板連接器 > FFC連接器

      類型分類:
      科普知識
      數據分類:
      FFC連接器

      TI 平板顯示器 Link III 器件中斷功能的配置及應用

      發布日期:2022-04-28 點擊率:28

      作者:Fery Feng

      此文主要針對利用DS09UB933/34/62/64-Q1FPD-link器件搭建的流媒體后視鏡/全景泊車等應用中,由于鏈路設計、應用環境干擾、ESD等情況,導致概率性出現屏幕顯示閃屏或者滾動的現象。利用解串器中的診斷/中斷功能,再配合上有幀buffer視頻處理能力的SOC就可以有效地應對此類問題。

      TI在ADAS應用中的FPD-link器件均帶有豐富的診斷功能,包括奇偶校驗/反向通道CRC校驗/LOCK狀態/幀水平寬度檢測/幀垂直寬度檢測等,利用這些診斷功能我們可以十分便利的知道解串器接收到的數據是否有問題。同時,我們可以將以上的診斷結果映射到中斷管腳上,并將中斷腳連接到SOC,如果解串器接收的數據檢測出來有問題的話,可以通過中斷腳通知SOC去讀取相關的寄存器,從而知道具體是出現什么故障了。


      而對于接收端帶有幀buffer或者視頻處理能力的SOC的系統,在我們知道當前幀的數據有問題的話,可以通過清除幀buffer將這些有問題的視頻數據清除,重新接收下一幀畫面,并凍結當前的顯示畫面,那這些問題就不會在屏幕上顯示出來了。

      1. 中斷指示腳INTB pin

      964/962的中斷指示腳是Pin 6,它為開漏輸出腳,所以需要4.7Kohm上拉到VDDIO電平。當這個腳為低電平時,表明有中斷請求。


      Figure.1 962/964的中斷指示腳

      而934的中斷指示腳是Pin 25,其與GPIO_3復用,同樣也是開漏輸出腳,建議4.7Kohm上拉到VDDIO電平。

      Figure.2 934的中斷指示腳


      2. 962/964中斷功能的使能與配置

      2.1 964/962 INTB中斷指示腳的使能

      使用INTB中斷指示腳的輸出,需要先將INTERRUPT_CTL 0x23 bit_7的全局中斷使能打開,然后再打開0x23 bit5:0 的中斷源開關,中斷源來自于4個獨立的RX,以及兩個獨立的TX(962/964可以理解為FPD-link III接收器即RX,以及MIPI CSI發送器即TX的組合)的各種中斷。

      但是如果全局中斷沒有使能,符合條件的中斷還是會在相應的中斷狀態指示寄存器上置位的。例如,要在檢測到IS_RX0中斷的時候,INTB輸出中斷,需要使能IE_RX0以及INT_EN。如果只是使能了IE_RX0,但是沒有使能INT_EN的話,中斷來了只會在INTERRUPT_STS 0x24中斷狀態指示寄存器進行指示,而不會在INTB腳有指示。

      而當INTB中斷指示腳由于TX或者RX的某種故障狀態而拉低之后,需要通過讀取相應中斷源的中斷狀態指示寄存器,來清除中斷指示腳的中斷狀態。具體的中斷狀態寄存器會在稍后的篇幅中詳細介紹。

      Figure.3 964/962全局中斷控制寄存器

      Figure.4 964/962 0x24中斷狀態指示寄存器

      示例代碼:

      #0x30為964的7bit I2C地址

      #使能964的全局中斷,以及TX0_1/RX0_1_2_3中斷源

      Write( 0x30, 0x23, 0xBF)

      #使能964的全局中斷,以及RX0中斷源

      Write( 0x30, 0x23, 0x81)


      2.2 964/962 各個RX Port的獨立中斷源


      964/962的每一個RX Port都有多個獨立中斷源,而這些獨立中斷源都可以通過PORT_ICR_HI 0xD8和PORT_ICR_LO 0xD9寄存器進行使能。同時,在PORT_ISR_HI 0xDA和PORT_ISR_LO 0xDB中斷狀態指示寄存器,可以提供相應的只讀中斷狀態指示。


      而清除中斷指示腳,以及中斷狀態指示寄存器的中斷狀態,可以通過讀RX_PORT_STS1 0x4D和RX_PORT_STS2 0x4E,以及 CSI_RX_STS 0x7A中斷狀態指示寄存器進行清除。因為PORT_ISR_HI/LO的中斷狀態位是copy 0x4D/0x4E/0x7A中斷狀態寄存器的,


      所以只要清除了 0x4D/0x4E/0x7A這三個寄存器的中斷狀態指示,PORT_ISR_HI/LO的中斷狀態指示位也會相應的清除,同時0x24的相應中斷狀態也會清除。


      使能某一個RX Port的獨立中斷源,并使能INTB中斷指示腳,可以遵循以下步驟:


      a) 通過設置PORT_ICR_HI 0xD8和PORT_ICR_LO 0xD9,設定所需要的獨立中斷源


      b) 在INTERRUPT_CTL 0x23 中,將相應RX Port的中斷源使能打開


      c) 在INTERRUPT_CTL 0x23 中,將全局中斷使能打開

      清除某一個RX Port以及INTB腳的中斷狀態指示,可以遵循以下步驟:


      a) (可選)通過INTERRUPT_STS 0x24判斷,是哪個TX port或者某一個RX Port出現中斷


      b) (可選)通過PORT_ISR_HI 0xDA和PORT_ISR_LO 0xDB寄存器可以確定具體的中斷源


      c) 通過讀取RX_PORT_STS1 0x4D和RX_PORT_STS2 0x4E狀態寄存器CSI_RX_STS 0x7A狀態寄存器,即可以清除中斷標志位。

       Figure.5 964/962 各RX Port獨立中斷源

       Figure.6 964/962 各RX Port獨立中斷狀態指示寄存器

      示例代碼:

      #0x30為964的7bit I2C地址

      #使能RX_0的獨立中斷源

      Write( 0x30, 0x4C, 0x01)

      Write( 0x30, 0xD8, 0x07)

      Write( 0x30, 0xD9, 0x77)

      #使能964的全局中斷,以及RX0的中斷源

      Write( 0x30, 0x23, 0x81)

      INTERRUPT_STS = ReadI2C(0x30, 0x24) //讀取0x24,判斷中斷源

      if ((INTERRUPT_STS & 0x80) >> 7):

      print "# GLOBAL INTERRUPT DETECTED " //如果bit 71,則為全局中斷

      if ((INTERRUPT_STS & 0x20) >> 5):

      print "# IS_CSI_TX1 DETECTED " //如果bit 5為1,則為TX1中斷

      if ((INTERRUPT_STS & 0x10) >> 4):

      print "# IS_CSI_TX0 DETECTED " //如果bit 4為1,則為TX0中斷

      if ((INTERRUPT_STS & 0x08) >> 3):

      print "# IS_RX3 DETECTED " //如果bit 3為1,則為RX3中斷

      if ((INTERRUPT_STS & 0x04) >> 2):

      print "# IS_RX2 DETECTED " //如果bit 2為1,則為RX2中斷

      if ((INTERRUPT_STS & 0x02) >> 1):

      print "# IS_RX1 DETECTED " //如果bit 1為1,則為RX1中斷

      if ((INTERRUPT_STS & 0x01) ):

      print "# IS_RX0 DETECTED " //如果bit 0為1,則為RX0中斷

      #假如RX0中斷,通過0xDB/0xDA寄存器來判斷具體的中斷類型

      Write(0x30, 0x4C,0x01) //選通RX0

      PORT_ISR_LO = ReadI2C(0x30, 0xDB) //讀取0xDB狀態

      PORT_ISR_HI = ReadI2C(0x30, 0xDA) //讀取0xDA狀態

      if ((PORT_ISR_LO & 0x40) >> 6):

      print "# IS_LINE_LEN_CHG INTERRUPT DETECTED " //如果bit 6為1,則為水平寬度變化故障

      if ((PORT_ISR_LO & 0x20) >> 5):

      print "# IS_LINE_CNT_CHG DETECTED " //如果bit 5為1,則為垂直寬度變化故障

      if ((PORT_ISR_LO & 0x10) >> 4):

      print "# IS_BUFFER_ERR DETECTED " //如果bit 4為1,則為RX buffer 溢出故障

      if ((PORT_ISR_LO & 0x04) >> 2):

      print "# IS_FPD3_PAR_ERR DETECTED "//如果bit 2為1,則為RX 奇偶校驗錯誤故障

      if ((PORT_ISR_LO & 0x02) >> 1):

      print "# IS_PORT_PASS DETECTED " //如果bit 1為1,則為RX Pass Fail 故障

      if ((PORT_ISR_LO & 0x01) ) :

      print "# IS_LOCK_STS DETECTED " //如果bit 0為1,則為LOCK狀態變更故障

      if ((PORT_ISR_HI & 0x04) >> 2):

      print "# IS_FPD3_ENC_ERR DETECTED "//如果bit 2為1,則為RX Port 編碼失敗故障

      if ((PORT_ISR_HI & 0x02) >> 1):

      print "# IS_BCC_SEQ_ERR DETECTED "//如果bit 1為1,則為BCC時序錯誤故障

      if ((PORT_ISR_HI & 0x01) ) :

      print "# IS_BCC_CRC_ERR DETECTED " //如果bit 0為1,則為BC CRC校驗錯誤故障

      #通過讀取0x4D/0x4E/0x7A中斷狀態指示寄存器,清除中斷狀態

      Write(0x30, 0x4C,0x01) //選通RX0

      ReadI2C(0x30, 0x4D)

      ReadI2C(0x30, 0x4E)

      ReadI2C(0x30, 0x7A)

      2.3 964/962 TX Port的獨立中斷源

      964/962的MIPI CSI TX端的獨立中斷源有五個, 可以在CSI_TX_ICR 0x36中斷源控制寄存器使能,然后在CSI_TX_ISR 0x37中斷狀態指示寄存器讀取中斷狀態,同時清除0x36以及INTB相應的中斷狀態。

      中斷狀態寄存器的配置以及清除中斷狀態的操作,與RX Port類似,這里不做贅述。

      3. 934中斷功能的使能與配置

      3.1. 934 INTB中斷指示腳的使能

      與964/962類似,使用934的INTB中斷指示腳的輸出,需要先將INTERRUPT_CTL 0x23 bit_7的全局中斷使能打開,然后再打開0x23 bit 1:0 的中斷源開關,中斷源來自于2個獨立的RX Port。

      相應RX Port的中斷狀態也可以通過INTERRUPT_STS 0x24中斷狀態指示寄存器進行指示。而當INTB中斷指示腳由于RX的某種故障狀態而拉低之后,需要通過讀取相應中斷源的中斷狀態指示寄存器,來清除中斷指示腳的中斷狀態。

      示例代碼:

      #0x30 為934 的7bit I2C 地址

      #使能934 的全局中斷,以及RX0_1 中斷源

      Write( 0x30, 0x23, 0x83)

      3.2. 934 各個RX Port 的獨立中斷源

      934 的每一個RX Port 都有多個獨立中斷源,而這些獨立中斷源都可以通過PORT_ICR_HI 0xD8 和PORT_ICR_LO 0xD9 寄存器進行使能。同時,在PORT_ISR_HI 0xDA 和PORT_ISR_LO 0xDB 中斷狀態指示寄存器,可以提供相應的只讀中斷狀態指示。

      而清除中斷指示腳,以及中斷狀態指示寄存器的中斷狀態,可以通過讀RX_PORT_STS1 0x4D 和RX_PORT_STS2 0x4E 中斷狀態指示寄存器進行清除。因為PORT_ISR_HI/LO 的中斷狀態位是copy 0x4D/0x4E 中斷狀態寄存器的,所以只要清除了 0x4D/0x4E 這三個寄存器的中斷狀態指示,PORT_ISR_HI/LO 的中斷狀態指示位也會相應的清除,同時0x24 的相應中斷狀態也會清除。

      示例代碼請參考2.2 章節中對964/962 的操作。

      4. 實際應用配置

      如本文開關所述,對于流媒體后視鏡/全景泊車等ADAS 應用中,由于各種各樣設計及外在干擾等因素,有可能會導致實際顯示效果因為閃屏問題的出現而不及預期。為解決此類問題,我們可以利用解串器中的診斷/中斷功能,再配合上有幀buffer 及視頻處理能力的SOC,將有問題的視頻數據過濾掉。

      下文以964/962 為解串器舉例,著重闡述解串器端應該是如何進行中斷功能的使能及配置,SOC 端的處理方式請咨詢相應SOC 的支持團隊,此處不做贅述。而934 的配置方式與964/962 十分類似,因為964/962 的獨立中斷源是比934 多的,并且有TX 端的中斷源,我們只需要將多出來的這部分中斷源不做配置,只配置934 獨有的中斷源即可,因此934 的配置方式及示例代碼請參考964/962 的配置。

      4.1. 964/962 同步模式下中斷相關的配置

      964/962 有三種同步輸出模式,分別是Basic Synchronized/Line-Interleave/Line- Concatenated。在同步模式下,TX Port 會將各個RX Port 輸入的視頻數據,根據相應的模式同步好之后,再進行輸出。當其中一個或者多個RX Port 的視頻數據超過一個行長度的時間還沒有輸入到buffer 里面的話,即認為當前packet 數據同步失敗,964/962 就會將buffer 里面其它RX Port 的視頻數據清除,并接收下一個video line 數據,此時MIPI CSI 口會沒有數據輸出。

      所以,在同步模式下,因為964/962 會將所有RX Port 的數據同步之后再進行輸出,建議只用TX 的獨立中斷源來檢測MIPI CSI 數據是否有異常,這樣做相對比較簡單,軟件處理中斷任務的時間及占用的資源相對較少。另外,因為每一個終端產品的設計/線束/應用環境等參數都有所差異,造成不同的系統可能因不同的原因而對某種中斷源比較敏感, 所以在獨立中斷源的使能上也需要因系統而異,根據調試結果逐步減少獨立中斷源的使能,從而防止中斷重復上報而過多占用系統資源。

      示例程序:

      #0x30 為964 的7bit I2C 地址

      #使能964 TX0_1 的獨立中斷源

      Write( 0x30, 0x32, 0x01) //選通TX0

      Write( 0x30, 0x36, 0x1F) //可以根據測試效果減少獨立中斷源

      Write( 0x30, 0x32, 0x12) //選通TX1

      Write( 0x30, 0x36, 0x1F) //可以根據測試效果減少獨立中斷源

      #使能964 的全局中斷,以及TX0_1 中斷源

      Write( 0x30, 0x23, 0xB0)


      #當檢測到中斷事件后,通過讀取相關寄存器判斷中斷源并清除中斷


      INTERRUPT_STS = ReadI2C(0x30, 0x24) //讀取0x24,判斷中斷源是來自哪個TX port


      if ((INTERRUPT_STS & 0x80) >> 7):


      print "# GLOBAL INTERRUPT DETECTED "//如果bit 7 為1,則為全局中斷


      if ((INTERRUPT_STS & 0x20) >> 5):


      print "# IS_CSI_TX1 DETECTED " //如果bit 5 為1,則為TX1 中斷


      if ((INTERRUPT_STS & 0x10) >> 4):


      print "# IS_CSI_TX0 DETECTED " //如果bit 4 為1,則為TX0 中斷


      #如果是來自與TX1 的中斷,可通過0x37 判斷中斷類型并清除中斷


      Write( 0x30, 0x32, 0x12) //選通TX1


      CSI_TX_ISR = ReadI2C(0x30, 0x37) //讀取0x37 狀態并清除中斷


      if ((CSI_TX_ISR & 0x10) >> 4):


      print "# IS_RX_PORT_INT " //如果bit 4 為1,則為RX 出現中斷故障


      if ((CSI_TX_ISR & 0x08) >> 3):


      print "# IS_CSI_SYNC_ERROR " //如果bit 3 為1,則為輸入信號同步錯誤故障


      if ((CSI_TX_ISR & 0x04) >> 2):


      print "# IS_CSI_SYNC " //如果bit 2 為1,則為TX 同步時出現錯誤故障


      if ((CSI_TX_ISR & 0x02) >> 1):


      print "# IS_CSI_PASS_ERROR " //如果bit 1 為1,則為RX 數據不符合PASS 標準


      if ((CSI_TX_ISR & 0x01)):


      print "# IS_CSI_PASS " //如果bit 0 為1,則為TX 數據不符合PASS 標準

      4.2. 964/962 異步模式下中斷相關的配置

      當964/962 的輸出模式配置為best-effort round robin forwarding 時,便工作在異步輸出模式。在該模式下,TX Port 使用標準的CSI-2 格式傳輸視頻流,且各個攝像頭的視頻數據的輸出沒有特定的順序,當RX Port 的數據ready 后就進行輸出,而不會等待同步完成后再輸出。而如果同一時間多個packet 都ready 的話,TX 的發送器會工作在round robin 的循環模式,逐個將RX 的數據循環進行輸出。

      異步模式可以接受RX Port 的數據是不同的格式,并且不需要各個port 之間的數據同步, 但是需要接收端的SOC 能根據VC ID 和data type 來區分不同輸入源。

      在異步模式下,因為962/964 不會檢測同步信號,所以為了提高系統處理的效率,可以不使用TX 端的獨立中斷源來進行故障的判斷,而是使能RX Port 的獨立中斷源來進行檢測。同樣的,在對系統進行測試的時候,如果發現964/962 有重復上報中斷的話,需要優化0x23/0xD8/0xD9 的獨立中斷源使能,看系統對哪些中斷源比較敏感,然后關閉不必要的中斷源,避免重復上報中斷導致多幀畫面被丟棄。

      示例程序:

      #0x30為964的7bit I2C地址

      #使能964 RX0_1_2_3的獨立中斷源

      Write( 0x30, 0x4C, 0x01) //選通RX_0

      Write( 0x30, 0xD8, 0x07) //需要根據測試效果減少獨立中斷源

      Write( 0x30, 0xD9, 0x77)

      Write( 0x30, 0x4C, 0x12) //選通RX_1

      Write( 0x30, 0xD8, 0x07) //需要根據測試效果減少獨立中斷源

      Write( 0x30, 0xD9, 0x77)

      Write( 0x30, 0x4C, 0x24) //選通RX_2

      Write( 0x30, 0xD8, 0x07) //需要根據測試效果減少獨立中斷源

      Write( 0x30, 0xD9, 0x77)

      Write( 0x30, 0x4C, 0x38) //選通RX_3

      Write( 0x30, 0xD8, 0x07) //需要根據測試效果減少獨立中斷源

      Write( 0x30, 0xD9, 0x77)

      #使能964的全局中斷,以及RX0_1_2_3中斷源

      Write( 0x30, 0x23, 0x8F)


      #當檢測到中斷事件后,通過讀取相關寄存器判斷中斷源并清除中斷


      INTERRUPT_STS = ReadI2C(0x30, 0x24) //讀取0x24,判斷中斷源是來自哪個RX port


      if ((INTERRUPT_STS & 0x80) >> 7):


      print "# GLOBAL INTERRUPT DETECTED " //如果bit 7為1,則為全局中斷


      if ((INTERRUPT_STS & 0x08) >> 3):


      print "# IS_RX3 DETECTED " //如果bit 3為1,則為RX3中斷


      if ((INTERRUPT_STS & 0x04) >> 2):


      print "# IS_RX2 DETECTED " //如果bit 2為1,則為RX2中斷


      if ((INTERRUPT_STS & 0x02) >> 1):


      print "# IS_RX1 DETECTED " //如果bit 1為1,則為RX1中斷


      if ((INTERRUPT_STS & 0x01) ):


      print "# IS_RX0 DETECTED " //如果bit 0為1,則為RX0中斷


      #假如RX0中斷,通過0xDB/0xDA寄存器來判斷具體的中斷類型。


      #對RX_1_2_3的中斷施行同樣的操作。


      Write(0x30, 0x4C,0x01) //選通RX0


      PORT_ISR_LO = ReadI2C(0x30, 0xDB) //讀取0xDB狀態


      PORT_ISR_HI = ReadI2C(0x30, 0xDA) //讀取0xDA狀態


      if ((PORT_ISR_LO & 0x40) >> 6):


      print "# IS_LINE_LEN_CHG INTERRUPT DETECTED " //如果bit 6為1,則為水平寬度變化故障


      if ((PORT_ISR_LO & 0x20) >> 5):


      print "# IS_LINE_CNT_CHG DETECTED " //如果bit 5為1,則為垂直寬度變化故障


      if ((PORT_ISR_LO & 0x10) >> 4):


      print "# IS_BUFFER_ERR DETECTED " //如果bit 4為1,則為RX buffer 溢出故障


      if ((PORT_ISR_LO & 0x04) >> 2):


      print "# IS_FPD3_PAR_ERR DETECTED " //如果bit 2為1,則為RX 奇偶校驗錯誤


      if ((PORT_ISR_LO & 0x02) >> 1):


      print "# IS_PORT_PASS DETECTED " //如果bit 1為1,則為RX Pass Fail 故障


      if ((PORT_ISR_LO & 0x01) ) :


      print "# IS_LOCK_STS DETECTED " //如果bit 0為1,則為LOCK狀態變更故障


      if ((PORT_ISR_HI & 0x04) >> 2):


      print "# IS_FPD3_ENC_ERR DETECTED " //如果bit 2為1,則為RX 編碼失敗故障


      if ((PORT_ISR_HI & 0x02) >> 1):


      print "# IS_BCC_SEQ_ERR DETECTED " //如果bit 1為1,則為BC時序錯誤故障


      if ((PORT_ISR_HI & 0x01) ) :


      print "# IS_BCC_CRC_ERR DETECTED "//如果bit 0為1,則為BC CRC校驗錯誤故障


      #通過讀取0x4D/0x4E/0x7A中斷狀態指示寄存器,清除中斷狀態


      Write(0x30, 0x4C,0x01) //選通RX0


      ReadI2C(0x30, 0x4D) //清除中斷


      ReadI2C(0x30, 0x4E)


      ReadI2C(0x30, 0x7A)


       

      下一篇: PLC、DCS、FCS三大控

      上一篇: 從ERM到X-axis LRA,T

      推薦產品

      更多
      主站蜘蛛池模板: 97se亚洲综合在线| 国产综合精品在线| 久久综合久久综合九色| 久久久久久久综合日本亚洲| 天天躁夜夜躁狂狂躁综合| 亚洲av综合av一区二区三区| 亚洲精品国产综合久久一线| 国产成人综合美国十次| 国产性天天综合网| 国产在线一区二区综合免费视频| 亚洲AV综合色区无码一区爱AV | 久久综合九色综合97伊人麻豆| 国产精品亚洲综合| 偷自拍视频区综合视频区| 综合一区自拍亚洲综合图区| 久久婷婷国产综合精品 | 久久综合给合久久国产免费| 国产成人综合色视频精品| 婷婷五月综合缴情在线视频| 精品综合久久久久久88小说| 亚洲av综合av一区二区三区| 一本色道久久综合无码人妻| 亚洲综合激情另类小说区| 久久香蕉综合色一综合色88| av一本久道久久综合久久鬼色| 香蕉尹人综合在线观看| 亚洲国产成人九九综合| 久久一日本道色综合久久| 一本大道久久a久久精品综合 | 亚洲AV综合色一区二区三区| 久久综合综合久久97色| 亚洲亚洲人成综合网络| 国产精品激情综合久久| 亚洲五月综合缴情在线观看| 色综合久久久久综合体桃花网| 国产综合色在线精品| 2020国产精品亚洲综合网| 国产成人综合一区精品| 小说区综合区首页| 伊人久久综合精品无码AV专区| 亚洲色欲www综合网|