摘要:在DSP技術(shù)教學(xué)過程中,片上外設(shè)往往得不到足夠的重視,導(dǎo)致學(xué)生修完課程只能基于CPU進行軟件代碼設(shè)計,而對豐富的外設(shè)資源無能為力。結(jié)合學(xué)生的實際能力分析了芯片支持庫的優(yōu)點,這是將芯片支持庫引入外設(shè)教學(xué)的重要原因。以基于MCBSP外設(shè)為例,采用芯片支持庫對該外設(shè)進行操控可讓學(xué)生對其功能有直觀認識,同時給出了基于芯片支持庫的完整設(shè)計流程,學(xué)生很容易將其推廣到其他外設(shè)的設(shè)計中,這也為其今后的開發(fā)工作奠定一定的基礎(chǔ)。
關(guān)鍵詞:外設(shè)芯片支持庫設(shè)計流程
1.DSP外設(shè)教學(xué)的現(xiàn)狀
在DSP芯片技術(shù)教學(xué)過程中,往往集中于芯片CPU相關(guān)內(nèi)容的教學(xué),包括芯片硬件結(jié)構(gòu),指令系統(tǒng),軟件開發(fā)環(huán)境以及基于CPU的程序設(shè)計。學(xué)生通過理論學(xué)習(xí)和編程練習(xí)實現(xiàn)一些基本的信號處理功能,但是這些功能往往局限于CPU對指令的順序執(zhí)行而對DSP芯片豐富的片上外設(shè),比如定時器(TIMER),同步串口(SP),主機接口(HPI)等眾多的硬件資源,往往由于教學(xué)課時少,實驗平臺不完善等限制,較少涉及。即使任課老師做了充分的前期準備,但由于外設(shè)內(nèi)容牽涉的基礎(chǔ)概念較多,試圖通過授課的方式來達到有效教學(xué)的目的,有一定挑戰(zhàn)的。學(xué)完這部分內(nèi)容學(xué)生往往只是記住了一些相關(guān)的概念,對外設(shè)的工作原理有大概的了解,但是真正要將外設(shè)和芯片配合起來工作,就顯得無能為力,而且隨著技術(shù)的發(fā)展,各種外設(shè)不斷升級提高,其開發(fā)難度日益加大,要想在課堂教學(xué)中掌握外設(shè)的開發(fā),需要學(xué)生對外設(shè)開發(fā)流程有整體性的把握,這也對DSP技術(shù)的教學(xué)提出了新的要求。
2.芯片支持庫的結(jié)構(gòu)和功能
芯片支持庫(Chip Support Library)是由TI公司為該公司芯片提供的底層硬件支持函數(shù)庫。這些支持函數(shù)以可執(zhí)行代碼的方式提供,使用者只需要直接調(diào)用相應(yīng)的函數(shù)即可。芯片支持庫具有以下特點:
(1)可用于配置、控制和管理DSP片上外設(shè)
芯片支持庫為開發(fā)者提供了DSP外設(shè)開發(fā)的一整套解決方案,以C5000系列芯片為例,芯片支持庫可參考文檔[1] ,所有C5000系列芯片均有對應(yīng)支持庫,每款芯片包含近端模式和遠端模式兩種版本,而Device Support Symbol與每一款具體芯片編號相對應(yīng)。在芯片支持庫內(nèi)部以模塊的方式來組織與具體外設(shè)相關(guān)的部分[2],各模塊的功能從模塊名即可了解,比如DMA模塊包含與直接存儲訪問功能相關(guān)的數(shù)據(jù)類型,常數(shù),宏及操作函數(shù)等內(nèi)容。學(xué)生只需要掌握某一種外設(shè)的配置,啟動外設(shè)工作,關(guān)閉外設(shè)等基本操作,就可以推廣到其他外設(shè)。
(2)CSL庫函數(shù)大多采用C編寫的,并已對代碼進行了優(yōu)化,可直接調(diào)用
相比其他的DSP庫函數(shù),比如針對信號處理運算的DSP數(shù)學(xué)庫,由于該庫函數(shù)對代碼的執(zhí)行效率有較高要求,采用匯編語言編寫,因此盡管該庫函數(shù)提供了源代碼,但是讀懂這些匯編代碼對初學(xué)者是個不小的挑戰(zhàn)。芯片支持庫的大多數(shù)函數(shù)采用C語言編寫,并提供了所有API的接口說明。這樣初學(xué)者不必花費大量時間去讀懂晦澀的匯編代碼。
(3)CSL庫是可裁剪的:只有被使用的CSL模塊才會包含進應(yīng)用程序中
通過頭文件,將用到模塊的相關(guān)信息包含進工程中,一方面減小了工程的代碼量和復(fù)雜度,另一方只包括與自己相關(guān)的部分代碼,讓初學(xué)者不至于被龐雜的代碼所混亂。
(4)CSL庫是可擴展的:每個片上外設(shè)的API相互獨立
庫函數(shù)各模塊之間保持相對獨立,一個模塊的實現(xiàn)不受其他模塊的影響,模塊之間通過調(diào)用接口實現(xiàn)相互關(guān)聯(lián)。
3芯片支持庫操作外設(shè)流程
芯片支持庫的使用有兩種基本的方式:基于DSP/BIOS的圖形化配置方式;直接調(diào)用CSL庫函數(shù)方式。在實際教學(xué)中采用第二種方式對CSL庫進行調(diào)用,下面以多通道緩沖串口MCBSP為例[3],介紹芯片支持庫在教學(xué)的應(yīng)用。以接收通道為例,外部串行數(shù)據(jù)通過DR引腳移位進入數(shù)據(jù)寄存器RSR,當(dāng)寄存器RSR滿時,該數(shù)據(jù)將被整體復(fù)制到數(shù)據(jù)寄存器RBR中,由RBR再復(fù)制到DRR中,等待CPU或者DMA讀走。數(shù)據(jù)的發(fā)送過程與此過程類似,當(dāng)學(xué)生對MCBSP數(shù)據(jù)收發(fā)流程有了初步了解,需要通過實例來加深他們的理解,這也正是芯片支持庫在幫助學(xué)生快速掌握DSP片上外設(shè)系統(tǒng)設(shè)計的關(guān)鍵。
首先DSP上電啟動后,CPU進行各項初始化操作,然后通過MCBSP_open函數(shù)獲取與具體MCBSP硬件相關(guān)聯(lián)的外設(shè)句柄,該句柄在后續(xù)的各項操作中均可能用到。在這里一定要加強學(xué)生對外設(shè)句柄操作等效為對外設(shè)本身操作的概念。
MCBSP_config函數(shù)的功能是對MCBSP外設(shè)進行配置,控制寄存器每一位均具有預(yù)定義的功能,通常初學(xué)者很難將寄存器的每個功能位完全掌握,實際上也沒有這個必要,因為各功能位一般均有默認設(shè)定值,實際設(shè)計中只需把某些功能位按照設(shè)計要求做特定修改。芯片支持庫將特定功能預(yù)定義為具有指示意義的宏常數(shù),通過宏名就可以對其功能有大致了解,這對提升初學(xué)者對DSP設(shè)計本身的興趣也大有裨益。這些被具有指示意義的宏名封裝起來的配置參數(shù)初學(xué)者可以先直接使用,熟悉后再去深入研究。
通過配置環(huán)節(jié),MCBSP已經(jīng)按照我們的預(yù)設(shè)功能進行了設(shè)置,下面就可以啟動外設(shè)進行工作了,MCBSP_start函數(shù)即是啟動數(shù)據(jù)接收串口開始工作。
MCBSP_rrdy函數(shù)檢測接收數(shù)據(jù)是否到達,只有接收到有效數(shù)據(jù)才返回有效值,否則返回?zé)o效結(jié)果,根據(jù)返回結(jié)果判斷是否繼續(xù)接收。實際開發(fā)中由于接收數(shù)據(jù)較多,可對接收到的數(shù)據(jù)長度進行判斷,所有數(shù)據(jù)接收結(jié)束再退出。
當(dāng)外設(shè)完成預(yù)設(shè)的所有功能后,需要回收外設(shè)句柄,這與C語言中動態(tài)分配內(nèi)存要進行主動釋放,對于外設(shè)而言只有當(dāng)已分配的句柄被關(guān)閉后,該外設(shè)才能被重新分配和使用,這是初學(xué)者常忽略的地方。
4.小結(jié)
利用芯片支持庫,以DSP片上外設(shè)中最典型的多通道串行口為例,進行了實際的設(shè)計,芯片支持庫為初學(xué)者提供了學(xué)習(xí)外設(shè)的有效方法,C語言的使用使得外設(shè)設(shè)計不再是晦澀的匯編代碼設(shè)計,預(yù)定義的宏常數(shù)使得控制寄存器設(shè)置簡單明了。該實例可以很容易推廣到其外設(shè),教學(xué)實踐也證明采用芯片支持庫,學(xué)生能夠在較短的時間內(nèi)掌握DSP外設(shè)的設(shè)計,并對外設(shè)的功能形成直觀認識,相信在他們以后的工作中會有積極的影響。
參考文獻:
[1]TMS320VC5416 Fixed-Point Digital Signal Processor.
[2]TMS320C54x Chip Support Library API Reference Guide.
[3]TMS32C54x DSP 結(jié)構(gòu)、原理及應(yīng)用,P90.