[發明專利]TTE端系統適配卡PCIE控制器的高效中斷操作方法有效
| 申請號: | 201911046802.5 | 申請日: | 2019-10-30 |
| 公開(公告)號: | CN110990309B | 公開(公告)日: | 2023-04-28 |
| 發明(設計)人: | 潘偉濤;鄭圓圓;邱智亮;張仲禹;張冰;郭一然;王媛媛 | 申請(專利權)人: | 西安電子科技大學 |
| 主分類號: | G06F13/28 | 分類號: | G06F13/28;G06F13/24;G06F13/42 |
| 代理公司: | 西安長和專利代理有限公司 61227 | 代理人: | 肖志娟 |
| 地址: | 710071 陜西省*** | 國省代碼: | 陜西;61 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | tte 系統 適配卡 pcie 控制器 高效 中斷 操作方法 | ||
1.一種TTE端系統適配卡PCIE控制器的高效中斷操作方法,其特征在于,所述TTE端系統適配卡PCIE控制器的高效中斷操作方法包括以下步驟:
第一步,DMA讀流程,DMA讀緩沖區分為非保障區和保障區,保障區防止某個數據幀的前半部分在DMA讀緩沖區的尾部,而數據幀的后半部分在DMA讀緩沖區的頭部的情況發生;
第二步,DMA寫流程,DMA寫緩沖區被分為兩個部分,一個是ABuffer另一個是BBuffer;驅動處理A部分的數據時,硬件可以將數據寫入B部分,驅動將A部分處理完畢后,開始繼續處理B部分的數據;
所述第一步DMA讀流程包括:硬件Bar空間中DMA讀相關寄存器:
dma_read_buferr_base_addr,32位寄存器,用于存放DMA讀緩沖區的基地址;
start_addr,32位寄存器,由硬件維護的頭指針;
end_addr,32位寄存器,由驅動維護的尾指針;
round_end_flag,1位寄存器,標志位為1,表示當前的尾地址是當前輪回的最后一個尾地址,該標志位為0表示,表示當前的尾地址不是當前輪回的最后一個尾地址;
所述第一步DMA讀流程的驅動處理包括:
步驟一,驅動上電初始化時通過PIO寫方式配置dma_read_buferr_base_addr寄存器,初始化完成后執行步驟二;
步驟二,驅動等待應用層產生新的數據,若有新的數據產生,驅動立即將應用層下發的數據寫入DMA讀緩沖區,如果這次寫入操作是某個輪回的首次寫入,驅動應該將數據以DMA讀緩沖區的基地址為起始點寫入DMA讀緩沖區,否則驅動應該將數據以上一次寫入的數據所在的尾地址為起始點寫入DMA讀緩沖區,寫入完畢后執行步驟三;
步驟三,驅動通過PIO寫方式將最新寫入的數據所在的尾地址寫入硬件的end_addr寄存器,PIO操作完畢后,執行步驟四;
步驟四,驅動將最新寫入的數據所在的尾地址與警戒線的大小進行對比;若沒有超過警戒線,回到步驟二準備開始下一次DMA傳輸,若超過警戒線,執行步驟五;
步驟五,驅動通過PIO寫方式向硬件中的round_end_flag寫入1通知硬件最新更新的end_addr是當前輪回中驅動最后一次更新的尾指針,PIO操作完畢后,執行步驟六;
步驟六,驅動處于等待讀完成中斷的狀態,收到中斷后,執行步驟七;
步驟七,驅動收到讀完成中斷后,將DMA讀緩沖區清空,并回到步驟二準備開始下一個輪回的首次DMA傳輸;
所述第一步DMA讀流程的硬件處理包括:
步驟一,硬件檢測到驅動配置了Bar空間的dma_read_buferr_base_addr寄存器,執行步驟二;
步驟二,硬件進行初始化操作:硬件自動將dma_read_buferr_base_addr寄存器中的數值寫入start_addr寄存器,將Bar空間的round_end_flag寄存器清0;硬件等待驅動進行當前輪回尾指針的首次更新,執行步驟三;
步驟三,硬件檢測到驅動更新了尾指針,表示驅動啟動了當前輪回的首次DMA傳輸,執行步驟四;
步驟四,硬件立即啟動DMA讀,發送讀請求包請求DMA讀緩沖區中從start_addr到end_addr的數據,讀請求包發送完畢后,執行步驟五;
步驟五,RC(RootComplex)將硬件請求的數據封裝成讀完成包返回給硬件,硬件接收讀完成包,解析讀完成包,最終將讀完成包中的有效數據存入緩存中,當硬件接收到足量的讀完成包后,將start_addr寄存器的數值更新為end_addr+1,執行步驟六;
步驟六,硬件檢測round_end_flag是否為0,若為0,表示當前輪回的DMA傳輸還沒有結束,執行步驟七,若為1,表示當前輪回的DMA傳輸已經結束,執行步驟八;
步驟七,硬件實時將start_addr寄存器-1和end_addr的數值進行對比,若相等,表示驅動還未啟動新的DMA傳輸,繼續等待;若不相等,表示驅動啟動了新的DMA傳輸,執行步驟四;
步驟八,硬件產生硬線INT中斷,并將中斷寄存器中的讀完成中斷標志位置1,回到步驟二準備開始下一個輪回的DMA傳輸;
所述第二步DMA寫流程的硬件Bar空間中DMA寫相關寄存器:
dma_write_buferr_base_addr,32位寄存器,存放DMA寫緩沖區的基地址;
A_buffer_flag,1位寄存器,標志位為1表示允許硬件向ABuffer寫入數據,標志位為0表示不允許硬件向ABuffer寫入數據,初始值為1;
B_buffer_flag,1位寄存器,標志位為1表示允許硬件向BBuffer寫入數據,標志位為0表示不允許硬件向BBuffer寫入數據,初始值為1;
所述第二步DMA寫流程的驅動處理包括:
步驟一,驅動上電初始化通過PIO寫方式配置dma_write_buferr_base_addr寄存器,初始化完畢后,執行步驟二;
步驟二,驅動等待寫完成A中斷或寫完成B中斷,收到寫完成A中斷后,執行步驟三,收到寫完成B中斷后,執行步驟四;
步驟三,驅動收到寫完成A中斷后,立即解析ABuffer中的數據,解析完畢后,向硬件的A_buffer_flag寫入1;
步驟四,驅動收到寫完成B中斷后,立即解析BBuffer中的數據,解析完畢后,向硬件的B_buffer_flag寫入1;
所述第二步DMA寫流程的硬件處理包括:
步驟一,硬件實時監測或定時檢測接收FIFO中是否有待發的完整數據幀,若有待發的完整數據幀,執行步驟二;
步驟二,硬件自主啟動DMA寫,若此次啟動是首次啟動或上次啟動DMA寫將數據寫入了BBuffer,執行步驟三,否則執行步驟六;
步驟三,硬件將數據封裝為寫請求包并寫入ABuffer,所有數據寫完后,判斷B_buffer_flag是否為1,若B_buffer_flag是0,執行步驟四,否則執行步驟五;
步驟四,硬件等待驅動向B_buffer_flag寫入1,當B_buffer_flag為1后,執行步驟五;
步驟五,硬件產生硬線INT中斷,并將中斷寄存器中寫完成A中斷標志位置1,并將A_buffer_flag清0,回到步驟一;
步驟六,硬件將數據封裝為寫請求包并寫入BBuffer,所有數據寫完后,判斷A_buffer_flag是否為1,若A_buffer_flag是0,執行步驟七,否則執行步驟八;
步驟七,硬件等待驅動向A_buffer_flag寫入1,當A_buffer_flag為1后,執行步驟八;
步驟八,硬件產生硬線INT中斷,并將中斷寄存器中寫完成B中斷標志位置1,并將B_buffer_flag清0,回到步驟一。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于西安電子科技大學,未經西安電子科技大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201911046802.5/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種適用于投資規劃的配電網網架結構評估方法
- 下一篇:壁掛式空調室內機





