專利名稱:直接存儲器存取裝置及其數(shù)據(jù)接收方法
技術(shù)領(lǐng)域:
本發(fā)明涉及直接存儲器存取方式,尤其是涉及ー種直接存儲器存取裝置及其數(shù)據(jù)接收方法。
背景技術(shù):
直接存儲器存取(Direct Memory Access ;以下簡稱DMA)為本領(lǐng)域?qū)I(yè)技術(shù)人員所熟知的一種數(shù)據(jù)傳輸模式,可用于從ー個裝置通過外圍裝置將數(shù)據(jù)傳輸至另ー裝置。與通過CPU來傳輸數(shù)據(jù)的方法相比,利用DMA傳輸方法進(jìn)行數(shù)據(jù)傳輸時,其速度要快許多。在手機(jī)、PDA等手持電子設(shè)備中,UART串ロ是調(diào)試中很重要的調(diào)試通訊接ロ。采用直接存儲器存取方式進(jìn)行串ロ傳輸時,接收比較復(fù)雜,因為接收是被動的,所以無法確定接 收方接收數(shù)據(jù)的長度。鑒于這種情況,目前主要采取的接收方法有以下兩種查詢模式提前啟動直接存儲器采用循環(huán)模式接收數(shù)據(jù),啟動定時器定時,以周期性地查詢接收數(shù)據(jù),接收數(shù)據(jù)長度是通過比較直接存儲器當(dāng)前地址與直接存儲器起始地址比較獲得。中斷模式通過串口中斷檢測接收開始點,當(dāng)檢測到接收開始后禁止串口中斷,啟動直接存儲器采用循環(huán)模式接收數(shù)據(jù),啟動定時器定時,以周期性地查詢接收數(shù)據(jù),接收數(shù)據(jù)長度是通過比較直接存儲器當(dāng)前地址與直接存儲器起始地址獲得。當(dāng)定時器查詢到接收數(shù)據(jù)長度為零吋,則認(rèn)為串ロ空閑,停止直接存儲器接收,停止定時器查詢,重新使能串ロ中斷來檢測接收開始點。上面兩種方法都通過直接存儲器循環(huán)接收模式和定時器查詢來解決無法確定接收方接收數(shù)據(jù)的長度的問題。對查詢模式而言,由于在接受開始前提前啟動定時器,因此在串ロ空閑時也會定時查詢,導(dǎo)致增加系統(tǒng)開銷。對中斷模式而言,從檢測到接收開始到啟動直接存儲器接收數(shù)據(jù)需要一定的時間,而如果串ロ傳輸速率比較高,硬件FIFO (先進(jìn)先出的數(shù)據(jù)緩存器)比較小,就存在FIFO溢出的可能,因此存在丟失數(shù)據(jù)的風(fēng)險。受硬件限制,當(dāng)采用查詢模式提前啟動直接存儲器接收數(shù)據(jù)時,就無法通過串ロ中斷檢測接收開始,所以無法結(jié)合查詢模式和中斷模式的優(yōu)點。
發(fā)明內(nèi)容
本發(fā)明的ー個目的是提供ー種直接存儲器存取裝置的數(shù)據(jù)接收方法,一解決現(xiàn)有接收方法存在的問題。本發(fā)明的另一目的是提供ー種直接存儲器存取裝置,其使用上述的數(shù)據(jù)接收方法。本發(fā)明提出ー種直接存儲器存取裝置的數(shù)據(jù)接收方法,包括以下步驟首先,啟動直接存儲器循環(huán)接收數(shù)據(jù),其次使能一 GPIO中斷ロ,該GPIO中斷ロ用于檢測接收開始點。當(dāng)檢測到接收開始后禁止該GPIO中斷ロ,并且周期性地查詢接收數(shù)據(jù)。
在本發(fā)明的一實施例中,上述方法還包括比較直接存儲器當(dāng)前地址與直接存儲器起始地址,獲得接收數(shù)據(jù)長度。在本發(fā)明的一實施例中,上述方法還包括當(dāng)獲得的接收數(shù)據(jù)長度為零時,停止周期性查詢,重新使能該GPIO中斷ロ。在本發(fā)明的一實施例中,上述方法該GPIO中斷ロ的引腳是與ー串ロ的Rx引腳相連。在本發(fā)明的一實施例中,上述方法該GPIO中斷ロ的引腳是與ー串ロ的Rx引腳 復(fù)用。本發(fā)明另ー種直接存儲器存取裝置,包括傳輸端ロ、GPIO単元、直接存儲器単元、定時器和處理器。傳輸端ロ具有一接收弓I腳,GPIO單元具有一 GPIO引腳,該GPIO弓I腳與該接收引腳相連,以根據(jù)接收引腳的電平變化產(chǎn)生指示該傳輸單元的接收開始點的中斷。直接存儲器單元連接該傳輸端ロ。處理器連接該GPIO単元、該直接存儲器単元和該定時器,該處理器啟動該直接存儲器単元循環(huán)接收數(shù)據(jù),并且不早于該直接存儲器単元的啟動而使能該GPIO單元的中斷。當(dāng)檢測接收開始后,該處理器禁止該GPIO中斷ロ,啟動該定時器,利用該定時器產(chǎn)生的中斷,周期性地查詢接收數(shù)據(jù)。在本發(fā)明的一實施例中,所述傳輸端ロ為串ロ。在本發(fā)明的一實施例中,所述串ロ単元具有先進(jìn)先出緩存。本發(fā)明還提出ー種可實現(xiàn)直接存儲器存取的芯片,包括傳輸端ロ、GPIO単元、直接存儲器單元、定時器和處理器。傳輸端ロ具有一接收引腳,GPIO單元具有一 GPIO引腳,該GPIO引腳與該接收引腳復(fù)用,以根據(jù)接收引腳的電平變化產(chǎn)生指示該傳輸端ロ的接收開始點的中斷。直接存儲器單元連接該傳輸端ロ。處理器連接該GPIO単元、該直接存儲器単元和該定時器,該處理器啟動該直接存儲器單元循環(huán)接收數(shù)據(jù),并且不早于該直接存儲器單元的啟動而使能該GPIO單元的中斷。當(dāng)檢測接收開始后,該處理器禁止該GPIO中斷ロ,啟動該定時器,利用該定時器產(chǎn)生的中斷周期性地查詢接收數(shù)據(jù)。本發(fā)明由于采用以上技術(shù)方案,使之與現(xiàn)有的查詢模式相比,可在檢測到接收開始后再啟動定時器查詢接收數(shù)據(jù),從而節(jié)省系統(tǒng)開銷;而與現(xiàn)有中斷模式相比,可在接收開始前就啟動直接存儲器接收數(shù)據(jù),避免了丟失部分?jǐn)?shù)據(jù)的風(fēng)險。
為讓本發(fā)明的上述目的、特征和優(yōu)點能更明顯易懂,以下結(jié)合附圖對本發(fā)明的具體實施方式
作詳細(xì)說明,其中圖I示出本發(fā)明ー實施例的直接存儲器存取裝置示意圖。圖2示出本發(fā)明ー實施例的直接存儲器存取裝置的數(shù)據(jù)接收方法流程圖。
具體實施例方式在多數(shù)處理器芯片中,都會包含GPIO接ロ(General-Purpose IO ports,通用輸入輸出接ロ)。因此根據(jù)本發(fā)明的構(gòu)思,使用GPIO接ロ作為中斷ロ,來監(jiān)控直接存儲器存取裝置的接收管腳,以檢測接收何時開始。ー處理器可提前啟動直接存儲器接收數(shù)據(jù)。當(dāng)檢測到接收開始點,GPIO中斷ロ以中斷方式通知處理器。響應(yīng)這一中斷,處理器啟動定時器,利用定時器的周期定時來周期性地查詢接收數(shù)據(jù)。這樣,由于直接存儲器是在接收開始點前啟動,不會丟失數(shù)據(jù),而定時器是在接收開始點后啟動,不會有增加系統(tǒng)開銷。圖I示出本發(fā)明一實施例的直接存儲器存取裝置示意圖。參照圖I所示,裝置包括處理器102、直接存儲器單元104、存儲器接口 106、串口 108、GPIO單元110和定時器112。處理器102作為裝置的核心,可執(zhí)行從存儲器200的數(shù)據(jù)讀取,以及到存儲器200的數(shù)據(jù)寫入。當(dāng)啟用直接存儲器存取(DMA)過程時,處理器102不進(jìn)行數(shù)據(jù)的讀取和寫入,而是參與數(shù)據(jù)從串口 108經(jīng)直接存儲器單元104到存儲器200的寫入過程,以及數(shù)據(jù)從存儲器200經(jīng)直接存儲器單元104到串口 108的讀取過程。在DMA過程的接收流程中,直接存儲器單元104作為循環(huán)接收緩存,從串口 108獲得數(shù)據(jù)并寫入存儲器200。在此,循環(huán)接收緩存的大小設(shè)置,必須保證一個查詢周期中,循環(huán)接收緩存不會產(chǎn)生回環(huán)覆蓋。假設(shè)串口傳輸速率為V,循環(huán)接收緩存大小S和查詢周期P參考公式如下S ≥(V*P*1. 5)存儲器接口 106作為處理器102和直接存儲器單元104訪問存儲器200的接口。串口 108作為直接存儲器存取裝置與外部設(shè)備進(jìn)行數(shù)據(jù)傳輸?shù)慕涌?。串?108包含先進(jìn)先出緩存(FIFO) 109,以緩沖傳輸?shù)臄?shù)據(jù)。串口 108可包含發(fā)送管腳Tx和接收管腳Rx。定時器112連接處理器102,用來提供計時。GPIO單元110具有至少一 GPIO管腳。在此,該GPIO管腳連接到串口 108的Rx管腳,用來檢測Rx管腳的電平變化。當(dāng)電平發(fā)生變化時,GPIO單元110可向處理器102發(fā)出中斷,以告知串口 108的接收開始點到來。在本發(fā)明的實施例中,直接存儲器存取裝置可適用于任意包含串口和直接存儲器單元的設(shè)備,例如手機(jī)、個人計算機(jī)等。在圖I所示的示例中,處理器102、直接存儲器單元104、存儲器接口 106、串口 108、GPIO單元110和定時器112被整合到一芯片中,以作為手機(jī)的主芯片100。在本發(fā)明的一實施例中,在放置主芯片100的電路板上,可使用導(dǎo)線或者其他手段將GPIO管腳和Rx管腳相連,以實現(xiàn)GPIO單元110對串口 108的接收開始點的檢測。在本發(fā)明的另一實施例中,可對主芯片100內(nèi)部的設(shè)計進(jìn)行局部修改,使Rx管腳和GPIO管腳復(fù)用,以實現(xiàn)GPIO單元110對串口 108的接收開始點的檢測。圖2示出本發(fā)明一實施例的直接存儲器存取裝置的數(shù)據(jù)接收方法流程圖。參照圖2所示,接收方法包括以下步驟首先在步驟SI,啟動直接存儲器單元104,以循環(huán)接收數(shù)據(jù)。在步驟SI的同時或者之后,在步驟S2,使能由GPIO單元110構(gòu)成的GPIO中斷口,利用該GPIO中斷口檢測串口 108的接收開始點。使步驟S2不早于步驟SI的好處是,可以提前接收數(shù)據(jù),以免因串口 108的FIFO溢出而丟失部分?jǐn)?shù)據(jù)。在步驟S3,處理器102會檢測GPIO中斷以確定接收開始點,當(dāng)檢測到GPIO中斷時,進(jìn)入步驟S4。在步驟S4,處理器102禁止GPIO中斷,并且啟動定時器周期性定時。從而,處理器102可以周期性地查詢接收數(shù)據(jù)。在步驟S5,定時器定時時間到,產(chǎn)生中斷給處理器102。在步驟S6,處理器102查詢接收數(shù)據(jù),通過比較直接存儲器單元104的當(dāng)前地址與直接存儲器單元的起始地址來獲得接收數(shù)據(jù)長度。
在步驟S7,當(dāng)查詢到接收數(shù)據(jù)長度為零時,則認(rèn)為串口 108空閑,進(jìn)入步驟S8,停止定時器,返回步驟S2。如果接收數(shù)據(jù)長度不為零,返回步驟S5,繼續(xù)周期性查詢。在這一實施例中,直接存儲器一直處于接收狀態(tài),所以可以避免定時器和GPIO中斷切換過程中串口 108的FIFO溢出的問題,這樣可以有效地解決查詢模式和中斷模式的缺點。此外,利用串口的Rx管腳的電平變化來檢測接收開始點,可以減少處理器的開銷。雖然本發(fā)明已以較佳實施例揭示如上,然其并非用以限定本發(fā)明,任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可作些許的修改和完善,因此本發(fā)明的保護(hù)范 圍當(dāng)以權(quán)利要求書所界定的為準(zhǔn)。
權(quán)利要求
1.ー種直接存儲器存取裝置的數(shù)據(jù)接收方法,包括以下步驟 啟動直接存儲器循環(huán)接收數(shù)據(jù); 使能一 GPIO中斷ロ,該GPIO中斷ロ用于檢測接收開始點; 當(dāng)檢測到接收開始后禁止該GPIO中斷ロ,并且周期性地查詢接收數(shù)據(jù)。
2.如權(quán)利要求I所述的方法,其特征在于,還包括比較直接存儲器當(dāng)前地址與直接存儲器起始地址,獲得接收數(shù)據(jù)長度。
3.如權(quán)利要求2所述的方法,其特征在干,還包括當(dāng)獲得的接收數(shù)據(jù)長度為零吋,停止周期性查詢,重新使能該GPIO中斷ロ。
4.如權(quán)利要求I所述的方法,其特征在于,該GPIO中斷ロ的引腳是與ー串ロ的Rx引腳相連。
5.如權(quán)利要求I所述的方法,其特征在于,該GPIO中斷ロ的引腳是與ー串ロ的Rx引腳復(fù)用。
6.ー種直接存儲器存取裝置,包括 傳輸端ロ,具有一接收引腳; GPIO單元,具有一 GPIO引腳,該GPIO引腳與該接收引腳相連,以根據(jù)接收引腳的電平變化產(chǎn)生指示該傳輸単元的接收開始點的中斷; 直接存儲器単元,連接該傳輸端ロ ; 定時器; 處理器,連接該GPIO単元、該直接存儲器単元和該定時器,該處理器啟動該直接存儲器単元循環(huán)接收數(shù)據(jù),并且不早于該直接存儲器単元的啟動而使能該GPIO単元的中斷;當(dāng)檢測接收開始后,該處理器禁止該GPIO中斷ロ,啟動該定時器,利用該定時器產(chǎn)生的中斷,周期性地查詢接收數(shù)據(jù)。
7.如權(quán)利要求6所述的直接存儲器存取裝置,其特征在于,所述傳輸端ロ為串ロ。
8.如權(quán)利要求7所述的直接存儲器存取裝置,其特征在于,所述串ロ単元具有先進(jìn)先出緩存。
9.ー種可實現(xiàn)直接存儲器存取的芯片,包括 傳輸端ロ,具有一接收引腳; GPIO単元,具有一 GPIO引腳,該GPIO引腳與該接收引腳復(fù)用,以根據(jù)接收引腳的電平變化產(chǎn)生指示該傳輸端ロ的接收開始點的中斷; 直接存儲器単元,連接該傳輸端ロ ; 定時器; 處理器,連接該GPIO単元、該直接存儲器単元和該定時器,該處理器啟動該直接存儲器単元循環(huán)接收數(shù)據(jù),并且不早于該直接存儲器単元的啟動而使能該GPIO単元的中斷;當(dāng)檢測接收開始后,該處理器禁止該GPIO中斷ロ,啟動該定時器,利用該定時器產(chǎn)生的中斷周期性地查詢接收數(shù)據(jù)。
全文摘要
本發(fā)明涉及一種直接存儲器存取裝置及其數(shù)據(jù)接收方法,以克服傳統(tǒng)基于查詢模式和中斷模式的接收方法的缺陷。該數(shù)據(jù)接收方法包括以下步驟首先,啟動直接存儲器循環(huán)接收數(shù)據(jù),其次使能一GPIO中斷口,該GPIO中斷口用于檢測接收開始點。當(dāng)檢測到接收開始后禁止該GPIO中斷口,并且周期性地查詢接收數(shù)據(jù)。本發(fā)明可在檢測到接收開始后再啟動定時器查詢接收數(shù)據(jù),從而節(jié)省系統(tǒng)開銷,并且可在接收開始前就啟動直接存儲器接收數(shù)據(jù),避免了丟失部分?jǐn)?shù)據(jù)的風(fēng)險。
文檔編號G06F13/32GK102681953SQ20111006257
公開日2012年9月19日 申請日期2011年3月15日 優(yōu)先權(quán)日2011年3月15日
發(fā)明者鄒橋, 高兵 申請人:聯(lián)芯科技有限公司