專利名稱:利用gpio模擬低速并行接口的方法
技術領域:
本發(fā)明涉及稅控領域,具體而言,涉及一種利用GPIO模擬低速并行接口的方法。
背景技術:
現(xiàn)有稅控專用硬件設備,因為產(chǎn)品延續(xù)的原因,其核心單元只具有低速的并行接口,該低速的并行接口通過一個并口轉PCI (Peripheral Component Interconnect)接口的轉換芯片轉接出一個PCI從接口,轉接出的PCI從接口作為稅控設備整體的對外通信接口,在使用時稅控設備安裝在微型計算機的PCI擴展插槽上。
隨著計算機總線技術的發(fā)展,微型計算機的擴張插槽將由PCI e (PeripheralComponent Interconnect Express)來取代PCI,所以稅控設備的PCI從接口也需要升級為PCI e的從接口,才能適應新的計算機總線。一般來說,更換接口轉換芯片,使用新的接口轉換芯片將核心單元的低速并行接口轉換為PCI e的從接口,即能滿足這樣的升級需求,但市場中無法找到具有此功能的轉換芯片,只能找到由PCI e的從接口轉換出的若干GPIO(General Purpose Input Output,通用輸入/輸出)這樣的轉換芯片,該芯片內部提供多個控制寄存器,實現(xiàn)對GPIO的控制。為了滿足稅控專用硬件設備的升級要求,本方案的研發(fā)人員決定使用現(xiàn)有的這款轉換芯片來實現(xiàn)PCI e的從接口到低速并行接口的轉換。相關背景技術I :PCI e的從接口轉若干GPIO的轉換芯片的特點是接口轉換芯片內部具有GPIO數(shù)據(jù)寄存器、輸入輸出控制寄存器和高阻寄存器,GPIO數(shù)據(jù)寄存器為32位寄存器,寄存器中的每I位與一個GPIO引腳對應,當設置引腳為輸入狀態(tài)時,如果某一 GPIO引腳的電平為高電平時,該位值為1,當電平為低電平時,該位值為O。反之,當設置為輸出狀態(tài)時,數(shù)據(jù)寄存器的值則決定了 GPIO引腳的電平高低狀態(tài)。輸入輸出控制寄存器為32位,寄存器中的每I位對應一個GPIO引腳,用來控制GPIO引腳處于輸入或是輸出狀態(tài),某一位值為I,表不該位對應的GPIO引腳為輸入狀態(tài),值為O,表不該位對應的GPIO引腳為輸出狀態(tài)。高阻寄存器也是32位,一位對應一個GPIO引腳,當某一位為I時,對應的GPIO引腳為高阻狀態(tài),為O時為輸入或輸出狀態(tài),由輸入輸出控制寄存器決定。相關背景技術2 PCI e的從接口設備在安裝到計算機上以后,如果要正常使用,還需要配套一個驅動程序,驅動程序安裝在計算機上控制計算機的PCI e的主接口,每次通信由主接口發(fā)起,從接口響應,表現(xiàn)為一問一答的通信特點,從接口設備為被動式地等待主接口的命令。
發(fā)明內容
本發(fā)明提供一種利用GPIO模擬低速并行接口的方法,用以將PCI e的從接口轉為低速并行接口,使得稅控專用硬件設備能夠滿足計算機總線升級的要求。
為達到上述目的,本發(fā)明提供了一種利用GPIO模擬低速并行接口的方法,其包括以下步驟將接口轉換芯片的GPIO引腳分為數(shù)據(jù)引腳和控制引腳,將數(shù)據(jù)引腳定義為低速并行接口的數(shù)據(jù)總線,將控制引腳定義為低速并行接口的控制總線;通過PCI e從接口的驅動程序中的GPIO控制模塊對接口轉換芯片內部的GPIO數(shù)據(jù)寄存器和輸入輸出控制寄存器進行控制,使得數(shù)據(jù)總線和控制總線處于一種低速并行接口的工作運行狀態(tài)。較佳的,數(shù)據(jù)引腳定義為8的倍數(shù)。較佳的,控制總線包括4個控制信號引腳,分別為自身緩存狀態(tài)輸出引腳、對方讀信號輸入引腳、對方緩存狀態(tài)輸入引腳、自身讀信號輸出引腳。較佳的,通過PCI e從接口的驅動程序中的GPIO控制模塊對接口轉換芯片內部的GPIO數(shù)據(jù)寄存器和輸入輸出控制寄存器進行控制,使得數(shù)據(jù)總線和控制總線處于低速并行接口的工作運行狀態(tài)步驟包括在上電復位后,對PCI e從接口的驅動程序中的GPIO控制模塊進行初始化操作;當應用程序有數(shù)據(jù)要發(fā)送給PCI e的從接口設備時,應用程序將要發(fā)送的數(shù)據(jù)傳遞驅動程序,驅動程序再把要發(fā)送的數(shù)據(jù)傳遞給GPIO控制模塊,GPIO控制模塊控制接口轉換芯片的控制總線和數(shù)據(jù)總線將要發(fā)送的數(shù)據(jù)傳遞給從接口設備;GPIO控制模塊控制接口轉換芯片的控制總線和數(shù)據(jù)總線接收從接口設備返回的數(shù)據(jù)。較佳的,在上電復位后,對PCI e從接口的驅動程序中的GPIO控制模塊進行初始化操作步驟包括將高阻寄存器中定義為數(shù)據(jù)總線的GPIO引腳置為高阻狀態(tài);將自身緩存狀態(tài)輸出引腳設置為輸出狀態(tài),引腳電平設置為低,表示自身緩存為空;將對方讀信號輸入引腳和對方緩存狀態(tài)輸入引腳設置為輸入狀態(tài);將自身讀信號輸出引腳設置為輸出狀態(tài),電平設置為低,表示沒有發(fā)起讀操作。較佳的,GPIO控制模塊控制接口轉換芯片的控制總線和數(shù)據(jù)總線將要發(fā)送的數(shù)據(jù)傳遞給從接口設備步驟包括將數(shù)據(jù)的一個字節(jié)或者兩個字節(jié)寫入數(shù)據(jù)總線對應的數(shù)據(jù)寄存器,將數(shù)據(jù)寄存器中的對應數(shù)據(jù)位設置為輸出,將高阻寄存器中的對應數(shù)據(jù)位設置為0,表示撤銷高阻狀態(tài);將自身緩存狀態(tài)引腳電平設置為高,表示有數(shù)據(jù)要發(fā)送;GPIO控制模塊循環(huán)讀取數(shù)據(jù)寄存器中對方讀信號輸入引腳對應數(shù)據(jù)位的值,當發(fā)現(xiàn)該數(shù)據(jù)位由O變?yōu)镮又變回O時,表示對方完成了本次數(shù)據(jù)的讀取;GPIO控制模塊將自身緩存狀態(tài)引腳設置為低,表示無數(shù)據(jù)發(fā)送,將高阻寄存器數(shù)據(jù)總線對應數(shù)據(jù)位置為1,表示將數(shù)據(jù)總線置為高阻狀態(tài);當要發(fā)送的數(shù)據(jù)為多個字節(jié)時,重復上述過程,直到全部數(shù)據(jù)發(fā)送完畢。較佳的,GPIO控制模塊控制接口轉換芯片的控制總線和數(shù)據(jù)總線接收從接口設備返回的數(shù)據(jù)步驟包括GPIO控制模塊循環(huán)讀取數(shù)據(jù)寄存器中對方緩存狀態(tài)輸入引腳對應數(shù)據(jù)位的值,當該位值為I時,表示對方有數(shù)據(jù)返回;將輸入輸出控制寄存器中數(shù)據(jù)總線對應數(shù)據(jù)位設置為輸入,將高阻寄存器中數(shù)據(jù)總線對應數(shù)據(jù)位設置為非高阻狀態(tài);將數(shù)據(jù)寄存器中自身讀信號輸出引腳對應數(shù)據(jù)位寫為1,表示發(fā)起讀操作,將數(shù)據(jù)寄存器中數(shù)據(jù)總線對應數(shù)據(jù)位中的數(shù)據(jù)讀出,寫入驅動程序的接收數(shù)據(jù)的變量中;將數(shù)據(jù)寄存器中自身讀信號輸出引腳對應數(shù)據(jù)位置為0,表示完成讀操作;將高阻寄存器中數(shù)據(jù)總線對應數(shù)據(jù)位設置為高阻;當要接收的數(shù)據(jù)為多個字節(jié)時,重復上述過程,直到全部數(shù)據(jù)接收完畢。在上述實施例中,通過將PCI e的從接口轉為低速并行接口,使得稅控專用硬件設備能夠滿足計算機總線升級的要求。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖I為本發(fā)明一實施例的利用GPIO模擬低速并行接口的方法流程圖。
具體實施例方式下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有付出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。在本發(fā)明的實施例中,選擇PCI e橋芯片XR17V352IB113-F進行設計,該芯片具有PCI e 從接口,具有 16 個 GPI0,分別為 GPIO [O]到 GPIO [15],將 GPIO [O]到 GPIO [3]定義為控制信號引腳,分別為GPI0
定義為自身緩存狀態(tài)輸出引腳,GPI0[1]定義為對方讀信號輸入引腳,GPI0[2]定義為對方緩存狀態(tài)輸入引腳,GPI0[3]定義為自身讀信號輸出引腳。將GPI0[8] IlJ GPIO[15]定義為8位數(shù)據(jù)總線,GPI0[4]到GPI0[7]空閑不用。根據(jù)芯片手冊,橋芯片XR17V352IB113-F中內置的與本方案有關的寄存器特點如下ΜΡΙ0ΙΝΤ [15:0]:中斷輸入開關寄存器,一位對應一個GPI0,某一位值為O表示關閉該位中斷,值為I表示開啟該位中斷。MPI0SEL[15:0]:輸入輸出控制寄存器,一位對應一個GPI0,某一位值為I表示輸入,值為O表不輸出。MPI03T[15:0]:三態(tài)控制寄存器,一位對應一個GPI0,某一位值為0表示依據(jù)ΜΡΙ0ΒΙΤ寄存器的值決定輸出狀態(tài),值為I表示設置輸出引腳為三態(tài)斷開狀態(tài)。MPI0LVL[15:0]:電平控制寄存器,也稱為數(shù)據(jù)寄存器,一位對應一個GPI0,控制引腳的輸出電平狀態(tài),或者是提供引腳的輸入電平狀態(tài)。圖I為本發(fā)明一實施例的利用GPIO模擬低速并行接口的方法流程圖。如圖I所示,該方法包括以下步驟S102,將接口轉換芯片的GPIO引腳分為數(shù)據(jù)引腳和控制引腳,將數(shù)據(jù)引腳定義為低速并行接口的數(shù)據(jù)總線,將控制引腳定義為低速并行接口的控制總線;S104,通過PCI e從接口的驅動程序中的GPIO控制模塊對接口轉換芯片內部的GPIO數(shù)據(jù)寄存器和輸入輸出控制寄存器進行控制,使得數(shù)據(jù)總線和控制總線處于低速并行接口的工作運行狀態(tài)。例如,數(shù)據(jù)引腳定義為8的倍數(shù),如可以為8位或16位。例如,控制總線包括4個控制信號引腳,分別為自身緩存狀態(tài)輸出引腳、對方讀信號輸入引腳、對方緩存狀態(tài)輸入引腳、自身讀信號輸出引腳。例如,通過PCI e從接口的驅動程序中的GPIO控制模塊對接口轉換芯片內部的 GPIO數(shù)據(jù)寄存器和輸入輸出控制寄存器進行控制,使得數(shù)據(jù)總線和控制總線處于一種低速并行接口的工作運行狀態(tài)步驟包括在上電復位后,對PCI e從接口的驅動程序中的GPIO控制模塊進行初始化操作;當應用程序有數(shù)據(jù)要發(fā)送給PCI e的從接口設備時,應用程序將要發(fā)送的數(shù)據(jù)傳遞驅動程序,驅動程序再把要發(fā)送的數(shù)據(jù)傳遞給GPIO控制模塊,GPIO控制模塊控制接口轉換芯片的控制總線和數(shù)據(jù)總線將要發(fā)送的數(shù)據(jù)傳遞給從接口設備;GPIO控制模塊控制接口轉換芯片的控制總線和數(shù)據(jù)總線接收從接口設備返回的數(shù)據(jù)。例如,在上電復位后,對PCI e從接口的驅動程序中的GPIO控制模塊進行初始化操作步驟包括將高阻寄存器中定義為數(shù)據(jù)總線的GPIO引腳都置為1,表示將這些引腳置為高阻狀態(tài);將自身緩存狀態(tài)輸出引腳設置為輸出狀態(tài),引腳電平設置為低,表示自身緩存為空;將對方讀信號輸入引腳和對方緩存狀態(tài)輸入引腳設置為輸入狀態(tài);將自身讀信號輸出引腳設置為輸出狀態(tài),電平設置為低,表示沒有發(fā)起讀操作。例如,GPIO控制模塊控制接口轉換芯片的控制總線和數(shù)據(jù)總線將要發(fā)送的數(shù)據(jù)傳遞給從接口設備步驟包括將數(shù)據(jù)的一個字節(jié)(8位)或者兩個字節(jié)(16位)寫入數(shù)據(jù)總線對應的數(shù)據(jù)寄存器,將數(shù)據(jù)寄存器中的對應數(shù)據(jù)位設置為輸出,將高阻寄存器中的對應數(shù)據(jù)位設置為0,表示撤銷高阻狀態(tài);將自身緩存狀態(tài)引腳電平設置為高,表示有數(shù)據(jù)要發(fā)送;GPIO控制模塊循環(huán)讀取數(shù)據(jù)寄存器中對方讀信號輸入引腳對應數(shù)據(jù)位的值,當發(fā)現(xiàn)該數(shù)據(jù)位由O變?yōu)镮又變回O時,表示對方完成了本次數(shù)據(jù)的讀?。籊PIO控制模塊將自身緩存狀態(tài)引腳設置為低,表示無數(shù)據(jù)發(fā)送,將高阻寄存器數(shù)據(jù)總線對應數(shù)據(jù)位置為1,表示將數(shù)據(jù)總線置為高阻狀態(tài);當要發(fā)送的數(shù)據(jù)為多個字節(jié)時,重復上述過程,直到全部數(shù)據(jù)發(fā)送完畢。例如,GPIO控制模塊控制接口轉換芯片的控制總線和數(shù)據(jù)總線接收從接口設備返回的數(shù)據(jù)步驟包括
GPIO控制模塊循環(huán)讀取數(shù)據(jù)寄存器中對方緩存狀態(tài)輸入引腳對應數(shù)據(jù)位的值,當該數(shù)據(jù)位值為I時,表示對方有數(shù)據(jù)返回;將輸入輸出控制寄存器中數(shù)據(jù)總線對應數(shù)據(jù)位設置為輸入,將高阻寄存器中數(shù)據(jù)總線對應數(shù)據(jù)位設置為非高阻狀態(tài);將數(shù)據(jù)寄存器中自身讀信號輸出引腳對應數(shù)據(jù)位寫為1,表示發(fā)起讀操作,將數(shù)據(jù)寄存器中數(shù)據(jù)總線對應數(shù)據(jù)位中的數(shù)據(jù)讀出,寫入驅動程序的接收數(shù)據(jù)的變量中;將數(shù)據(jù)寄存器中自身讀信號輸出引腳對應數(shù)據(jù)位置為0,表示完成讀操作;將高阻寄存器中數(shù)據(jù)總線對應數(shù)據(jù)位設置為高阻;當要接收的數(shù)據(jù)為多個字節(jié)時,重復上述過程,直到全部數(shù)據(jù)接收完畢。需要說明的是,上述實施例中,關于控制信號的高低電平定義是為了說明控制區(qū) 另IJ,當電平反過來定義,也能達到同樣的效果。本領域普通技術人員可以理解附圖只是一個實施例的示意圖,附圖中的模塊或流程并不一定是實施本發(fā)明所必須的。本領域普通技術人員可以理解實施例中的裝置中的模塊可以按照實施例描述分布于實施例的裝置中,也可以進行相應變化位于不同于本實施例的一個或多個裝置中。上述實施例的模塊可以合并為一個模塊,也可以進一步拆分成多個子模塊。本領域普通技術人員可以理解實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關的硬件來完成,前述的程序可以存儲于一計算機可讀取存儲介質中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質包括R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質。最后應說明的是以上實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解其依然可以對前述實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發(fā)明實施例技術方案的精神和范圍。
權利要求
1.一種利用GPIO模擬低速并行接口的方法,其特征在于,包括以下步驟 將接口轉換芯片的GPIO引腳分為數(shù)據(jù)引腳和控制引腳,將所述數(shù)據(jù)引腳定義為低速并行接口的數(shù)據(jù)總線,將所述控制引腳定義為低速并行接口的控制總線; 通過PCI e從接口的驅動程序中的GPIO控制模塊對接口轉換芯片內部的GPIO數(shù)據(jù)寄存器和輸入輸出控制寄存器進行控制,使得所述數(shù)據(jù)總線和所述控制總線處于低速并行接口的工作運行狀態(tài)。
2.根據(jù)權利要求I所述的方法,其特征在于,所述數(shù)據(jù)引腳定義為8的倍數(shù)。
3.根據(jù)權利要求I所述的方法,其特征在于,所述控制總線包括4個控制信號引腳,分別為自身緩存狀態(tài)輸出引腳、對方讀信號輸入引腳、對方緩存狀態(tài)輸入引腳、自身讀信號輸出引腳。
4.根據(jù)權利要求3所述的方法,其特征在于,通過PCIe從接口的驅動程序中的GPIO控制模塊對接口轉換芯片內部的GPIO數(shù)據(jù)寄存器和輸入輸出控制寄存器進行控制,使得所述數(shù)據(jù)總線和所述控制總線處于一種低速并行接口的工作運行狀態(tài)步驟包括 在上電復位后,對PCI e從接口的驅動程序中的GPIO控制模塊進行初始化操作;當應用程序有數(shù)據(jù)要發(fā)送給PCI e的從接口設備時,應用程序將要發(fā)送的數(shù)據(jù)傳遞所述驅動程序,所述驅動程序再把要發(fā)送的數(shù)據(jù)傳遞給所述GPIO控制模塊,所述GPIO控制模塊控制所述接口轉換芯片的控制總線和數(shù)據(jù)總線將要發(fā)送的數(shù)據(jù)傳遞給從接口設備; GPIO控制模塊控制所述接口轉換芯片的控制總線和數(shù)據(jù)總線接收所述從接口設備返回的數(shù)據(jù)。
5.根據(jù)權利要求4所述的方法,其特征在于,在上電復位后,對PCIe從接口的驅動程序中的GPIO控制模塊進行初始化操作步驟包括 將高阻寄存器中定義為數(shù)據(jù)總線的GPIO引腳置為高阻狀態(tài); 將自身緩存狀態(tài)輸出引腳設置為輸出狀態(tài),引腳電平設置為低,表示自身緩存為空; 將對方讀信號輸入引腳和對方緩存狀態(tài)輸入引腳設置為輸入狀態(tài); 將自身讀信號輸出引腳設置為輸出狀態(tài),電平設置為低,表示沒有發(fā)起讀操作。
6.根據(jù)權利要求4所述的方法,其特征在于,所述GPIO控制模塊控制所述接口轉換芯片的控制總線和數(shù)據(jù)總線將要發(fā)送的數(shù)據(jù)傳遞給從接口設備步驟包括 將數(shù)據(jù)的一個字節(jié)或者兩個字節(jié)寫入所述數(shù)據(jù)總線對應的數(shù)據(jù)寄存器,將所述數(shù)據(jù)寄存器中的對應數(shù)據(jù)位設置為輸出,將高阻寄存器中的對應數(shù)據(jù)位設置為0,表示撤銷高阻狀態(tài); 將自身緩存狀態(tài)引腳電平設置為高,表示有數(shù)據(jù)要發(fā)送; 所述GPIO控制模塊循環(huán)讀取所述數(shù)據(jù)寄存器中對方讀信號輸入引腳對應數(shù)據(jù)位的值,當發(fā)現(xiàn)該數(shù)據(jù)位由O變?yōu)镮又變回O時,表示對方完成了本次數(shù)據(jù)的讀取; 所述GPIO控制模塊將自身緩存狀態(tài)引腳設置為低,表示無數(shù)據(jù)發(fā)送,將高阻寄存器數(shù)據(jù)總線對應數(shù)據(jù)位置為1,表示將所述數(shù)據(jù)總線置為高阻狀態(tài); 當要發(fā)送的數(shù)據(jù)為多個字節(jié)時,重復上述過程,直到全部數(shù)據(jù)發(fā)送完畢。
7.根據(jù)權利要求4所述的方法,其特征在于,GPIO控制模塊控制所述接口轉換芯片的控制總線和數(shù)據(jù)總線接收所述從接口設備返回的數(shù)據(jù)步驟包括 GPIO控制模塊循環(huán)讀取數(shù)據(jù)寄存器中對方緩存狀態(tài)輸入引腳對應數(shù)據(jù)位的值,當該位值為I時,表示對方有數(shù)據(jù)返回; 將輸入輸出控制寄存器中數(shù)據(jù)總線對應數(shù)據(jù)位設置為輸入,將高阻寄存器中數(shù)據(jù)總線對應數(shù)據(jù)位設置為非高阻狀態(tài); 將數(shù)據(jù)寄存器中自身讀信號輸出引腳對應數(shù)據(jù)位寫為1,表示發(fā)起讀操作,將數(shù)據(jù)寄存器中數(shù)據(jù)總線對應數(shù)據(jù)位中的數(shù)據(jù)讀出,寫入驅動程序的接收數(shù)據(jù)的變量中; 將數(shù)據(jù)寄存器中自身讀信號輸出引腳對應數(shù)據(jù)位置為O,表示完成讀操作; 將高阻寄存器中數(shù)據(jù)總線對應數(shù)據(jù)位設置為高阻; 當要接收的數(shù)據(jù)為多個字節(jié)時,重復上述過程,直到全部數(shù)據(jù)接收完畢。
全文摘要
本發(fā)明公開了一種利用GPIO模擬低速并行接口的方法,其包括以下步驟將接口轉換芯片的GPIO引腳分為數(shù)據(jù)引腳和控制引腳,將數(shù)據(jù)引腳定義為低速并行接口的數(shù)據(jù)總線,將控制引腳定義為低速并行接口的控制總線;通過PCI e從接口的驅動程序中的GPIO控制模塊對接口轉換芯片內部的GPIO數(shù)據(jù)寄存器和輸入輸出控制寄存器進行控制,使得數(shù)據(jù)總線和控制總線處于一種低速并行接口的工作運行狀態(tài)。
文檔編號G06F13/38GK102880574SQ20111019333
公開日2013年1月16日 申請日期2011年7月11日 優(yōu)先權日2011年7月11日
發(fā)明者甘景全, 崔志民, 宋曉林, 賀毅, 王招凱, 洪巖 申請人:航天信息股份有限公司