專利名稱:數(shù)字信號處理器中發(fā)送和接收異步串行數(shù)據(jù)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及串行數(shù)據(jù)通信方法,特別涉及使用數(shù)字信號處理器(DSP)的串行端口用來異步發(fā)送和接收數(shù)據(jù)的方法。
TMS320C30 DSP(由德克薩斯儀器公司制造的數(shù)字信號處理器)是現(xiàn)已廣泛用于伺服控制器中及圖象處理的專用數(shù)字處理器。一般的數(shù)字信號處理器具有串行端口或并行端口以便向另一處理器發(fā)送數(shù)據(jù)并從其接收數(shù)據(jù)。TMS320C30 DSP具有異步串行通信端口,并與另一TMS320C30 DSP通過串行通信端口高速進(jìn)行異步串行通信。
一般來說,如果DSP串行端口能夠連接到諸如個人計算機(PC)或筆記本計算機這樣的通用系統(tǒng),則使用起來非常方便。例如,例如在PC上編碼的程序可以下載到DSP,或者在DSP系統(tǒng)工作期間DSP的數(shù)據(jù)可通過PC連續(xù)被登錄。如果使用DSP的伺服系統(tǒng)的控制器的輸出值被登錄并然后由PC進(jìn)行分析,則易于實現(xiàn)一種優(yōu)化的控制器。而且,筆記本計算機能夠向DSP系統(tǒng)發(fā)出操作命令,使得DSP系統(tǒng)能夠作出特定的操作,由此能夠進(jìn)行簡單的仿真。這就是說,如果DSP串行端口能夠連接到通用系統(tǒng)上,則不論工作場所和設(shè)備如何而能夠?qū)ν獠肯到y(tǒng)進(jìn)行檢測。
然而,在使用DSP的串行端口的串行通信方法中DSP不能與諸如PC或筆記本PC的通用計算機系統(tǒng)進(jìn)行數(shù)據(jù)通信。因而,需要一種特別的異步通信方法以實現(xiàn)與通用計算機系統(tǒng)的串行通信。然而,由于異步數(shù)據(jù)是以非實際數(shù)據(jù)部分的起動位開始的這一事實,異步通信需要某些硬件和軟件。這就是說,數(shù)據(jù)接收的起動是使用起動位被識別的,并根據(jù)
圖1B所示接收定時器計數(shù)器寄存器讀取后繼的位。類似地,在發(fā)送數(shù)據(jù)時,也是使用發(fā)送定時器計數(shù)器寄存器逐一發(fā)送位。
然而,通過通信實驗我們能夠發(fā)現(xiàn),不論是否進(jìn)行串行通信,TMS320C30 DSP中的發(fā)送/接收定時器計數(shù)器都與處理器的時鐘脈沖同步地進(jìn)行連續(xù)計數(shù)操作。于是,發(fā)送/接收定時器計數(shù)器的值在起動位被發(fā)送或接收的時間點不一致,這將引起在冗長通信期間的通信故障。
本發(fā)明的目的是要提供一種使用DSP的串行端口用于發(fā)送和接收數(shù)據(jù)的方法,由此,當(dāng)接收通過串行端口發(fā)送的異步數(shù)據(jù)時,能夠通過復(fù)位接收定時器計數(shù)器的數(shù)值為預(yù)定數(shù)值而防止每當(dāng)接收起動位時的通信差錯,以便在每一數(shù)據(jù)信號位脈沖段的中間點讀取數(shù)據(jù),并在數(shù)據(jù)發(fā)送期間通過在起動位的發(fā)送開始點復(fù)位發(fā)送定時器計數(shù)器為零而調(diào)節(jié)并發(fā)送發(fā)送信號的每一位的脈沖段。
為了實現(xiàn)以上目的,本發(fā)明提供了一種通過TMS320C30 DSP的串行端口異步接收串行數(shù)據(jù)的方法,該TMS320C30 DSP包括用于存儲脈沖段信息的接收定時器周期寄存器,該信息表示當(dāng)發(fā)送的串行數(shù)據(jù)的1位時間段表示為由多個時鐘脈沖組成的脈沖段時多少時鐘脈沖對應(yīng)串行數(shù)據(jù)的一位;以及用于對時鐘脈沖計數(shù)到由接收定時器周期寄存器確定的數(shù)值、復(fù)位計數(shù)的數(shù)值為零、并從零開始重新計數(shù)的接收定時器計數(shù)器,上述方法包括以下步驟確定起動位是否被接收;當(dāng)接收的起動位從高向低降落時起動串行端口;當(dāng)串行端口被起動時設(shè)置接收定時器計數(shù)器的初始值為接收脈沖段寄存器中一半的數(shù)值;每當(dāng)接收定時器計數(shù)器的數(shù)值變?yōu)榈扔诮邮斩〞r器周期中寄存器的數(shù)值時接收一位數(shù)據(jù),直到接收到停止信號為止;以及當(dāng)接收到停止位時禁止串行端口。
為了實現(xiàn)以上目的,本發(fā)明還提供了一種通過TMS320C30 DSP中的串行端口異步發(fā)送串行數(shù)據(jù)的方法,該TMS320C30 DSP包括用于存儲脈沖段信息的發(fā)送定時器周期寄存器,該信息表示當(dāng)發(fā)送的串行數(shù)據(jù)的1位時間段表示為由多個時鐘脈沖組成的脈沖段時多少時鐘脈沖對應(yīng)串行數(shù)據(jù)的一位;以及用于對時鐘脈沖計數(shù)到由發(fā)送定時器周期寄存器確定的數(shù)值、復(fù)位計數(shù)的數(shù)值為零、并從零開始重新計數(shù)的發(fā)送定時器計數(shù)器,上述方法包括以下步驟通過向待發(fā)送的數(shù)據(jù)部分的開始和末尾添加起動和停止位形成異步數(shù)據(jù)而產(chǎn)生發(fā)送數(shù)據(jù);在發(fā)送起動位時的時間點初始化發(fā)送定時器計數(shù)器為零;每當(dāng)發(fā)送定時器計數(shù)器的數(shù)值變?yōu)榈扔诎l(fā)送定時器周期寄存器中的數(shù)值時發(fā)送一位數(shù)據(jù);以及重復(fù)發(fā)送一位的步驟直到發(fā)送停止位為止。
以下通過參照附圖詳細(xì)說明本發(fā)明的優(yōu)選實施例,本發(fā)明的上述目的和優(yōu)點將更為明顯,這些附圖是
圖1A到1B表示使用TMS320C30 DSP的串行通信端口用于異步數(shù)據(jù)發(fā)送和接收的寄存器;圖2表示根據(jù)本發(fā)明當(dāng)接收串行數(shù)據(jù)時通過復(fù)位接收定時器計數(shù)器為預(yù)定數(shù)值,能夠在脈沖的中間部分穩(wěn)定地接收數(shù)據(jù)的的概念;圖3是簡略表示異步數(shù)據(jù)接收過程的流程圖;圖4表示根據(jù)本發(fā)明在異步數(shù)據(jù)發(fā)送期間復(fù)位發(fā)送定時器計數(shù)器時的時間點;圖5是簡略表示串行數(shù)據(jù)發(fā)送過程的流程圖。
RS232C串行數(shù)據(jù)由一個起動位、八個數(shù)據(jù)位和一個停止位組成??梢蕴砑右粋€附加位用于檢測通信差錯,例如奇偶校驗位。然而,通常RS232C串行數(shù)據(jù)簡單地總共由10位組成。一般的串行通信控制器通過識別起動和停止位接收數(shù)據(jù)。然而,DSP串行通信端口設(shè)計為只要有數(shù)據(jù)輸入就能依靠接收計數(shù)器的數(shù)值簡單地接收數(shù)據(jù)。
這里,起動位不是用戶需要的信息,而是指示數(shù)據(jù)接收起動的位。在異步傳輸中,只有使用起動位識別數(shù)據(jù)的開始,才能接收數(shù)據(jù)。起動位在數(shù)據(jù)流的開始,于是不難找到起動位。
圖1A和1B表示使用TMS320C30的串行通信端口用于異步數(shù)據(jù)發(fā)送和接收的寄存器。圖1A表示存儲脈沖段信息的接收/發(fā)送定時器周期寄存器,當(dāng)串行發(fā)送期間發(fā)送的1個位的數(shù)據(jù)段由多個時鐘脈沖組成的脈沖段表示時,脈沖段信息表示多少個時鐘脈沖對應(yīng)于一個數(shù)據(jù)位。接收/發(fā)送定時器周期寄存器為32位規(guī)格,以便定義串行發(fā)送的1位脈沖段。低16位(位0到15)表示發(fā)送1位脈沖段,而高16位(16位到31)表示接收1位脈沖段。
圖1B示出表示接收/發(fā)送定時器計數(shù)器輸出的接收/發(fā)送定時器計數(shù)器寄存器。該接收/發(fā)送定時器計數(shù)器對時鐘脈沖進(jìn)行計數(shù)直到達(dá)到接收/發(fā)送定時器周期寄存器中設(shè)置的數(shù)值為止,復(fù)位計數(shù)數(shù)值回零,并重新存儲重復(fù)寄存器中的計數(shù)操作的接收/發(fā)送定時器計數(shù)器的輸出數(shù)值。接收/發(fā)送定時器計數(shù)器寄存器為32位的寄存器,其低16位(0位到15位)用于發(fā)送定時器計數(shù)器,而高16位(16位到31位)用于接收定時器計數(shù)器。
首先,將說明使用寄存器用于接收異步串行數(shù)據(jù)的方法。參見圖2,在串行數(shù)據(jù)接收期間通過設(shè)置接收定時器計數(shù)器的初始值在脈沖中間部分而穩(wěn)定地接收數(shù)據(jù)。在起動位從高向低降落時的時間點處設(shè)置接收定時器計數(shù)器的數(shù)值為接收定時器周期寄存器數(shù)值的一半,以便當(dāng)確定其位數(shù)值時讀取表示每一位的脈沖段的中間點。
參見圖3,DSP通過安裝在DSP中的串行端口接收異步串行數(shù)據(jù)。一個普通的DSP識別數(shù)據(jù)是否通過接收寄存器被接收。于是,在接收了數(shù)據(jù)之后,在步驟300該DSP檢測起動位是否被接收,以便得知數(shù)據(jù)是否為異步的。在串行數(shù)據(jù)從高向低降落時檢測起動位的存在或不存在。如果檢測到起動位被接收,則在步驟310起動串行端口。即當(dāng)數(shù)據(jù)流信號連接到DSP的中斷信號線時,當(dāng)檢測到起動位時產(chǎn)生一中斷。然后,通知DSP串行數(shù)據(jù)待接收并起動串行端口。
然后在起動串行端口之后,在步驟320初始化接收定時器計數(shù)器。這是由于不論是否進(jìn)行串行通信,TMS320C30 DSP的計數(shù)器由DSP的時鐘連續(xù)增加。而且,另一個原因要使得位數(shù)值能夠在表示每一數(shù)據(jù)位的脈沖段的中間點被讀取。初始化是這樣完成的。首先,讀取接收/發(fā)送定時器周期寄存器的數(shù)值并存儲在稱為“sett”的臨時變量寄存器中。然后sett被向右移動16位,因為接收的數(shù)據(jù)每位的脈沖段數(shù)值對應(yīng)于接收/發(fā)送定時器周期寄存器的高16位。此后,臨時變量寄存器(sett)以二分除,向左移動16位,并存儲在表示接收定時器計數(shù)器輸出數(shù)值的寄存器中。執(zhí)行以上步驟的原因在于,如果接收定時器計數(shù)器數(shù)值設(shè)置為當(dāng)起動位開始被接收時的時間點處每接收的數(shù)據(jù)位脈沖段的一半,則計數(shù)操作以該數(shù)值開始,使得能夠精確讀取表示一位的脈沖段的中間點。在此期間,在步驟320完成了接收定時器計數(shù)器的初始化之后,在步驟330計數(shù)器保持與DSP時鐘脈沖的同步計數(shù)。然后,在步驟340確定計數(shù)器的增加值是否等于接收定時器寄存器中定義的1個數(shù)據(jù)位的脈沖段的數(shù)值。當(dāng)檢測到增加了的計數(shù)器數(shù)值與1位脈沖段數(shù)值相同時,這一時間對應(yīng)于表示一位的脈沖段一半的時間,于是在步驟350數(shù)據(jù)的一位被接收。接收定時器計數(shù)器再次清零,并在步驟360確定是否收到停止位。重復(fù)步驟330,340,350和360直到收到停止位。當(dāng)通過TMS320C30 DSP的同步串行端口所有八位數(shù)據(jù)已經(jīng)收到并收到停止位時,在步驟370通過產(chǎn)生DSP的接收中斷而禁止串行端口。這樣,就完成了異步串行數(shù)據(jù)接收。
現(xiàn)在,將說明使用寄存器的異步發(fā)送串行數(shù)據(jù)的方法。為了實時發(fā)送數(shù)據(jù),DSP安裝了發(fā)送隊列以存儲待發(fā)送的數(shù)據(jù),并使用實時計數(shù)器中斷監(jiān)視發(fā)送隊列。如果檢測到發(fā)送隊列非空,則起動發(fā)送中斷以抽取并發(fā)送發(fā)送隊列中的數(shù)據(jù)。如果發(fā)送隊列為空,則禁止發(fā)送中斷,從而執(zhí)行中斷握手。
由于實時處理系統(tǒng)形成中斷受控發(fā)送,故必須管理好隊列以便實時地向其它部分發(fā)送數(shù)據(jù)。隊列的基本操作是向頭地址部分寫數(shù)據(jù)以及從尾地址部分讀數(shù)據(jù)。當(dāng)使用實時中斷向隊列發(fā)送數(shù)據(jù)時,發(fā)送中斷發(fā)送隊列中的所有的數(shù)據(jù),并然后通過按發(fā)送的數(shù)據(jù)量調(diào)節(jié)尾地址而重新指定當(dāng)前的尾數(shù)據(jù)。
然而,在操作期間系統(tǒng)增加向隊列輸入數(shù)據(jù)的速率時,可能出現(xiàn)頭地址越過尾地址的現(xiàn)象。這種情形下,由于隊列的破壞而不能正確執(zhí)行數(shù)據(jù)管理,于是將發(fā)送錯誤的數(shù)據(jù)。為了防止這一問題,不能簡單地擴(kuò)大隊列。為了解決這一問題,把預(yù)定大小的隊列分為兩個級。第一級隊列存儲由系統(tǒng)要發(fā)送的數(shù)據(jù)。如果在第一級隊列找到數(shù)據(jù),則數(shù)據(jù)被放入第二級隊列。這時,更新第一隊列的尾指針。于是防止了該隊列在長發(fā)送時間期間溢出。當(dāng)?shù)谝患夑犃凶優(yōu)闈M時(“待命”狀態(tài)),通過讀取存儲器進(jìn)行存儲在隊列中的數(shù)據(jù)的抽取,使得隊列被清空。這樣減少了等待時間。
而且,當(dāng)DSP使用中斷受控串行通信控制器發(fā)送數(shù)據(jù)時,產(chǎn)生大量的中斷。當(dāng)中斷產(chǎn)生時,就向DSP施加了服務(wù)于中斷的很大的負(fù)擔(dān)。而且,在起動和禁止中斷的處理過程中,DSP的操作變得復(fù)雜。于是可能發(fā)生操作失敗。為了解決以上問題,DSP在其中安裝了直接存儲器訪問(DMA)模塊。DMA能夠與串行端口結(jié)合。當(dāng)存儲器的發(fā)送緩存器被定址時,DMA自動地把數(shù)據(jù)片寫入到串行端口。當(dāng)串行端口完成傳輸數(shù)據(jù)時,DMA自動地寫入其它數(shù)據(jù),以減少DSP的負(fù)擔(dān)。
圖4表示當(dāng)根據(jù)本發(fā)明對數(shù)據(jù)進(jìn)行異步發(fā)送時發(fā)送定時器計數(shù)器被清除的時間點,以便使得一位被發(fā)送的脈沖段標(biāo)準(zhǔn)化成為由發(fā)送定時器周期寄存器定義的數(shù)值。
圖5是簡略表示DSP通過串行端口異步發(fā)送串行數(shù)據(jù)的處理過程的流程圖。首先,對于異步通信,起動和停止位添加到存儲在隊列緩存器中的八位數(shù)據(jù)的開始和末尾,由此在步驟500產(chǎn)生發(fā)送數(shù)據(jù)幀。然后,在步驟510初始化發(fā)送定時器計數(shù)器。即,在發(fā)送起動位的時刻把發(fā)送定時器計數(shù)器的數(shù)值復(fù)位為零。在發(fā)送定時器計數(shù)器初始化之后,在步驟520計數(shù)器保持與DSP時鐘脈沖同步計數(shù)。然后在步驟530,確定計數(shù)器的增加值是否等于發(fā)送定時器周期寄存器中定義的1位脈沖段的數(shù)值。在步驟540,當(dāng)兩個數(shù)值相同時,發(fā)送一位。然后在步驟550發(fā)送定時器計數(shù)器重新被復(fù)位為零,并確定是否發(fā)送了停止位。重復(fù)步驟520,530,540和550直到發(fā)送了停止位。由此,完成了通過TMS320C30 DSP的同步串行端口進(jìn)行異步串行數(shù)據(jù)的發(fā)送。
其間,異步串行數(shù)據(jù)發(fā)送和接收方法添加了簡單的硬件,于是它能夠適用于對應(yīng)于異步通信國際標(biāo)準(zhǔn)的RS232C和RS422兩種方法。
根據(jù)如上所述的本發(fā)明,異步數(shù)據(jù)發(fā)送和接收能夠通過TMS320C30 DSP的同步串行端口實現(xiàn)。而且,即使在長時間通信期間也不會發(fā)生故障,從而能夠進(jìn)行十分可靠的異步串行通信。
權(quán)利要求
1.一種通過TMS320C30 DSP的串行端口異步接收串行數(shù)據(jù)的方法,該TMS320C30 DSP包括用于存儲脈沖段信息的接收定時器周期寄存器,該信息表示當(dāng)發(fā)送的串行數(shù)據(jù)的1位時間段表示為由多個時鐘脈沖組成的脈沖段時多少時鐘脈沖對應(yīng)串行數(shù)據(jù)的一位;以及接收定時器計數(shù)器用于對所述時鐘脈沖計數(shù)到由所述接收定時器周期寄存器確定的數(shù)值、復(fù)位計數(shù)的數(shù)值為零、并從零開始重新計數(shù),所述方法包括以下步驟確定起動位是否被接收;當(dāng)所述接收的起動位從高向低降落時起動所述串行端口;當(dāng)所述串行端口被起動時設(shè)置所述接收定時器計數(shù)器的初始值為所述接收脈沖段寄存器中一半的數(shù)值;每當(dāng)所述接收定時器計數(shù)器的數(shù)值變?yōu)榈扔谒鼋邮斩〞r器周期中寄存器的數(shù)值時接收一位數(shù)據(jù),直到接收到停止信號為止;以及當(dāng)接收到所述停止位時禁止所述串行端口。
2.如權(quán)利要求1中所述的異步串行數(shù)據(jù)接收方法,其中當(dāng)所述起動位從高向低降低時通過產(chǎn)生一中斷起動所述串行端口,并當(dāng)收到所述停止位時通過產(chǎn)生一接收中斷而禁止所述串行端口。
3.一種通過TMS320C30 DSP中的串行端口異步發(fā)送串行數(shù)據(jù)的方法,該TMS320C30 DSP包括用于存儲脈沖段信息的發(fā)送定時器周期寄存器,該信息表示當(dāng)發(fā)送的串行數(shù)據(jù)的1位時間段表示為由多個時鐘脈沖組成的脈沖段時多少時鐘脈沖對應(yīng)串行數(shù)據(jù)的一位;以及發(fā)送定時器計數(shù)器,用于對所述時鐘脈沖計數(shù)到由所述發(fā)送定時器周期寄存器確定的數(shù)值、復(fù)位計數(shù)的數(shù)值為零、并從零開始重新計數(shù),所述方法包括以下步驟通過向待發(fā)送的數(shù)據(jù)部分的開始和末尾添加起動和停止位形成異步數(shù)據(jù)而產(chǎn)生數(shù)據(jù)幀;在發(fā)送所述起動位時的時間點初始化所述發(fā)送定時器計數(shù)器為零;每當(dāng)所述發(fā)送定時器計數(shù)器的數(shù)值變?yōu)榈扔谒霭l(fā)送定時器周期寄存器中的數(shù)值時則發(fā)送一位數(shù)據(jù);以及重復(fù)發(fā)送一位的所述步驟直到發(fā)送所述停止位為止。
4.如權(quán)利要求3中所述的異步串行數(shù)據(jù)發(fā)送方法,其中如果所述DSP還包括用于暫時存儲待發(fā)送的數(shù)據(jù)的所述發(fā)送隊列,則向所述數(shù)據(jù)幀產(chǎn)生步驟輸入的數(shù)據(jù)首先存儲在發(fā)送隊列,且在所述發(fā)送隊列存儲數(shù)據(jù)的方法包括以下步驟確定所述發(fā)送隊列數(shù)據(jù)是否為空;以及當(dāng)所述發(fā)送隊列數(shù)據(jù)不空時,起動發(fā)送中斷以便向所述發(fā)送隊列發(fā)送數(shù)據(jù),并當(dāng)所述發(fā)送隊列數(shù)據(jù)為空時,禁止所述發(fā)送中斷以便停止數(shù)據(jù)發(fā)送。
5.如權(quán)利要求4中所述的異步串行數(shù)據(jù)發(fā)送方法,其中所述發(fā)送隊列包括第一發(fā)送隊列,用于存儲由所述DSP待發(fā)送的數(shù)據(jù);以及第二發(fā)送隊列,用于存儲所述第一發(fā)送隊列的數(shù)據(jù)并向所述幀產(chǎn)生步驟提供數(shù)據(jù)。
全文摘要
本發(fā)明提供了一種使用數(shù)字信號處理器的串行端口發(fā)送和接收異步串行數(shù)據(jù)的方法。該方法包括以下步驟:確定起動位是否被接收;當(dāng)接收的起動位從高向低降落時起動串行端口;當(dāng)串行端口被起動時設(shè)置接收定時器計數(shù)器的初始值為接收脈沖段寄存器中一半的數(shù)值;每當(dāng)接收定時器計數(shù)器的數(shù)值變?yōu)榈扔诮邮斩〞r器周期中寄存器的數(shù)值時接收一位數(shù)據(jù),直到接收到停止信號為止;以及當(dāng)接收到停止位時禁止串行端口。根據(jù)這一方法,能夠進(jìn)行十分可靠的異步串行通信。
文檔編號H04L25/38GK1195797SQ98104479
公開日1998年10月14日 申請日期1998年2月19日 優(yōu)先權(quán)日1997年4月8日
發(fā)明者高鎮(zhèn)信 申請人:三星電子株式會社