国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

TMSC6713DSK DSP/BIOS多任務(wù)程序設(shè)計(jì)

2013-06-13 11:59杜廣超杜松蒲孫慧慧
無(wú)線電工程 2013年4期
關(guān)鍵詞:服務(wù)程序多任務(wù)中斷

杜廣超,陳 鋒,杜松蒲,孫慧慧

(中國(guó)人民解放軍63888部隊(duì),河南濟(jì)源459000)

0 引言

DSP/BIOS由TI公司開(kāi)發(fā)的DSP實(shí)時(shí)操作系統(tǒng),在基于DSP/BIOS的DSP程序開(kāi)發(fā)中,每一個(gè)算法程序是對(duì)任務(wù)(TSK)、軟件中斷(SWI)和硬件中斷(HWI)等的一種裁剪和組合,其程序架構(gòu)具有共同性[1]。C6713DSK是TI公司針對(duì)C6713推出的學(xué)習(xí)開(kāi)發(fā)板,以方便DSP初學(xué)者對(duì)DSP軟硬件設(shè)計(jì)的把握,在國(guó)內(nèi)眾多高校和科研院所作為DSP的學(xué)習(xí)平臺(tái),具有極為廣大的用戶基礎(chǔ)。針對(duì)該平臺(tái),設(shè)計(jì)了DSP/BIOS多任務(wù)程序,實(shí)現(xiàn)了多任務(wù)處理,并從功能設(shè)計(jì)到程序設(shè)計(jì)進(jìn)行了詳細(xì)論述,克服了C6713DSK和DSP/BIOS相關(guān)應(yīng)用文獻(xiàn)論述的籠統(tǒng)性[2-4]。

1 基于C6713DSK的多任務(wù)功能設(shè)計(jì)

C6713DSK硬件上由C6713最小音頻應(yīng)用系統(tǒng)、板上JTAG仿真電路和用戶交互電路等部分構(gòu)成[5],包 含 C6713 DSP、CPLD、8M FLASH、4M SDRAM、AIC23 Codec音頻編解碼等芯片,是以音頻處理為目標(biāo)應(yīng)用領(lǐng)域的。DSP通過(guò)2個(gè)McBSP串口和AIC23 Codec相連,其中 McBSP0采用 SPI模式,專門用于配置AIC23 Codec時(shí)由DSP向其發(fā)送控制字,數(shù)據(jù)傳輸時(shí)處于空閑狀態(tài),McBSP1采用DSP模式,作為雙向數(shù)據(jù)傳輸通道,AIC23 Codec和音頻輸入輸出口相連組成音頻處理系統(tǒng),所設(shè)計(jì)的一些功能即基于此。還提供雙撥開(kāi)關(guān)DIP可以方便用戶對(duì)DSP狀態(tài)進(jìn)行控制,提供LED指示燈可以對(duì)電路板狀態(tài)進(jìn)行顯示,以及響應(yīng)用戶的操作。

基于DSK的構(gòu)成和特點(diǎn),根據(jù)DIP四個(gè)開(kāi)關(guān)的狀態(tài)可設(shè)置DSP處于不同的工作狀態(tài),實(shí)現(xiàn)多任務(wù)設(shè)計(jì):

① DIP=“0000”時(shí),LED按一定規(guī)律明滅;

② DIP=“0001”時(shí),從音頻輸出口輸出單音信號(hào);

③DIP=“0010”時(shí),從音頻輸出口輸出 BPSK信號(hào);

④DIP=“0100”時(shí),從音頻輸入口輸入聲音,由DSP和另外一段音頻混音,并疊加一定功率噪聲后由音頻輸出口輸出,實(shí)現(xiàn)音頻的實(shí)時(shí)處理;

⑤ DIP=“1000”時(shí),從音頻輸入口輸入音頻信號(hào),由DSP對(duì)其進(jìn)行頻譜分析后由LED等輸出信號(hào)頻率值;

⑥自始至終,如果有中斷產(chǎn)生,進(jìn)入中斷服務(wù)程序,播放10 s預(yù)存錄音。

該多任務(wù)設(shè)計(jì)類型豐富,包括了對(duì)DSK板上用戶交互電路的充分利用,實(shí)現(xiàn)了LED燈控制、音頻信號(hào)生成、音頻信號(hào)監(jiān)測(cè)分析、音頻實(shí)時(shí)處理和中斷處理等任務(wù)。由于DIP有4個(gè)開(kāi)關(guān),可以組合出16種狀態(tài),那么利用DSK就可以相應(yīng)實(shí)現(xiàn)16種任務(wù),如果再考慮HWI和周期函數(shù)(PRD),那么DSK可以處理的任務(wù)量會(huì)更多。

2 多任務(wù)程序設(shè)計(jì)

考慮以上幾點(diǎn)功能的實(shí)現(xiàn),根據(jù)任務(wù)是否使用音頻數(shù)據(jù)通道,可以將它們分以下幾類:

①使用雙向數(shù)據(jù)通道的,主要是音頻的實(shí)時(shí)處理,需要輸入輸出通道;

②使用單向數(shù)據(jù)通道的,主要是信號(hào)的生成和監(jiān)測(cè),分別使用輸出和輸入通道;

③不用數(shù)據(jù)通道的,包括對(duì)LED等的控制,以及中斷服務(wù)程序等。

以上3種情況下,需要根據(jù)任務(wù)的不同,分別打開(kāi)輸入、輸出數(shù)據(jù)通道,以保證正確的數(shù)據(jù)流向,這是通過(guò)對(duì)DSP內(nèi)部EDMA的控制來(lái)實(shí)現(xiàn)的。整個(gè)程序需要對(duì)DIP的狀態(tài)不斷查詢,根據(jù)DIP的狀態(tài)進(jìn)入不同的任務(wù)處理,這就需要不同任務(wù)之間相互切換時(shí)準(zhǔn)確對(duì)一些狀態(tài)位進(jìn)行設(shè)置和查詢。同時(shí)在所有任務(wù)處理中,一旦有中斷發(fā)生,就必須馬上切換到中斷服務(wù)程序,即預(yù)存錄音播放。據(jù)以上分析,播放預(yù)存錄音任務(wù)用HWI實(shí)現(xiàn),其他任務(wù)用TSK實(shí)現(xiàn),需要優(yōu)先級(jí)區(qū)別時(shí)可以提高相應(yīng)任務(wù)的優(yōu)先級(jí)級(jí)別,甚至用SWI實(shí)現(xiàn)。程序處理主要的流程圖如圖1和圖2所示。

圖1 基于C6713DSK的多任務(wù)程序流程

圖2 基于C6713DSK的多任務(wù)程序流程

在 main()函數(shù)完成 C6713、AIC23 Codec、McBSP、EDMA初始化設(shè)置之后,DSP/BIOS被啟動(dòng),開(kāi)始任務(wù)調(diào)度。由硬件中斷INT6實(shí)現(xiàn)預(yù)存錄音播放功能,由任務(wù)TSK0實(shí)現(xiàn)對(duì)其他功能的區(qū)分并轉(zhuǎn)入相應(yīng)處理,數(shù)據(jù)通道的控制由EDMA中斷INT8完成,現(xiàn)在對(duì)關(guān)鍵點(diǎn)說(shuō)明如下:

硬件中斷INT6級(jí)別最高,可以在任何時(shí)刻搶占正在運(yùn)行線程的運(yùn)行。INT6中斷服務(wù)程序會(huì)設(shè)置一個(gè)狀態(tài)位,表示發(fā)生了INT6中斷,該狀態(tài)位既用于判別觸發(fā)INT8中斷的中斷源,也用于TSK0任務(wù)當(dāng)INT6中斷發(fā)生時(shí)屏蔽對(duì)EDMA通道參數(shù)的錯(cuò)誤設(shè)置。

由于只要利用到了數(shù)據(jù)通道,就會(huì)觸發(fā)EDMA內(nèi)部中斷INT8中斷,而INT8中斷服務(wù)程序只有一個(gè),這就需要在INT8中斷服務(wù)程序中對(duì)中斷源進(jìn)行判別和處理,使得INT8中斷服務(wù)程序處理較為復(fù)雜。為保證INT8中斷服務(wù)程序不過(guò)多占用DSP芯片處理時(shí)間,在INT8中斷服務(wù)程序中觸發(fā)軟件中斷SWI0,所有與數(shù)據(jù)通道相關(guān)的處理均在SWI0中完成。在SWI0中首先需要判別是否INT6觸發(fā)的EDMA中斷,之后需要查詢雙撥開(kāi)關(guān)DIP的狀態(tài),根據(jù)DIP狀態(tài)根據(jù)對(duì)數(shù)據(jù)通道的使用情況把數(shù)據(jù)放入數(shù)據(jù)輸出通道,或者從數(shù)據(jù)輸入通道取出數(shù)據(jù)以進(jìn)行分析。

任務(wù)TSK0是程序的主循環(huán),DSP沒(méi)有硬件中斷、軟件中斷和周期性任務(wù)等,處理時(shí)會(huì)一直查詢DIP的狀態(tài),按照DIP狀態(tài)打開(kāi)或者關(guān)閉音頻數(shù)據(jù)輸入或者輸出通道,并觸發(fā)EDMA內(nèi)部中斷INT8,為執(zhí)行相應(yīng)的信號(hào)產(chǎn)生或分析任務(wù)做準(zhǔn)備。閃燈不需要音頻數(shù)據(jù)通道的參與,單獨(dú)用一個(gè)任務(wù)函數(shù)實(shí)現(xiàn),TSK0每執(zhí)行一次,閃燈任務(wù)函數(shù)執(zhí)行一次,完成一個(gè)周期的閃燈。

程序設(shè)計(jì)好后,下載到C6713DSK運(yùn)行,切換DIP雙撥開(kāi)關(guān)狀態(tài),可以正常實(shí)現(xiàn)各個(gè)任務(wù)間正常切換,并通過(guò)板上U21的管腳“6”電平的改變可以觸發(fā)INT6中斷,正常播放預(yù)存錄音。

3 關(guān)鍵處理

3.1 音頻數(shù)據(jù)輸入輸出過(guò)程

上述程序設(shè)計(jì)中,為保證音頻數(shù)據(jù)傳輸?shù)牧鲿?,?shù)據(jù)傳輸基于ping-pong機(jī)制進(jìn)行,程序需要設(shè)置4個(gè) 緩 沖 區(qū) gBufferXmtPing、gBufferXmtPong、gBufferRcvPing、gBufferRcvPong分別作為發(fā)送或者接收的ping或者pong緩沖區(qū),并把它們配置為句柄hEdmaReloadXmtPing、 hEdmaReloadXmtPong、hEdmaReloadRcvPing、hEdmaReloadRcvPong 所代表EDMA通道的源或目的地址[6],并和McBSP1的源和目的地址相關(guān)聯(lián),最后將 EDMA通道hEdmaReloadXmtPong、hEdmaReloadXmtPing 以 及hEdmaReloadRcvPong、hEdmaReloadRcvPing 分別相鏈接。發(fā)送和接收數(shù)據(jù)的過(guò)程如圖3和圖4所示。

圖3 音頻數(shù)據(jù)的發(fā)送過(guò)程

圖4 音頻數(shù)據(jù)的接收過(guò)程

下面是EDMA配置的一些關(guān)鍵代碼及注釋:

/*hEdmaReloadXmtPong源地址為 gBufferXmtPong,同樣hEdmaReloadXmtPing源地址為gBufferXmtPing*/

gEdmaConfigXmt.src=EDMA_SRC_OF(gBufferXmt-Pong);

EDMA_config(hEdmaReloadXmtPong,&gEdmaConfigXmt);

……

/*EDMA發(fā)送目的地址是McBSP1的發(fā)送地址,McBSP1把數(shù)據(jù)發(fā)送到AIC23 Codec經(jīng)音頻口輸出*/

gEdmaConfigXmt.dst=MCBSP_getXmtAddr(hMcbsp1);

……

/*hEdmaReloadXmtPong和hEdmaReloadXmtPing通道相鏈接,實(shí)現(xiàn)數(shù)據(jù)連續(xù)發(fā)送[7]*/

EDMA_link(hEdmaReloadXmtPong,hEdmaReloadXmt-Ping);

EDMA_link(hEdmaReloadXmtPing,hEdmaReloadXmtPong);

……

/*hEdmaReloadRcvPong目的地址gBufferRcvPong,同樣hEdmaReloadRcvPing目的地址gBufferRcvPing*/

gEdmaConfigRcv.dst= EDMA_DST_OF(gBuffer-RcvPong);

EDMA_config(hEdmaReloadRcvPong,&gEdmaConfigRcv);

……

/*EDMA接收源地址是McBSP1的接收地址,數(shù)據(jù)經(jīng)音頻口到AIC23 Codec后經(jīng)McBSP1輸入*/

gEdmaConfigRcv.src=MCBSP_getRcvAddr(hMcbsp1);

……

/*hEdmaReloadRcvPong和hEdmaReloadRcvPing通道相鏈接,實(shí)現(xiàn)數(shù)據(jù)連續(xù)接收*/

EDMA_link(hEdmaReloadRcvPong,hEdmaReloadRcvPing);

EDMA_link(hEdmaReloadRcvPing,hEdmaReloadRcvPong);

在SWI0服務(wù)程序中需要適應(yīng)ping-pong機(jī)制,判斷當(dāng)前正在發(fā)送或者接收的數(shù)據(jù)是ping緩沖區(qū)數(shù)據(jù)還是pong緩沖區(qū)數(shù)據(jù),如在信號(hào)生成時(shí)由如下語(yǔ)句完成:

if(pingPong==PING)/*pingPong為所設(shè)置的狀態(tài)量,用于判斷進(jìn)行ping還是pong處理*/

{

copydata(data,gBufferXmtPing,BUFFSIZE);/* 把數(shù)據(jù)data拷貝到gBufferXmtPing發(fā)送*/

pingPong=PONG;/*更改pingPong的狀態(tài)*/

}

else

{

copydata(data,gBufferXmtPong,BUFFSIZE);

pingPong=PING;

}

如果沒(méi)有在代碼上適應(yīng)這種ping-pong機(jī)制,本來(lái)應(yīng)該生成波形連續(xù)的信號(hào)變成了占空比為1/2的間斷性信號(hào)。同時(shí)還要注意對(duì)數(shù)據(jù)data的幅度進(jìn)行調(diào)整,以防止出現(xiàn)截頂,使得本來(lái)應(yīng)該生成的正弦波信號(hào)變成矩形波信號(hào)。

3.2 頻率分析結(jié)果輸出方法

在頻譜分析任務(wù)中,需要對(duì)輸入音頻信號(hào)進(jìn)行FFT變換,分析其頻率值,并把分析結(jié)果通過(guò)DSK板上資源輸出。由于DSK板上僅僅有音頻輸出口或者LED燈可以用于用戶交互時(shí)輸出有關(guān)信息,可以考慮用2種方法實(shí)現(xiàn)分析頻率值的輸出。

①利用音頻輸出口。該方法需要提前錄好數(shù)字0~9和Hz的讀音,然后逐字符把頻率值所對(duì)應(yīng)的字符讀音選出并從音頻輸出口播放即可。所有字符讀音總長(zhǎng)至少約10 s才能分辨清楚,所以該方法需要較大的存儲(chǔ)空間,而板上存儲(chǔ)空間有限,INT6中斷所播放錄音長(zhǎng)度已經(jīng)是板上資源的極限,所以不宜采用該方法。

②利用LED燈。該方法需要建立LED燈明滅和數(shù)字0~9和Hz之間的對(duì)應(yīng)關(guān)系,LED燈全明表示“Hz”,LED燈按照BCD編碼明滅表示數(shù)字0~9。每個(gè)字符對(duì)應(yīng)LED明滅持續(xù)1 s,每次以LED燈全明輸出Hz為結(jié)束,之后循環(huán)輸出分析得到的頻率值。

4 結(jié)束語(yǔ)

DSP/BIOS最初在工程控制領(lǐng)域較為廣泛,隨著DSP芯片處理能力的不斷提升,基于DSP/BIOS可以方便實(shí)現(xiàn)多任務(wù)處理,有助于DSP芯片潛力的充分發(fā)揮,在DSP信號(hào)處理程序開(kāi)發(fā)中應(yīng)用也日益廣泛。本文基于DSP/BIOS設(shè)計(jì)的多任務(wù)處理程序,充分結(jié)合了硬件電路的資源,其架構(gòu)可以方便移植到定制電路板的DSP程序開(kāi)發(fā)之中。

[1]陳 煌,胡劍凌,王 超.基于 DSP/BIOS的TI DSP應(yīng)用程序框架設(shè)計(jì)[J].微計(jì)算機(jī)信息,2009,25(5):130-132.

[2]丁宜棟,華 蕓.基于DSP/BIOS的軟件系統(tǒng)設(shè)計(jì)[J].艦船電子工程,2001(5):52-55.

[3]曾 雯,鄧成良,尹俊勛.基于DSP/BIOS的實(shí)時(shí)語(yǔ)音混沌加密系統(tǒng)[J].微計(jì)算機(jī)信息,2009,25(4):199-201.

[4]閆群民.基于DSP/BIOS的數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)[J].陜西理工學(xué)院學(xué)報(bào)(自然科學(xué)版),2010,26(1):16-19.

[5]Spectrum Digital,INC.TMS320C6713 DSK Technical Reference[S],2003.

[6]Texas Instruments.TMS320C6000 DSP Enhanced Direct Memory Access(EDMA)ControllerReferenceGuide[S],2005.

[7]李方慧,王 飛,何佩琨.TMS320C6000系列DSPs原理與應(yīng)用[M].北京:電子工業(yè)出版社,2003.

猜你喜歡
服務(wù)程序多任務(wù)中斷
SylixOS系統(tǒng)的中斷嵌套機(jī)制研究與實(shí)現(xiàn)
基于C#的進(jìn)程守護(hù)程序的設(shè)計(jì)
UDP穿透NAT技術(shù)實(shí)現(xiàn)數(shù)據(jù)喚醒車聯(lián)網(wǎng)T-Box設(shè)備的方案
基于中心化自動(dòng)加權(quán)多任務(wù)學(xué)習(xí)的早期輕度認(rèn)知障礙診斷
基于FPGA的中斷控制器設(shè)計(jì)*
Linux中斷線程化分析及中斷延時(shí)測(cè)試
跟蹤導(dǎo)練(二)(5)
千里移防,衛(wèi)勤保障不中斷
基于判別性局部聯(lián)合稀疏模型的多任務(wù)跟蹤
電測(cè)與儀表(2016年5期)2016-04-22
乌兰察布市| 丹江口市| 伊吾县| 华坪县| 麦盖提县| 涟源市| 响水县| 加查县| 大安市| 万全县| 宁明县| 道真| 马山县| 玛多县| 阳春市| 新源县| 绥芬河市| 绥棱县| 景德镇市| 湖北省| 衡阳市| 黎平县| 修文县| 灵台县| 湟源县| 柯坪县| 天全县| 江北区| 杭锦旗| 务川| 淮阳县| 和静县| 光山县| 石林| 哈尔滨市| 眉山市| 湟中县| 鄂尔多斯市| 白山市| 鄂托克旗| 武邑县|