本發(fā)明涉及嵌入式計(jì)算機(jī)領(lǐng)域,具體涉及一種dsp讀取擴(kuò)展串口中接收通道數(shù)據(jù)的方法。
背景技術(shù):
現(xiàn)有的數(shù)字信號(hào)處理芯片(以下簡稱dsp)只含有1~3個(gè)uart(通用異步收發(fā)器),urat的信號(hào)經(jīng)過不同的串行通信協(xié)議驅(qū)動(dòng)芯片形成不同的串行通信協(xié)議標(biāo)準(zhǔn)接口(以下簡稱串口)。當(dāng)dsp要與多個(gè)串口設(shè)備(大于其自帶的串口數(shù)量)進(jìn)行通信時(shí),需要對(duì)其進(jìn)行串口擴(kuò)展。
串口擴(kuò)展多采用專用集成電路。串口擴(kuò)展芯片與dsp相連接,由dsp控制串口擴(kuò)展芯片的數(shù)據(jù)收發(fā)等操作。由于dsp的外觸發(fā)中斷管腳數(shù)量有限,通常采取多個(gè)擴(kuò)展串口通道的接收中斷信號(hào)經(jīng)過邏輯或之后連接到dsp的一個(gè)外觸發(fā)中斷管腳上。某些型號(hào)dsp或單片機(jī)外觸發(fā)中斷沒有電平觸發(fā)功能,只有邊沿觸發(fā)功能。這些類型的dsp從擴(kuò)展串口芯片中讀取相應(yīng)接收通道的數(shù)據(jù)只能采用輪詢模式或邊沿觸發(fā)中斷模式。輪詢模式操作簡單,但響應(yīng)慢、效率低和時(shí)間不確定性,當(dāng)接收通道的數(shù)據(jù)幀頻較高時(shí)很容易丟幀。邊沿觸發(fā)中斷模式響應(yīng)快,但當(dāng)多個(gè)擴(kuò)展串口接收通道的數(shù)據(jù)幀頻都較高時(shí),由于數(shù)據(jù)讀取需要占用一定的時(shí)間,就會(huì)導(dǎo)致某些通道串口中斷得不到及時(shí)處理,這些接收通道中斷管腳的電平無法得到有效的復(fù)位,導(dǎo)致這些通道永久性失去觸發(fā)dsp外部中斷的功能,從而導(dǎo)致在中斷模式下無法讀取這些接收通道中的數(shù)據(jù),造成該通道失效。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明為解決現(xiàn)有dsp與擴(kuò)展串口芯片進(jìn)行數(shù)據(jù)交互時(shí),存在只能采用輪詢模式或邊沿觸發(fā)中斷模式,導(dǎo)致接收通道的數(shù)據(jù)幀頻較高時(shí)很容易丟幀以及由于無法讀取接收通道中的數(shù)據(jù)造成數(shù)據(jù)通道失效等問題,提供一種dsp讀取擴(kuò)展串口中接收通道數(shù)據(jù)的方法。
dsp讀取擴(kuò)展串口中接收通道數(shù)據(jù)的方法,該方法由以下步驟實(shí)現(xiàn):
步驟一、對(duì)dsp以及擴(kuò)展串口專用集成電路進(jìn)行初始化;
步驟二、初始化后的dsp同時(shí)開啟中斷模式和輪詢模式,如果中斷條件滿足,則進(jìn)入中斷服務(wù)程序,如果輪詢條件滿足,則進(jìn)入輪詢處理程序。
所述進(jìn)入中斷模式或輪詢模式中的程序執(zhí)行方式相同,具體為:
掃描各擴(kuò)展串口接收通道對(duì)應(yīng)的觸發(fā)中斷管腳的電平狀態(tài),若該通道管腳電平狀態(tài)與中斷觸發(fā)時(shí)的電平狀態(tài)一致,則查詢該通道接收fifo中的數(shù)據(jù)個(gè)數(shù),然后將fifo中所有數(shù)據(jù)讀取并保存至用于該通道的專用數(shù)組中;若該通道管腳電平狀態(tài)與中斷觸發(fā)時(shí)的電平狀態(tài)不一致,則對(duì)該通道無任何操作;
步驟三、將步驟二中讀取各擴(kuò)展串口接收通道的數(shù)據(jù)保存在專用數(shù)組中,具體為:
設(shè)定專用數(shù)組中已存在數(shù)據(jù)起點(diǎn)為p,終點(diǎn)為q,數(shù)據(jù)長度為m,即p+m=q;專用數(shù)組起點(diǎn)為0,終點(diǎn)為f-1,長度為f,且存在如下關(guān)系0≤p≤q≤f-1;專用數(shù)組中已存在數(shù)據(jù)終點(diǎn)位置q與該擴(kuò)展串口接收通道fifo中數(shù)據(jù)長度n之和為q+n;
若q+n≤f-1,則保持專用數(shù)組中已存在數(shù)據(jù)的起點(diǎn)位置p值不變,將接收通道fifo中的所有數(shù)據(jù)順序保存至專用數(shù)組中已存在數(shù)據(jù)終點(diǎn)位置q之后,并將專用數(shù)組中已存在數(shù)據(jù)終點(diǎn)位置更新為q+n;
若q+n>f-1,則將專用數(shù)組中已存在數(shù)據(jù)整體往零點(diǎn)位置移動(dòng)距離為q+n-f+1,此時(shí)已存在數(shù)據(jù)的起點(diǎn)為p-q-n+f-1,已存在數(shù)據(jù)的終點(diǎn)為f-1-n;
若p-q-n+f-1≥0,則將接收通道fifo中的所有數(shù)據(jù)順序保存至專用數(shù)組中已存在數(shù)據(jù)終點(diǎn)位置f-1-n之后,并將專用數(shù)組中已存在數(shù)據(jù)終點(diǎn)位置修改為f-1,起點(diǎn)值p-q-n+f-1保持不變;
若p-q-n+f-1<0且f-1-n≥0,則將接收通道fifo中的所有數(shù)據(jù)順序保存至專用數(shù)組中已存在數(shù)據(jù)終點(diǎn)位置f-1-n之后,并將專用數(shù)組中已存在數(shù)據(jù)終點(diǎn)位置修改為f-1,起點(diǎn)值修改為0;
若p-q-n+f-1<0且f-1-n<0,則專用數(shù)組的長度f小于擴(kuò)展串口接收通道fifo中數(shù)據(jù)長度n,則程序結(jié)束。
本發(fā)明的有益效果:本發(fā)明所述的方法采用中斷模式和輪詢模式相結(jié)合的方式,將相應(yīng)擴(kuò)展串口接收通道fifo中的數(shù)據(jù),按照特定的方式存儲(chǔ)在專用數(shù)組里。該方法解決了單獨(dú)采用輪詢模式的時(shí)間不確定性和接收通道數(shù)據(jù)高幀頻下丟幀的問題,也避免了單獨(dú)采用中斷模式而導(dǎo)致在接收通道數(shù)據(jù)高幀頻下接收通道失效的問題。兩種模式的有機(jī)結(jié)合使得dsp能快速處理接收通道的數(shù)據(jù),即使在高幀頻下也能做到串口接收通道不失效,接收數(shù)據(jù)無丟幀,極大提高了擴(kuò)展串口的可靠性。
附圖說明
為了更清楚地說明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖做簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明所述的dsp讀取擴(kuò)展串口中接收通道數(shù)據(jù)的方法中dsp與擴(kuò)展串口集成電路的連接關(guān)系示意圖;
圖2為本發(fā)明所述的dsp讀取擴(kuò)展串口中接收通道數(shù)據(jù)的方法中dsp初始化的流程圖;
圖3為本發(fā)明所述的dsp讀取擴(kuò)展串口中接收通道數(shù)據(jù)的方法中dsp對(duì)擴(kuò)展串口集成電路初始化的流程圖;
圖4為本發(fā)明所述的dsp讀取擴(kuò)展串口中接收通道數(shù)據(jù)的方法中擴(kuò)展串口集成電路的接收通道數(shù)據(jù)保存至專用數(shù)組的流程圖;
圖5中(a)、(b)、(c)和(d)分別為本發(fā)明所述的dsp讀取擴(kuò)展串口中接收通道數(shù)據(jù)的方法中擴(kuò)展串口接收通道數(shù)據(jù)保存至專用數(shù)組的四種位置示意圖。
具體實(shí)施方式
具體實(shí)施方式一、結(jié)合圖1至圖5說明本實(shí)施方式,dsp讀取擴(kuò)展串口中接收通道數(shù)據(jù)的方法,dsp與擴(kuò)展串口專用集成電路的連接關(guān)系結(jié)合圖1,dsp通過xintf接口(外部接口)分別與每個(gè)擴(kuò)展串口集成電路的數(shù)據(jù)總線、地址總線及讀寫信號(hào)線相連接,通過xintf的多余的地址總線(如xa[7:5])經(jīng)三八譯碼器來控制控制擴(kuò)展串口集成電路的各通道的片選。各擴(kuò)展串口集成電路的中斷信號(hào)1~中斷信號(hào)n,經(jīng)過邏輯或元器件之后輸出到dsp的外部中斷管腳,且所有中斷信號(hào)1~中斷信號(hào)n分別輸入到dsp的gpio管腳。
具體方法以由以下步驟實(shí)現(xiàn):
一、對(duì)dsp初始化,結(jié)合圖2和圖3,包括以下步驟:配置系統(tǒng)時(shí)鐘,初始化所有g(shù)pio,初始化相關(guān)外設(shè),延遲一段時(shí)間后初始化擴(kuò)展串口集成電路,配置外部中斷,相關(guān)中斷使能,全局中斷使能;所述延遲一段時(shí)間大于等于擴(kuò)展串口上電后至能進(jìn)行寄存器讀寫的等待時(shí)間,否則會(huì)導(dǎo)致dsp對(duì)擴(kuò)展串口初始化不完整,甚至擴(kuò)展串口無法初始化。
所述初始化擴(kuò)展串口集成電路的步驟為:配置數(shù)據(jù)位、停止位、奇偶校驗(yàn)位、配置波特率、使能接收fifo、配置接收fifo觸發(fā)等級(jí)、使能相應(yīng)串口中斷輸出以及接收fifo中斷使能。
二、本實(shí)施方中,擴(kuò)展串口邊沿觸發(fā)中斷服務(wù)程序(即中斷模式)包括以下步驟:進(jìn)入中斷服務(wù)程序,掃描各擴(kuò)展串口接收通道對(duì)應(yīng)的觸發(fā)中斷管腳的電平狀態(tài),若該通道管腳電平狀態(tài)與中斷觸發(fā)時(shí)的電平狀態(tài)一致,則查詢該通道接收fifo中的數(shù)據(jù)個(gè)數(shù),然后將fifo中所有數(shù)據(jù)讀取并保存至用于該通道的專用數(shù)組中。若該通道管腳電平狀態(tài)與中斷觸發(fā)時(shí)的電平狀態(tài)不一致,則對(duì)該通道無任何操作;
輪詢程序包括以下步驟:在主循環(huán)程序中進(jìn)入輪詢程序,掃描各擴(kuò)展串口接收通道對(duì)應(yīng)的觸發(fā)中斷管腳的電平狀態(tài),若該通道管腳電平狀態(tài)與中斷觸發(fā)時(shí)的電平狀態(tài)一致,則查詢該通道接收fifo中的數(shù)據(jù)個(gè)數(shù),然后將fifo中所有數(shù)據(jù)讀取并保存至用于該通道的專用數(shù)組中。若該通道管腳電平狀態(tài)與中斷觸發(fā)時(shí)的電平狀態(tài)不一致,則對(duì)該通道無任何操作;
三、各擴(kuò)展串口接收通道讀出的數(shù)據(jù)獨(dú)立使用一個(gè)專用數(shù)組,且各通道輪詢模式和中斷模式下讀取的數(shù)據(jù)都放在其專用數(shù)組內(nèi)。該專用數(shù)組大小至少大于等于該擴(kuò)展串口接收通道中fifo大小,或至少大于等于該接收通道最長數(shù)據(jù)幀長度,二者中取最大者,建議取最大者的二倍到三倍。
結(jié)合圖4和圖5,設(shè)定專用數(shù)組中已存在數(shù)據(jù)起點(diǎn)為p,終點(diǎn)為q,數(shù)據(jù)長度為m,即p+m=q。專用數(shù)組起點(diǎn)為0,終點(diǎn)為f-1,長度為f,且存在如下關(guān)系0≤p≤q≤f-1,如圖5中(a)所示;
專用數(shù)組中已存在數(shù)據(jù)終點(diǎn)位置q與該擴(kuò)展串口接收通道fifo中數(shù)據(jù)長度n之和為q+n。若q+n≤f-1,則保持專用數(shù)組中已存在數(shù)據(jù)的起點(diǎn)位置p值不變,將接收通道fifo中的所有數(shù)據(jù)順序保存至專用數(shù)組中已存在數(shù)據(jù)終點(diǎn)位置q之后,并將專用數(shù)組中已存在數(shù)據(jù)終點(diǎn)位置更新為q+n,存儲(chǔ)后的數(shù)據(jù)在專用數(shù)組中的位置如圖5中(b)所示;
若q+n>f-1,則需要將專用數(shù)組中已存在數(shù)據(jù)整體往零點(diǎn)位置移動(dòng)距離為q+n-f+1,此時(shí)已存在數(shù)據(jù)的起點(diǎn)為p-q-n+f-1,此時(shí)已存在數(shù)據(jù)的終點(diǎn)為f-1-n。若p-q-n+f-1≥0,則將接收通道fifo中的所有數(shù)據(jù)順序保存至專用數(shù)組中已存在數(shù)據(jù)終點(diǎn)位置f-1-n之后,并將專用數(shù)組中已存在數(shù)據(jù)終點(diǎn)位置修改為f-1,起點(diǎn)值p-q-n+f-1保持不變,存儲(chǔ)后的數(shù)據(jù)在專用數(shù)組中的位置如圖5中(c)所示;
若p-q-n+f-1<0且f-1-n≥0,則將接收通道fifo中的所有數(shù)據(jù)順序保存至專用數(shù)組中已存在數(shù)據(jù)終點(diǎn)位置f-1-n之后,并將專用數(shù)組中已存在數(shù)據(jù)終點(diǎn)位置修改為f-1,起點(diǎn)值修改為0,存儲(chǔ)后的數(shù)據(jù)在專用數(shù)組中的位置如圖5中(d)所示;
若p-q-n+f-1<0且f-1-n<0,則說明專用數(shù)組的長度f小于擴(kuò)展串口接收通道fifo中數(shù)據(jù)長度n,這種情況是與前面所述的專用數(shù)組長度相悖,不存在此種情況,直接退出本段程序;其中p′和q′為擴(kuò)展串口接收通道數(shù)據(jù)存儲(chǔ)在專用數(shù)組后已存在數(shù)據(jù)的起點(diǎn)位置和終點(diǎn)位置。