專利名稱:Hdlc控制器及hdlc控制器上報中斷的方法
技術領域:
本發(fā)明涉及數據通信技術,尤其涉及一種高級數據鏈路控制(HDLC, High Level Data Link Control)控制器及HDLC控制器上報中斷的方法。
背景技術:
目前,El接口作為一種2M串行接入方式在數據通信系統(tǒng)中得到了廣 泛應用, 一般路由器等通信設備上都支持E1接口。按照是否支持通道化, El接口分為CE1和El - F。圖1示出了 El - F接口電路示意圖,包括HDLC 控制器和成幀器(Framer) , Fmmer與電纜相連,HDLC控制器和Framer 之間通過時分復用(TDM, Time Division Multiplexing)接口對接。其中, Framer為外置芯片,而HDLC控制器既可以由系統(tǒng)主CPU集成,也可以外 接在CPU上。圖2示出了 HDLC控制器集成在CPU上的結構示意圖,CPU內部集成 HDLC控制器,并提供TDM接口與Framer芯片對接。但是,這種方式需要 CPU提供可用的HDLC控制器資源和TDM接口 ,這對于成本壓力越來越大 的中低端通信設備來說,無疑是很大的限制。圖3示出了 HDLC控制器外置的結構示意圖,CPU通過本地總線(Local bus )外接HDLC控制器與Framer芯片互通。由于Local bus是一般CPU都 具有的總線資源,因此這種方式不受CPU是否內置HDLC控制器資源的限 制。其中,HDLC控制器主要包括接收方向上的HDLC單元(RHDLC)、 發(fā)送方向上的HDLC單元(THDLC)、接收方向上的先入先出緩沖存儲器 (RFIFO )和發(fā)送方向上的先入先出緩沖存儲器(TFIFO ) , RFIFO和TFIFO 的深度均固定為32B。在接收方向上,線路側的數據通過Framer芯片解碼后通過TDM接口傳送到RHDLC, RHDLC將數據送入RFIFO,只要RFIFO 中有數據,邏輯就上報中斷到CPU,通知Local bus來讀取數據;在發(fā)送方 向上,CPU將要發(fā)送的數據通過Local bus寫入TFIFO,只要TFIFO中有數 據,邏輯就啟動THDLC發(fā)送數據,當TFIFO為空時,邏輯上報中斷到CPU, 通知Local bus繼續(xù)進行后續(xù)數據發(fā)送。由以上描述可見,圖3所示外接HDLC控制器是通過中斷與CPU交互, 從而觸發(fā)Local bus操作的,中斷的產生與RFIFO/TFIFO的狀態(tài)有關。由于 RFIFO/TFIFO的深度只有32B,因此當有長數據幀收發(fā)時,HDLC控制器就 會產生大量的收發(fā)中斷不斷觸發(fā)CPU的Local bus操作,從而占用大量的 Local bus帶寬以及CPU的時間片,這樣不僅給Local bus的帶寬性能帶來很 大挑戰(zhàn),同時也會造成CPU占有率飽和,從而影響到整個通信設備的性能。 甚至當業(yè)務繁忙時,會因為RFIFO/TFIFO的深度較小而產生數據包丟失。 另外,當設備上同時有其它業(yè)務需要處理時,如果HDLC控制器產生的中斷 過多,也會造成CPU對其它業(yè)務處理的延遲。發(fā)明內容有鑒于此,本發(fā)明的目的在于提供一種HDLC控制器及HDLC控制器 上報中斷的方法,優(yōu)化HDLC控制器上報中斷的頻率和次數,提升設備處理性能。為達到上述目的,本發(fā)明提供的技術方案如下一種HDLC控制器,在接收方向上包括第一接收方向上的先入先出 緩沖存儲器RFIFOl、第二接收方向上的先入先出緩沖存儲器RFIF02、接收 檢幀單元、接收方向上的高級數據鏈路控制單元RHDLC和接收邏輯,所述 RFIF02的深度大于RFIFO 1的深度,其中,RHDLC,用于接收Framer發(fā)來的數據,對收到的數據進行解幀處理打 上幀頭、幀尾,并送入RFIF02;RFIF02,用于存儲RHDLC發(fā)來的數據,并在接收邏輯的控制下將數據傳送給RFIFOl;接收檢幀單元,位于RFIFOl和RFIF02之間,用于在RFIF02向RFIFOl 傳送數據的過程中檢測數據幀,在檢測到幀尾時向接收邏輯發(fā)送幀尾通知;接收邏輯,用于在接收到幀尾通知后,停止RFIF02和RFIFOl之間的 數據傳遞,向CPU上報RME中斷,通知CPU用Local bus來讀取RFIFOl 中的數據;在RFIFOl滿時,停止RFIF02和RFIFOl之間的數據傳遞,向 CPU上報RPF中斷,通知CPU用Local bus來讀取RFIFOl中的數據;在收 到CPU在數據讀取完畢后寫入的RMC標識后,觸發(fā)RFIF02向RFIFOl繼 續(xù)傳遞數據。 '所述RFIFO1和RFIF02的深度根據實際業(yè)務的數據包長確定。在發(fā)送方向上,所述HDLC控制器進一步包括發(fā)送方向上的先入先 出緩沖存儲器TFIFO、發(fā)送檢幀單元、發(fā)送方向上的高級數據鏈路控制單元 THDLC和發(fā)送邏輯,其中,TFIFO,用于存儲CPU寫入的數據;發(fā)送檢頓單元,位于TFIFO和THDLC之間,用于在THDLC發(fā)送TFIFO 中數據的過程中,通過檢測數據幀幀尾確定從TFIFO中發(fā)送出去的數據幀 個數;發(fā)送邏輯,用于在收到來自CPU的發(fā)送請求標識后,判斷已使用的 TFIFO長度TFIFO—USED是否小于設置的低水標TFIFO—DOWN,在 TFIFO—USED小于TFIFO—DOWN時向CPU返回INT—TX中斷,通知CPU 向TFIFO中寫入數據;并且,通過計算CPU寫入的XME標識個數與發(fā)送 檢幀單元檢測到的已發(fā)送數據幀個數之差確定TFIFO中的數據幀個數,在 TFIFO內有一幀或一幀以上的數據時,或者在TFIFO—USED超過設置的高 水標TFIFO—UP時,觸發(fā)THDLC發(fā)送TFIFO中的數據;其中,所述XME 標識為CPU在向TFIFO中寫完一幀數據時發(fā)送的標識。所述TFIFO的深度、TFIFO的高低水標TFIFO DOWN和TFIFO—UP 根據實際業(yè)務的數據包長確定。所述HDLC控制器通過Local bus與CPU連接。一種HDLC控制器上報中斷的方法,在HDLC控制器內設置RFIFOl 和RFIF02,且RFIF02的深度大于RFIFOl的深度,該方法包括在接收方向上,HDLC控制器收到來自Framer的數據后,對收到的數 據進行解幀處理打上幀頭、幀尾送入RFIF02,并將RFIF02中存儲的數據 傳到RFIFOl ,當一個數據幀傳送完畢時以及RFIFOl滿時,都向CPU上報 中斷,通知CPU用Local bus來讀取RFIFOl中的數據,同時停止RFIF02 和RFIFOl之間的數據傳遞;并且,在收到CPU在數據讀取完畢后寫入的 RMC標識后,觸發(fā)RFIF02向RFIFOl繼續(xù)傳遞數據。所述RFIFOl和RFIF02的深度根據實際業(yè)務的數據包長確定。所述HDLC控制器內還包括TFIFO,該方法進一步包括在發(fā)送方向上,HDLC控制器收到來自CPU的發(fā)送請求標識后,判斷 TFIFO_USED是否小于設置的低水標TFIFO—DOWN,在TFIFO—USED小于 TFIFO_D〇WN時向CPU返回INT—TX中斷,通知CPU向TFIFO中寫入數 據;并在TFIFO內有一幀或一幀以上的數據時或者在TFIFO—USED超過設 置的高水標TFIFO—UP時,發(fā)送TFIFO中的數據。所述HDLC控制器通過計算CPU寫入的XME標識個數與已發(fā)送的數 據幀個數之差確定TFIFO中的數據幀個數,其中,所述XME標識為CPU 在向TFIFO中寫完一幀數據時發(fā)送的標識。所述TFIFO的深度、TFIFO的高低水標TFIFO—DOWN和TFIFOJJP 根據實際業(yè)務的數據包長確定。由此可見,在接收方向上,采用本發(fā)明所提供的 一 大 一 小兩級接收FIFO 結構,既可以通過大的RFIF02來保證HDLC控制器在接收方向上有足夠的 數據緩存能力,避免數據包丟失,也可以通過合理設置RFIFOl深度,避免 因深度不足而產生過多中斷或者因深度太大而造成CPU —次中斷處理時間 過長,減少中斷對其它業(yè)務的影響;另外,HDLC控制器在一個數據幀傳送 完畢或RFIFOl滿時才向CPU上報中斷,而不是RFIFO中一有數據就向CPU上報中斷,優(yōu)化了接收方向中斷產生的頻率和次數,減少了 Local bus操作, 降低了CPU占有率,提升了設備處理性能。進一步地,在發(fā)送方向上,也可以通過合理設置TFIFO的深度來避免 因深度不足而產生過多中斷;并且,高低水標TFIFO—DOWN和TFIFO—UP 的靈活設置可以更好地控制發(fā)送方向上中斷產生的次數和頻率;另外,在 TFIFO內容TFIFO—USED超過TFIFO—UP,或者在TFIFO中有完整的一幀 數據時才啟動THDLC發(fā)送數據,而不是TFIFO中一有數據就即刻發(fā)送,可 以避免因CPU業(yè)務繁忙只將一幀數據的一部分寫入TFIFO就忙于處理其它 業(yè)務而造成的under run 4告i吳。
.圖1為現(xiàn)有技術中的El -F接口電路示意圖;圖2為現(xiàn)有技術中HDLC控制器集成在CPU上的結構示意圖;圖3為現(xiàn)有技術中HDLC控制器外置的結構示意圖;圖4為本發(fā)明實施例中的HDLC控制器結構示意圖;圖5為圖4所示HDLC控制器接收方向的處理流程圖;圖6為圖4所示HDLC控制器發(fā)送方向的處理流程圖。
具體實施方式
為使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,下面參照附圖并舉 實施例,對本發(fā)明作進一步詳細說明。由背景技術描述可見,在圖3所示CPU外接HDLC控制器的情況下, HDLC控制器是通過中斷與CPU交互的,過多或過頻的中斷會占用大量的 Local bus帶寬及CPU的時間片,影響設備的處理性能??紤]到中斷的產生 與收發(fā)FIFO的狀態(tài)有關,本發(fā)明的基本思想是通過合理配置HDLC控制 器收發(fā)FIFO的結構和深度,優(yōu)化中斷產生的頻率和次數,以減少Local bus 操作,降低CPU占有率。圖4示出了本發(fā)明實施例中的HDLC控制器結構示意圖。HDLC控制器 的接收方向和發(fā)送方向相互獨立,接收方向包括RHDLC 、 RFIFO1 、 RFIF02 、 接收檢幀單元和接收邏輯;發(fā)送方向包括THDLC、 TFIFO、發(fā)送檢幀單元 和發(fā)送邏輯。下面分別對圖4所示HDLC控制器接收方向和發(fā)送方向的處理 過程進行詳細說明。圖5示出了圖4所示HDLC控制器接收方向的處理流程圖,包括以下 步驟步驟5 01: RHDLC接收到Framer發(fā)來的數據后,對數據進行解幀處理 打上幀頭、幀尾,并送入RFIF02。RFIF02的深度可根據實際業(yè)務的數據包長進行合理設置。較佳地,可 將RFIF02的深度設置得大一些,以保證RFIF02有足夠的深度來容納數據 包,避免因RFIF02太小而造成的數據包丟失。本實施例中,將RFIF02的 深度設置為6K。步驟502:只要RFIF02中有數據,接收邏輯銀控制RFIF02向RFIFOl傳遞。RFIFOl的深度要比RFIF02的深度小,可根據實際業(yè)務的數據包長進 行合理設置,不宜過小,也不宜過大。過小則會產生像現(xiàn)有技術中那樣的深 度不足問題,在接收長數據幀時產生過多的中斷;過大則會造成CPU的一 次中斷處理時間過長,影響CPU對其它業(yè)務的響應。本實施例中,將RFIFOl 的深度設置為512B。步驟503:接收檢幀單元位于RFIF02和RFIFOl之間,用于在RFIF02 向RFIFOl傳送數據的過程中檢測數據幀。當接收的數據幀的幀長小于 RFIF()l的深度時,RFIF02會將該數據幀一次性傳輸到RFIFOl中;在該幀 傳輸完畢時,接收檢幀單元就會檢測到一個數據幀幀尾,此時接收檢幀單元 向接收邏輯發(fā)送幀尾通知;接收邏輯收到幀尾通知后,停止RFIF02和 RFIF()l之間的數據傳遞,并向CPU上報幀接收結束中斷(下稱RME中斷), 通知CPU用Local bus來讀取RFIFO 1中的數據。當接收的數據幀的幀長大于RFIFOl的深度時,在RFIF02向RFIFOl 傳送數據的過程中,可能會遇到若干次RFIFO1滿的情況。每當RFIFO1滿 時,接收邏輯就停止RFIF02和RFIFOl之間的數據傳遞,并向CPU上報 RFIFOl滿中斷(下稱RPF中斷),通知CPU用Local bus來讀取RFIFOl 中的數據。在該長數據幀的最后一部分傳入RFIFOl時,接收4企測單元會檢 測到一個數據幀幀尾,隨即向接收邏輯發(fā)送幀尾通知;接收邏輯收到幀尾通 知后,停止RFIF02和RFIFOl之間的數據傳遞,并向CPU上報RME中斷, 通知CPU用Local bus來讀取RFIFOl中的數據。步驟504: CPU收到HDLC控制器發(fā)來的RME中斷或RPF中斷后,觸 發(fā)Local bus從RFIFOl讀取數據,并在數據讀耳又完畢后向HDLC控制器寫 入讀取確i人標識(下稱RMC標識)。步驟505:接收邏輯收到CPU寫入的RMC標識后,觸發(fā)RFIF02向 RFIFOl繼續(xù)傳遞數據,返回執(zhí)行步驟502。采用圖4所示的兩級接收FIFO結構以及圖5所示的中斷上報方式,能 夠達到以下有益效果一、RFIFOl深度的合理設置,可以解決現(xiàn)有技術中RFIFO深度不足的 問題,避免在接收長數據幀時產生過多的中斷;并且,也不會使CPU —次 中斷處理時間過長,以免對CPU處理其它業(yè)務產生影響。二 、 RFIF02的設置可以保證HDLC控制器在接收方向上有足夠的數據 緩存能力,避免數據包丟失。三、在一個數據幀傳送完畢或RFIFOl滿時向CPU上報中斷的方式, 優(yōu)化了接收方向中斷產生的頻率和次數,減少了 Local bus操作,降低了 CPU 占有率,提升了設備處理性能。圖6示出了圖4所示HDLC控制器發(fā)送方向的處理流程圖,包括以下 步驟步驟601:當CPU有數據幀需要向HDLC控制器發(fā)送時,CPU首先向 HDLC控制器寫入一個發(fā)送請求標識(下稱XF標識),用以確認TFIFO空間是否可用。步驟602: HDLC控制器的發(fā)送邏輯收到CPU寫入的XF標識后,判斷 已使用的TFIFO長度即TFIFO內容TFIFOJJSED是否小于預先設置的低水 標TFIFO—DOWN,如果小于,則向CPU返回一個發(fā)送確認中斷(下稱 INT—TX中斷),通知CPU可以向TFIFO中寫入數據;否則,不返回INT—TX中斷。步驟603: CPU收到INT—TX中斷后,觸發(fā)Local bus向TFIFO中寫入 數據,并在寫完一幀數據時,向HDLC控制器寫一個發(fā)送結束標識(下稱 XME標識),表示一幀結束。步驟604:發(fā)送邏輯統(tǒng)計TFIFO中的數據幀個數,在TFIFO內部有一 幀或 一 幀以上的數據時,觸發(fā)THDLC發(fā)送TFIFO中的數據;并且,發(fā)送邏 輯判斷TFIFO內容TFIFOJJSED是否超過預先設置的高水標TFIFO_UP, 如果超過,也觸發(fā)THDLC發(fā)送TFIFO中的數據。其中,發(fā)送檢幀單元位于TFIFO和THDLC之間,用于在THDLC發(fā)送 TFIFO中數據的過程中,通過檢測數據幀幀尾確定乂人TFIFO中發(fā)送出去的 數據幀個數。發(fā)送邏輯通過計算CPU寫入的XME標識個數與發(fā)送檢幀單元 檢測到的已發(fā)送的數據幀個數之差確定TFIFO中的數據幀個數。其中,TFIFO的深度、TFIFO的高低水標TFIFO—DOWN和TFIFO—UP 都可根據實際業(yè)務的數據包長進行合理設置。本實施例中,可將TFIFO的 深度設置為2K,以避免因FIFO深度不足而產生過多中斷。TFIFO—DOWN 和TFIFO一UP的值可相同或不同,它們都是軟件可編程的,用戶可以根據實 際需求進行靈活調整,這樣可以更好地控制中斷產生的個數和頻率以及啟動 THDLC發(fā)送數據的時機。另外,在TFIFO中有完整的 一幀數據時才啟動 THDLC發(fā)送數據,而不是TFIFO中一有數據就即刻發(fā)送,可以避免因CPIJ 業(yè)務繁忙只將一幀數據的一部分寫入TFIFO就忙于處理其它業(yè)務而造成的 under rim錯誤。需要說明的是,本發(fā)明所提供的HDLC控制器接收方向結構和發(fā)送方向上結構既可以結合使用,也可以分開使用。最后需要說明的是,本發(fā)明所提供的技術方案不僅適用于El接口 ,也適用于其它接口,如T1接口、串口等。以上所述對本發(fā)明的目的、技術方案和有益效果進行了進一步的詳細說 明,所應理解的是,以上所述并不用以限制本發(fā)明,凡在本發(fā)明的精神和原 則之內,所做的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。
權利要求
1、一種HDLC控制器,其特征在于,在接收方向上包括第一接收方向上的先入先出緩沖存儲器RFIFO1、第二接收方向上的先入先出緩沖存儲器RFIFO2、接收檢幀單元、接收方向上的高級數據鏈路控制單元RHDLC和接收邏輯,所述RFIFO2的深度大于RFIFO1的深度,其中,RHDLC,用于接收Framer發(fā)來的數據,對收到的數據進行解幀處理打上幀頭、幀尾,并送入RFIFO2;RFIFO2,用于存儲RHDLC發(fā)來的數據,并在接收邏輯的控制下將數據傳送給RFIFO1;接收檢幀單元,位于RFIFO1和RFIFO2之間,用于在RFIFO2向RFIFO1傳送數據的過程中檢測數據幀,在檢測到幀尾時向接收邏輯發(fā)送幀尾通知;接收邏輯,用于在接收到幀尾通知后,停止RFIFO2和RFIFO1之間的數據傳遞,向CPU上報RME中斷,通知CPU用Local bus來讀取RFIFO1中的數據;在RFIFO1滿時,停止RFIFO2和RFIFO1之間的數據傳遞,向CPU上報RPF中斷,通知CPU用Local bus來讀取RFIFO1中的數據;在收到CPU在數據讀取完畢后寫入的RMC標識后,觸發(fā)RFIFO2向RFIFO1繼續(xù)傳遞數據。
2、 根據權利要求1所述的HDLC控制器,其特征在于,所述RFIFOl和 RFIF02的深度根據實際業(yè)務的數據包長確定。
3、 根據權利要求1或2所述的HDLC控制器,其特征在于,在發(fā)送方向 上,所述HDLC控制器進一步包括發(fā)送方向上的先入先出緩沖存儲器TFIFO、 發(fā)送檢幀單元、發(fā)送方向上的高級數據鏈路控制單元THDLC和發(fā)送邏輯,其 中,TFIFO,用于存儲CPU寫入的數據;發(fā)送檢幀單元,位于TFIFO和THDLC之間,用于在THDLC發(fā)送TFIFO 中數據的過程中,通過檢測數據幀幀尾確定從TFIFO中發(fā)送出去的數據幀個數; 發(fā)送邏輯,用于在收到來自CPU的發(fā)送請求標識后,判斷已使用的TFIFO長度TFIFO—USED是否小于設置的低水標TFIFO_DOWN,在TFIFOJJSED小 于TFIFO_DOWN時向CPU返回INT_TX中斷,通知CPU向TFIFO中寫入數 據;并且,通過計算CPU寫入的XME標識個數與發(fā)送檢幀單元檢測到的已發(fā) 送數據幀個數之差確定TFIFO中的數據幀個數,在TFIFO內有 一幀或 一 幀以上 的數據時,或者在TFIFO一USED超過設置的高水標TFIFO—UP時,觸發(fā)THDLC 發(fā)送TFIFO中的數據;其中,所述XME標識為CPU在向TFIFO中寫完一幀 數據時發(fā)送的標識。
4、 根據權利要求3所述的HDLC控制器,其特征在于,所述TFIFO的深 度、TFIFO的高低水標TFIFO一DOWN和TFIFO—UP根據實際業(yè)務的數據包長 確定。
5、 根據權利要求1所述的HDLC控制器,其特征在于,所述HDLC控制 器通過Local bus與CPU連接。
6、 一種HDLC控制器上報中斷的方法,其特征在于,在HDLC控制器內 設置RFIFOl和RFIF02,且RFIF02的深度大于RFIFOl的深度,該方法包括在接收方向上,HDLC控制器收到來自Framer的數據后,對收到的數據進 行解幀處理打上幀頭、幀尾送入RFIF02,并將RFIF02中存儲的數據傳到 RFIFOl,當一個數據幀傳送完畢時以及RFIFOl滿時,都向CPU上報中斷, 通知CPU用Local bus來讀取RFIFOl中的數據,同時停止RFIF02和RFIFOl 之間的數據傳遞;并且,在收到CPU在數椐讀取完畢后寫入的RMC標識后, 觸發(fā)RFIF02向RFIFOl繼續(xù)傳遞數據。
7、 根據權利要求6所述的方法,其特征在于,所述RFIFOl和RFIF02的 深度根據實際業(yè)務的數據包長確定。
8、 根據權利要求6或7所述的方法,其特征在于,所述HDLC控制器內 還包括TFIFO,該方法進一步包括在發(fā)送方向上,HDLC控制器收到來自CPU的發(fā)送請求標識后,判斷 TFIFO—USED是否小于設置的低水標TFIFO—DOWN,在TFIFO—USED小于 TFIFO—DOWN時向CPU返回INT—TX中斷,通知CPU向TFIFO中寫入數據;并在TFIFO內有一幀或一幀以上的數據時或者在TFIFOJJSED超過設置的高 水標TFIFO—UP時,發(fā)送TFIFO中的數據。
9、 根據權利要求8所述的方法,其特征在于,所述HDLC控制器通過計 算CPU寫入的XME標識個數與已發(fā)送的數據幀個數之差確定TFIFO中的數據 幀個數,其中,所述XME標識為CPU在向TFIFO中寫完一幀數據時發(fā)送的標 識。
10、 根據權利要求8所述的方法,其特征在于,所述TFIFO的深度、TFIFO 的高低水標TFIFO DOWN和TFIFO UP根據實際業(yè)務的數據包長確定。
全文摘要
本發(fā)明公開了一種HDLC控制器及HDLC控制器上報中斷的方法。所述HDLC控制器在接收方向包括RHDLC、RFIFO1、RFIFO2、接收檢幀單元和接收邏輯;在發(fā)送方向包括THDLC、TFIFO、發(fā)送檢幀單元和發(fā)送邏輯。利用本發(fā)明所提供的技術方案,能夠優(yōu)化HDLC控制器向CPU上報中斷的次數和頻率,提高設備處理性能。
文檔編號H04L1/00GK101321038SQ20081011705
公開日2008年12月10日 申請日期2008年7月23日 優(yōu)先權日2008年7月23日
發(fā)明者謝世成 申請人:杭州華三通信技術有限公司