第3章 集成軟件開發(fā)環(huán)境課件_第1頁
第3章 集成軟件開發(fā)環(huán)境課件_第2頁
第3章 集成軟件開發(fā)環(huán)境課件_第3頁
第3章 集成軟件開發(fā)環(huán)境課件_第4頁
第3章 集成軟件開發(fā)環(huán)境課件_第5頁
已閱讀5頁,還剩117頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第三章DSP集成軟件開發(fā)環(huán)境第三章DSP集成軟件開發(fā)環(huán)境3.1CCS集成開發(fā)環(huán)境3.2C語言程序基礎(chǔ)3.3混合語言編程3.4啟動(Bootload)3.5芯片支持庫(CSL)3.1CCS集成開發(fā)環(huán)境CCS(CodeComposerStudio)是TI公司為DSP推出的集成軟件開發(fā)環(huán)境(IDE),提供了配置、建立、調(diào)試、跟蹤和分析的工具,包括了應(yīng)用程序開發(fā)必需的所有功能,便于對實(shí)時信號處理程序的編制和測試,能夠加速開發(fā)進(jìn)程,提高工作效率。提供三種編程語言: 匯編語言 線性匯編語言

C/C++提供兩種調(diào)試手段:Simulation EmulationSimulation:可以脫離DSP芯片,在PC機(jī)上模擬DSP的指令集和工作機(jī)制,主要用于前期的算法實(shí)現(xiàn)和調(diào)試。

Emulation:可以在DSP芯片上實(shí)時運(yùn)行,與硬件開發(fā)板相結(jié)合進(jìn)行在線編程和調(diào)試應(yīng)用程序。

CCS集成開發(fā)環(huán)境CCS調(diào)試界面菜單條標(biāo)題區(qū)編輯工具條編譯工具條數(shù)據(jù)顯示窗口圖形顯示窗口變量觀察窗口C源程序編輯窗口反匯編調(diào)試窗口編譯運(yùn)行結(jié)果顯示窗口調(diào)試工具條工程管理窗口CCS集成環(huán)境的組成代碼生成工具:包括C編譯器、匯編優(yōu)化器、匯編器和鏈接器等。集成開發(fā)環(huán)境:包括編輯器、調(diào)試器、項(xiàng)目管理器、性能分析工具等。軟件仿真器(Simulator)。實(shí)時基礎(chǔ)軟件DSP/BIOS:可增強(qiáng)對代碼的實(shí)時分析能力。主機(jī)與目標(biāo)機(jī)之間的實(shí)時數(shù)據(jù)交換軟件RTDX:能在不中斷目標(biāo)系統(tǒng)運(yùn)行的情況下,實(shí)現(xiàn)DSP與其它系統(tǒng)的數(shù)據(jù)交換。實(shí)時分析和數(shù)據(jù)可視化軟件:如數(shù)據(jù)的圖像顯示工具,用以繪制時/頻域波形、眼圖、星座圖等。

CCS集成環(huán)境的組成CCS版本與支持的DSP芯片軟件開發(fā)流程TI公司提供的DSP開發(fā)環(huán)境和工具主要包括二部分:

?代碼生成工具包括:

C編譯器

匯編器

鏈接器

存檔器

建庫文件

HEX轉(zhuǎn)換工具

絕對地址列表器

交叉地址列表器

?代碼調(diào)試工具包括:

軟件模擬器simulator

硬件開發(fā)模塊EVM

仿真器XDS軟件編譯流程.CPPfile.ASMfile.Cfile.ASMfile.ASMfile.OBJfileAssembler.OBJfile.OBJfile.OUTfile.HEXfileLinkerCCS下的項(xiàng)目管理應(yīng)用程序按項(xiàng)目來管理,按層次以圖形化的方式顯示*.cmd文件*.h頭文件*.lib庫文件*.c源程序在項(xiàng)目中添加、新建和刪除文件CCS編譯選項(xiàng)的設(shè)置

各種編譯選項(xiàng),如C編譯器選項(xiàng),連接器選項(xiàng)等通過圖形化方式來設(shè)置,不需要手工添加選項(xiàng)CCS基本操作編譯操作:

編譯文件(Compilefile):可編譯當(dāng)前文件,不執(zhí)行鏈接操作。增量構(gòu)建(IncrementalBuild):該選項(xiàng)只編譯上次構(gòu)建后修改過的源文件。全部重新構(gòu)建(RebuildAll):重新編譯所有文件并鏈接。

設(shè)置斷點(diǎn):將光標(biāo)放置在需要設(shè)置斷點(diǎn)的程序行前,點(diǎn)擊Debug→Breakpoints,或點(diǎn)擊工具欄按鈕,即可完成一個斷點(diǎn)的設(shè)置,點(diǎn)擊工具欄按鈕可清除所有的斷點(diǎn)。CCS基本操作復(fù)位的3種方法:

ResetDSP:點(diǎn)擊Debug→ResetCPU,初始化所有的寄存器內(nèi)容并暫停運(yùn)行中的程序。這種復(fù)位后,要重新裝載.out文件,再執(zhí)行程序。

Restart:點(diǎn)擊Debug→Restart,將PC值恢復(fù)到當(dāng)前載入程序的入口地址。

Gomain:點(diǎn)擊Debug→Gomain,將程序運(yùn)行到主程序的入口處暫停。CCS基本操作CCS基本操作執(zhí)行程序的4種方法:連續(xù)執(zhí)行:點(diǎn)擊Debug→Run,程序運(yùn)行直到遇到斷點(diǎn)為止。暫停執(zhí)行:點(diǎn)擊Debug→Halt,程序停止運(yùn)行。動畫執(zhí)行:點(diǎn)擊Debug→Animate,用戶反復(fù)運(yùn)行程序,直到遇到斷點(diǎn)為止。自由執(zhí)行:點(diǎn)擊Debug→RunFree,禁止所有斷點(diǎn)運(yùn)行程序。注意:Animate方式是運(yùn)行至斷點(diǎn)處時,更新除探點(diǎn)所指的所有窗口,然后繼續(xù)直到下一個斷點(diǎn)。CCS基本操作單步執(zhí)行的4種方法:

單步進(jìn)入:快捷鍵F8,Debug→StepInto,當(dāng)調(diào)試語句不是基本的匯編指令時,此操作進(jìn)入語句內(nèi)部單步執(zhí)行:點(diǎn)擊Debug→StepOver,此命令將函數(shù)或子函數(shù)當(dāng)作一條語句執(zhí)行,不進(jìn)入內(nèi)部調(diào)試單步跳出:點(diǎn)擊Debug→StepOut,此命令作用為從子程序中跳出執(zhí)行到光標(biāo)處:快捷鍵Crtl+F10,Debug→RuntoCursor,此命令作用為將程序運(yùn)行到光標(biāo)處CCS基本操作查看寄存器:使用View→Registers→CPURegisters命令CCS基本操作查看變量:使用View→WatchWindow命令CCS基本操作查看內(nèi)存:使用View→Memory命令CCS基本操作反匯編窗口:加載程序后,CCS會自動打開一個反匯編窗口。在反匯編窗口中顯示了匯編指令和用于調(diào)試的符號信息。每條匯編指令都顯示了該指令的地址及其操作碼。當(dāng)前程序指針PC所指向的語句用彩色高亮顯示。

探針(ProbePoint)為方便在算法開發(fā)階段驗(yàn)證程序的正確性,CCS允許用戶將數(shù)據(jù)導(dǎo)入或?qū)С瞿繕?biāo)處理器。通過將外部數(shù)據(jù)導(dǎo)入目標(biāo)處理器,然后運(yùn)行算法程序,再將運(yùn)行結(jié)果保存到外部文件中,以對輸出結(jié)果進(jìn)行分析,也可用CCS的圖形窗口直觀的觀察運(yùn)行結(jié)果。通過設(shè)置將探針與外部數(shù)據(jù)文件相關(guān)聯(lián),能夠自動從文件輸入數(shù)據(jù)和輸出數(shù)據(jù)到文件中。

方便在算法開發(fā)階段驗(yàn)證程序的正確性文件輸入輸出的設(shè)置:FileFileI/O…Probe的設(shè)置:類似斷點(diǎn)的設(shè)置(用工具條)可完成這樣的功能:從一個文件中讀入數(shù)據(jù)到一個DSP的緩沖區(qū)將一個DSP的緩沖區(qū)內(nèi)容寫到文件中CCS基本操作

探針與斷點(diǎn)

相同之處:都可以停止程序的運(yùn)行

不同之處:探針只是暫時中斷程序的運(yùn)行,當(dāng)程序執(zhí)行到探點(diǎn)時會自動更新與之相連接的窗口,然后自動繼續(xù)運(yùn)行程序。斷點(diǎn)中斷程序后,將更新所有打開的窗口,且只能通過人工干預(yù)的方法恢復(fù)程序繼續(xù)運(yùn)行。探針運(yùn)行時,文件能夠自動完成從PC機(jī)和目標(biāo)處理器之間的輸入、輸出,而斷點(diǎn)沒有此功能。

CCS基本操作AmplitudevsTimeDiagramCCS基本操作數(shù)據(jù)可視化:多種專用的畫圖工具,可以方便直觀地判斷算法執(zhí)行的效果。EyeDiagramCCS基本操作ConstellationDiagramCCS基本操作FastFourierTransform(FFT)DiagramCCS基本操作CCS基本操作

在CCS中可以將數(shù)據(jù)按圖形化方式顯示出來,包括時頻圖、星圖、眼圖和圖像4種類型。各種圖形方式都是采用雙緩沖區(qū)(采集緩沖區(qū)和顯示緩沖區(qū))分別存儲和顯示圖形的。采集緩沖區(qū)在目標(biāo)處理器上,包含需要顯示的數(shù)據(jù)。顯示緩沖區(qū)在主機(jī)上,用于保存采集緩沖區(qū)數(shù)據(jù)的拷貝。圖形是由顯示緩沖區(qū)的數(shù)據(jù)生成的。當(dāng)刷新圖形時,采集緩沖區(qū)內(nèi)容會被讀到顯示緩沖區(qū)中。設(shè)置好顯示參數(shù)后,CCS就可以從采集緩沖區(qū)讀取AcquisitionBufferSize長度的數(shù)據(jù)到顯示緩沖區(qū)并顯示數(shù)據(jù)了。選擇菜單View→Graph→Time/Frequency,會彈出圖形顯示設(shè)置窗口

CCS基本操作剖析(Profile)在實(shí)時性要求下,隨著代碼的增加,代碼的效率成為設(shè)計者關(guān)注的重要方面。Profile——有效的代碼效率評估工具,有利于程序代碼的優(yōu)化。

在CCS中可以統(tǒng)計某段代碼的執(zhí)行時間。代碼剖析不僅可迅速地評估程序的性能以優(yōu)化代碼,還可統(tǒng)計其它的處理器事件,如執(zhí)行跳轉(zhuǎn)的次數(shù)、子程序調(diào)用的次數(shù)和中斷次數(shù)等。

CCS基本操作PROFILE的啟動和界面CCS基本操作PROFILE的按鈕CCS基本操作范圍設(shè)定FILE:測試所有項(xiàng)目文件中的函數(shù)代碼效率FUNCTION;測試指定的函數(shù)RANGE;測試指定代碼范圍SETUP;測試指定函數(shù)或范圍內(nèi)去除SETUP部分剩余代碼的效率CCS基本操作PROFILE設(shè)定CCS基本操作PROFILE結(jié)果CCS基本操作注意事項(xiàng)PROFILE會影響目標(biāo)應(yīng)用執(zhí)行的實(shí)時性設(shè)置測試范圍時應(yīng)避免如下情況;CCS基本操作剖析時鐘(ProfileClock)使用剖析時鐘測量代碼執(zhí)行時間的方法:首先允許時鐘,選擇菜單Profile->EnableClock。選擇菜單Profile->ViewClock打開時鐘窗口。假定要測量A、B兩條指令間的執(zhí)行時間,那么在B至少4條指令的C處設(shè)置斷點(diǎn)。在A處設(shè)置斷點(diǎn)并運(yùn)行到該處,雙擊時鐘窗口使其清0,之后清除A斷點(diǎn)。運(yùn)行到C處并記下當(dāng)前的CLK值,該值為A、C之間程序的運(yùn)行時間T1。用同樣的方法測量B、C間的運(yùn)行時間T2,T1-T2即為斷點(diǎn)A、B之間的執(zhí)行時間。用這種方法可以避免由于設(shè)置斷點(diǎn)而引起的測量誤差。

CCS基本操作

Count:計數(shù)單位。InstructionCycleTime:指令周期,單位為ns。PipelineAdjustments:流水線調(diào)整花費(fèi)周期數(shù)。當(dāng)遇到斷點(diǎn)或暫停CPU執(zhí)行時,CPU必須刷新流水線,耗費(fèi)一定的CPU周期數(shù)。設(shè)置此參數(shù)可以獲得較好的測量精度。為了避免測量精度的降低,應(yīng)盡量減少暫停CPU的次數(shù)和設(shè)置斷點(diǎn)的個數(shù)。ResetOption:CLK的清0方式。選擇自動,CLK會在運(yùn)行目標(biāo)程序前自動清0,否則將不斷累加直到雙擊時鐘窗口將其清0。CCS基本操作6、顯示圖形Probe(探點(diǎn))

1)適合于算法的開發(fā),功能驗(yàn)證 2)可以完成這樣的功能從一個文件中讀入數(shù)據(jù)到一個DSP的緩沖區(qū)將一個DSP的緩沖區(qū)寫到文件中 3)探點(diǎn)類似于斷點(diǎn),又不同于斷點(diǎn)運(yùn)行到Probepoint,DSP會停頓下來完成一些動作后(讀寫文件),程序繼續(xù)運(yùn)行 4)文件輸入輸出的設(shè)置:FileFileI/O… 5)Probe的設(shè)置:類似斷點(diǎn)的設(shè)置(用工具條)示例0901CCS基本操作公共目標(biāo)文件格式COFF

公共目標(biāo)文件格式COFF(CommonObjectFileFormat)是當(dāng)前很流行的二進(jìn)制可執(zhí)行文件格式。TMS320系列DSP的目標(biāo)文件屬于該格式。

COFF格式文件的優(yōu)點(diǎn)是:模塊化文件格式將指令和數(shù)據(jù)按照段進(jìn)行組織和存儲程序的可讀行增強(qiáng)更容易編寫程序更便于移植程序更利于進(jìn)行模塊化的程序設(shè)計COFF文件的基本單元—段

Section(“段”)概念:在存儲器映像中占據(jù)連續(xù)空間的一塊代碼或數(shù)據(jù)。COFF文件的每個段都是獨(dú)立的。匯編語言程序中,COFF目標(biāo)文件包含三個默認(rèn)段:

.text段:包含可執(zhí)行代碼

.data段:包含已初始化的變量

.bss段:為未初始化的變量保留空間匯編器和鏈接器允許用戶創(chuàng)建、命名和鏈接自定義的段,這些段的使用與.data、.text和.bss段相同。目標(biāo)文件中的段與目標(biāo)存儲器之間的關(guān)系

目標(biāo)文件目標(biāo)存儲器.bss.data.textRAME2PROMROM段與目標(biāo)存儲器的對應(yīng)關(guān)系

已初始化段:包含有數(shù)據(jù)或程序代碼.text段——已初始化段;.data段——已初始化段;.sect段——已初始化段,由匯編器偽指令的建立自定義段未初始化段:在存儲空間中,為變量、堆棧等未初始化數(shù)據(jù)保留一段存儲空間

.bss段——未初始化段

.usect段——未初始化段,由匯編命令建立的命名段(自定義段)段的類型系統(tǒng)定義的段和用戶定義的段.text、.data和.bss為系統(tǒng)已定義好的段名用戶根據(jù)需要用.sect和.usect偽指令來定義段名,創(chuàng)建相應(yīng)的“段”段的類型已初始化段已初始化段包含可執(zhí)行代碼和已初始化的數(shù)據(jù)。這些段的內(nèi)容存放在目標(biāo)文件內(nèi),加載程序時放入DSP存儲器中。每個初始化段都可以獨(dú)立地重定位并可以引用其它段中定義的符號。共有三條偽指令可告訴匯編器將代碼和數(shù)據(jù)放入哪個段中。偽指令的格式如下:未初始化段未初始化段主要用于在存儲器中保留存儲空間,通常分配在RAM存儲器中。這些段在目標(biāo)文件中無實(shí)際內(nèi)容,僅保留存儲空間。程序可以在運(yùn)行時使用這些空間創(chuàng)建和存儲變量。未初始化段用.bss和.usect匯編偽指令建立:.bss偽指令:在.bss段內(nèi)保留空間..usect偽指令:在指定的未初始化的自定義段內(nèi)保留空間。symbol相當(dāng)于變量名。sizeinword保留的存儲單元長度(以字為單位)。匯編器對段的處理

匯編器對段的處理主要是確定匯編語言程序的各個部分屬于哪個特定的段。匯編器有五個偽指令供程序員用來組織程序的段:.bss、.usect、.text、.data和.sect。.bss和.usect偽指令創(chuàng)建未初始化段;.text、.data和.sect偽指令創(chuàng)建已初始化的段。若程序中未使用任何指令進(jìn)行指示,匯編器會將所有內(nèi)容都匯編到.text段中。

匯編器的作用是通過段偽指令區(qū)分出各個段,并將段名相同的語句匯編在一起在編寫匯編程序時,程序員用“段”偽指令來組織程序的代碼和數(shù)據(jù)匯編器第一次遇到新“段”時,將該“段”的段程序計數(shù)器(SPC)置為0,并將隨后的程序代碼或數(shù)據(jù)順序編譯進(jìn)該“段”中匯編器遇到同名“段”時,將它們合并,然后將隨后的程序代碼或數(shù)據(jù)順序編譯進(jìn)該“段”中匯編器對段的處理當(dāng)匯編器遇到.text、.data和.sect偽指令時,匯編器停止將隨后的程序代碼或數(shù)據(jù)順序編譯進(jìn)當(dāng)前“段”中,而是順序編譯進(jìn)遇到的“段”中當(dāng)匯編器遇到.bss和.usect偽指令時,匯編器并不結(jié)束當(dāng)前“段”,而只是簡單地暫時脫離當(dāng)前“段”,隨后的程序代碼或數(shù)據(jù)仍將順序編譯進(jìn)當(dāng)前“段”中。.bss和.usect偽指令,可以出現(xiàn)在.text、.data或.sect“段”中的任何位置,它們不會影響這些“段”的內(nèi)容匯編器對段的處理例:段命令應(yīng)用本例為一個匯編語言程序經(jīng)過匯編后的.lst文件.lst由4部分組成:第1部分:源程序的行號第2部分:段程序計數(shù)器第3部分:目標(biāo)代碼第4部分:源程序參見spru186:2IntroductiontoCommonObjectFileFormatC:\ti6000\docs\pdf\spru186k.pdf在此例中,共建立了5個段: .text

段內(nèi)含15個32-bit字的程序代碼 .data段內(nèi)有6個字的已初始化數(shù)據(jù) vectors

用.sect生成的自定義段內(nèi)有2個字的已初始化數(shù)據(jù) .bss

在存儲器中為變量保留44個字節(jié)

Newvars用.usect生成的自定義段,在存儲器中為變量保留了8個字節(jié)

鏈接器對段的處理鏈接器對“段”的處理有2個方面:將輸入“段”組合產(chǎn)生輸出“段”將多個.obj文件中的同名段合并一個輸出段也可將不同名的段合并產(chǎn)生一個輸出段將輸出段定位到實(shí)際的存儲空間中MEMORY命令:用于掃描系統(tǒng)實(shí)際的硬件資源SECTIONS命令:用于描述程序中定義了哪些段,這些段是否需要合并?如何合并?合并產(chǎn)生的輸出段定位到實(shí)際硬件資源的何處?鏈接器通過*.cmd文件來獲得上述這些信息鏈接器還檢查各輸出“段”是否重疊、是否超界,避免了人工檢查邊界帶來的隱患鏈接器對輸入段的處理鏈接命令文件

鏈接命令文件(LinkerCommandFiles),以后綴.cmd結(jié)尾,簡稱CMD文件。通過將鏈接的信息放在CMD文件中,在多次使用相同的鏈接信息時,可以方便的調(diào)用。在CMD文件中包含兩個重要的偽指令MEMORY和SECTIONS,用來指定實(shí)際應(yīng)用中的存儲器結(jié)構(gòu)和地址的映射。

CMD文件一般包括:輸入/輸出定義:

-l*.lib//鏈接器要鏈接的庫文件

-m*.map//鏈接器生成的交叉索引文件

-o*.out//鏈接器生成的可執(zhí)行代碼

-stack100//定義堆棧大?。J(rèn)值為1K字,必須保證有足夠的空間用于堆棧,否則會發(fā)生溢出現(xiàn)象而導(dǎo)致程序的癱瘓)鏈接器選項(xiàng):控制鏈接操作,必須以短劃線(-)打頭,后面加一參數(shù),如-o、-m、-l、-stack和-heap等。

MEMORY偽指令:定義目標(biāo)存儲器的配置,描述系統(tǒng)實(shí)際的硬件資源SECTIONS偽指令:控制如何建立和分配段,描述“段”是如何定位的鏈接命令文件

MEMORY命令描述目標(biāo)系統(tǒng)的存儲空間MEMORY{PMEM:o=00000000h,l=00010000hBMEM:o=00010000h,l=00030000h}MEMORY命令namesoriginsLengthsMEMORY{存儲器空間名:o=十六進(jìn)制存儲器起始地址,l=十六進(jìn)制存儲器長度}SECTIONS命令描述“段”如何定位SECTIONS{.text >PMEM.csldata >PMEM.stack >PMEM.far >PMEM.switch >BMEM.tables >BMEM.data >BMEM.bss >BMEM.sysmem >BMEM.cinit >PMEM.const >BMEM.cio >BMEM}SECTIONS{段名>存儲器空間名}鏈接器命令文件常用段含義段名描述已初始化段,可鏈入系統(tǒng)的ROM或RAM中.cinit存放C程序中的變量初值和常量.const存放C程序中的字符常量、浮點(diǎn)常量和用const聲明的常量.switch大型開關(guān)switch語句的跳轉(zhuǎn)表.far為C程序中用far聲明的全局和靜態(tài)變量保留空間.text存放C程序的代碼和常數(shù)未初始化段,可鏈入RAM中.bss為全局變量(函數(shù)外定義)和靜態(tài)變量(static)保留空間.stack為C程序系統(tǒng)堆棧保留存儲空間,用于保存返回地址、函數(shù)間的參數(shù)傳遞、存儲局部變量和保存中間結(jié)果.sysmem全局堆,用于C程序中malloc、calloc和realloc函數(shù)動態(tài)分配存儲空間。若未用這些函數(shù)則不創(chuàng)建該段。C編譯器對C程序編譯后也產(chǎn)生已初始化段和未初始化段兩種,具體的段名稍有不同。除了不使用.data段之外,還產(chǎn)生了一些新的段。.sysmem段:對于比較大的數(shù)據(jù)變量,一般利用這種動態(tài)分配的方式在sysmem段中分配這些變量的空間,以便節(jié)省.bss段的空間。如:structbigtable[1000]是在.bss段中分配1000個字而structbig*table;table=(structbig*)malloc(1000*sizeof(structbig))是在段.sysmem中分配了1000個字的存儲空間鏈接器命令文件常用段含義C語言中自定義段的方式#pragma是標(biāo)準(zhǔn)C中保留的預(yù)處理命令。用戶可以通過#pragma來定義自己的段。#pragma的語法是:#pragmaCODE_SECTION(symbol,"sectionname")#pragmaDATA_SECTION(symbol,"sectionname")

說明:

symbol是符號,可以是函數(shù)名也可以是全局變量名。

sectionname是用戶自己定義在程序空間或數(shù)據(jù)空間的段名。

CODE_SECTION用來定義代碼段,該段鏈接到不同于.text段的獨(dú)立區(qū)域DATA_SECTION用來定義數(shù)據(jù)段,鏈接到不同于.bss段的獨(dú)立區(qū)域

#pragma必須在符號被定義和使用前使用,并且不能在函數(shù)體內(nèi)聲明#pragma。利用CODE_SECTION定義一個段codeA

,在該段里定義一個函數(shù)funcA

。C語言中自定義段的方式

#pragmaCODE_SECTION(funcA,”codeA”)

intfuncA(inta)

{

inti;

return(i=a); }編譯后產(chǎn)生的匯編程序如下:.sect”codeA”.global_funcA_main:省略創(chuàng)建數(shù)據(jù)段my_sect,將全局?jǐn)?shù)組buffer2的內(nèi)容分配到該段

#pragmaDATA_SECTION(buffer2,“my_sect”)charbuffer1[512];charbuffer2[512];

編譯以后將產(chǎn)生如下匯編代碼:

.global_buffer1.bss_buffer1,512.global_buffer2_buffer2.usect“my_sect”,512

C語言中自定義段的方式

a.objb.objc.obj /*鏈接器的輸入文件*/-oprog.out /*鏈接選項(xiàng):生成的可執(zhí)行文件為prog.out*/-mprog.map /*鏈接選項(xiàng):生成的映像文件為:prog.map*/MEMORY /*MEMORY偽指令*/{MyRAM:origin=0100hlength=0100hMyROM:origin=01000hlength=0200h}SECTIONS /*SECTIONS偽指令*/{.text:>MyROM.data.>MyROM.bss.>MyRAM}鏈接命令文件

-osample.out//定義輸出文件名-msample.map//定義存儲器空間分配文件名-stack100//定義堆棧大小-lrts6700.lib//引用庫文件MEMORY{ PMEM: o=00000000h l=00010000h BMEM: o=00010000h l=00030000h}SECTIONS{ .text >PMEM .csldata >PMEM .stack >PMEM .far >PMEM .switch >BMEM .tables >BMEM .data >BMEM .bss >BMEM .sysmem >BMEM .cinit >PMEM .const >BMEM .cio >BMEM}鏈接命令文件File1.obj.text1.data1.bss1table_1(初始化的命名段)u_vars1(未初始化的命名段)File2.obj.text2.data2.bss2table_2(初始化的命名段)u_vars2(未初始化的命名段)FFT(初始化的命名段)程序存儲器數(shù)據(jù)存儲器.text.text1.text2.data.data1.data2.bss.bss1.bss2tabletable_1table_2u_vars1u_vars1u_vars2FFTFFT沒有使用沒有配置沒有配置沒有使用鏈接命令文件

程序項(xiàng)目Project的基本結(jié)構(gòu)主程序main.c鏈接命令文件.cmdC運(yùn)行庫文件rts6xxx.libC頭文件Vectors.asmGEL文件.gel

3.2C語言程序基礎(chǔ)幾個文件的說明*.c文件:其中的main()函數(shù)的作為C程序的入口點(diǎn);鏈接器命令文件*.cmd,該文件定義DSP的存儲空間以及代碼段、數(shù)據(jù)段是如何分配到這些存儲空間的;幾個文件的說明C運(yùn)行支持庫

由C頭文件.h和庫文件rts6xxx.lib組成。包含符合ANSI標(biāo)準(zhǔn)C運(yùn)行支持功能。支持函數(shù)、編譯工具函數(shù)、浮點(diǎn)運(yùn)算函數(shù)以及能夠訪問主機(jī)操作系統(tǒng)的CI/O函數(shù)。以及C環(huán)境下的初始化函數(shù)c_int00()函數(shù)。C運(yùn)行庫頭文件位于CCS安裝目錄下的\C6000\Cgtools\includeC:\ti6000C運(yùn)行庫文件位于\C6000\Cgtools\libC:\ti6000C運(yùn)行庫的源代碼rts.src在\C6000\Cgtools\lib子目錄中C:\ti6000\c6000\cgtools\libVectors.asm文件

如果用戶程序要寫進(jìn)EPROM,并在上電后直接運(yùn)行,則必須有該文件該文件中的代碼將作為IST(中斷服務(wù)表),并且必須被連接命令文件.cmd分配到0地址。DSP復(fù)位之后,首先跳到0地址,復(fù)位向量對應(yīng)的代碼必須跳轉(zhuǎn)到C運(yùn)行環(huán)境的入口點(diǎn)_c_int00(該入口點(diǎn)在連接的rts6xxx.lib庫中)。然后在_c_int00()函數(shù)中完成諸如初始化堆棧指針和頁指針以及初始化全局變量等操作,最后調(diào)用main()函數(shù),執(zhí)行用戶的功能。幾個文件的說明GEL文件GEL(General

ExtentionLanguage)語言是一種類似于C語言的解釋性語言GEL語言是C語言的一個子集GEL語言用于創(chuàng)建GEL函數(shù)以擴(kuò)展CCS的用途使用GEL語言可以訪問目標(biāo)DSP存儲器,還可以為GEL菜單增加新的功能選項(xiàng),特別是在用于定制用戶工作區(qū)和自動測試時非常有效在實(shí)際使用中,只需按照GEL語法創(chuàng)建GEL函數(shù)并將其加載到CCS中即可GEL函數(shù)可在任何能鍵入表達(dá)式的地方調(diào)用,甚至還可以將GEL函數(shù)添加到Watch窗口,這樣在每個斷點(diǎn)處都能自動執(zhí)行該函數(shù)幾個文件的說明GEL函數(shù)庫C27x_E1_memory_mapC27x_E3_memory_mapGEL_OpenWindow

GEL_TextOut

StartUp()OnTargetConnect()OnPreFileLoaded()OnFileLoaded()OnReset()OnRestart()OnHalt()GEL_MapAdd()GEL_MapAddStr()GEL_MapDelete()GEL_MapOn()GEL_MapOff()GEL_MapReset()幾個文件的說明GEL函數(shù)、文件的使用GelsolidGEL文件的使用幾個文件的說明GEL函數(shù)幾個文件的說明GEL函數(shù)的使用幾個文件的說明CCS常用文件文件名描述*.cC程序源文件*.asm匯編程序源文件*.sa線性匯編程序源文件vectors.asm中斷向量表文件*.hC程序的頭文件,包含DSP/BIOSAPI模塊的頭文件*.lib庫文件*.cmd鏈接命令文件*.obj由源文件編譯或匯編而得的目標(biāo)文件*.out經(jīng)完整的編譯、匯編以及鏈接后生成的可執(zhí)行文件*.map經(jīng)完整的編譯、匯編以及鏈接后生成的空間分配文件*.pjt存儲環(huán)境設(shè)置信息的工程文件C運(yùn)行環(huán)境寄存器使用規(guī)則C編譯器如何使用DSP的寄存器函數(shù)進(jìn)入和返回前,寄存器的保護(hù)函數(shù)調(diào)用規(guī)則函數(shù)間的參數(shù)傳遞通過寄存器和系統(tǒng)堆棧進(jìn)行調(diào)用函數(shù)與被調(diào)用函數(shù)必須對各自的寄存器進(jìn)行保護(hù)從被調(diào)用函數(shù)返回前,被調(diào)用函數(shù)必須歸還所有已占用的堆棧空間C和ASM混合編程C和ASM混合編程時,必須遵循寄存器使用規(guī)則和函數(shù)調(diào)用規(guī)則被C調(diào)用的ASM函數(shù),其函數(shù)名前應(yīng)加“_”中斷服務(wù)程序ASM編寫的中斷服務(wù)程序必須對所有用到寄存器進(jìn)行保護(hù),以免破壞C運(yùn)行環(huán)境C編寫的中斷服務(wù)程序應(yīng)用interrupt關(guān)鍵字聲明C運(yùn)行環(huán)境系統(tǒng)初始化在運(yùn)行C程序前,必須建立C運(yùn)行環(huán)境,此任務(wù)由C引導(dǎo)程序_c_int00完成_c_int00包含在庫函數(shù)中,build時自動將其鏈接進(jìn)可執(zhí)行程序中,程序的入口地址必須設(shè)為_c_int00起始地址_c_int00的源程序存放在由rts.src分離出來的boot.asm中,用戶可根據(jù)需要修改設(shè)置堆棧指針初試化全局變量:將.cinit”段“中數(shù)據(jù)拷貝到.bss段中調(diào)用C程序的主函數(shù)main()中斷向量表

.ref_timer0_isr.ref_exint4_isr.ref_exint6_isr.ref_c_int00.globalRESET_RST.sect"vectors“RESET_RST: mvkl.S2_c_int00,B0 mvkh.S2_c_int00,B0 B.S2B0 NOP5NMI_RST:NOP8RESV1: NOP8RESV2:NOP8INT4: b_exint4_isr NOP7INT5: NOP8INT6: b_exint6_isr NOP7INT7: NOP8INT8: NOP8INT9: NOP8INT10: NOP8INT11: NOP8INT12: NOP8INT13: NOP8INT14: b_timer0_isr NOP7INT15:NOP8

C語言語法接近自然語言,其可讀性強(qiáng)、便于理解,在編制、修改、實(shí)現(xiàn)算法方面比用匯編語言開發(fā)容易。匯編語言掌控系統(tǒng)硬件的能力強(qiáng)于C語言,設(shè)計出來的程序更加貼近硬件特性,能將硬件效能發(fā)揮到極致。因此,一般情況下用C語言設(shè)計應(yīng)用程序的總體框架、解決人機(jī)接口和對速度效率要求不太高的復(fù)雜算法,用匯編語言設(shè)計強(qiáng)調(diào)速度的算法。3.3混合語言編程

C語言和匯編語言的混合編程有三種形式:

在編寫C語言代碼中插入?yún)R編語句,只需在匯編語句兩邊加上雙引號和括號,在括號前面加上標(biāo)識asm,如:

asm(“NOP5”);

在編寫C代碼的過程中調(diào)用直接映射為內(nèi)聯(lián)的C6000指令的特殊函數(shù),內(nèi)聯(lián)函數(shù)用前下劃線表示,使用時同調(diào)用C語言的庫函數(shù)一樣調(diào)用它,如:

m=_int_abs(n);

用匯編代碼編寫?yīng)毩⒌暮瘮?shù),在C代碼中直接調(diào)用混合編程的方法采用C語言和匯編語言混合編程時,定義了一套嚴(yán)格的寄存器規(guī)則,調(diào)用函數(shù)保護(hù)了寄存器A0~A9和B0~B9,但當(dāng)使用到寄存器A10~A15或B10~B15的時候,則必須自行對它們進(jìn)行保護(hù)。在默認(rèn)情況下:

A3用作返回結(jié)構(gòu)指針寄存器

B3用作被調(diào)用函數(shù)返回地址寄存器

A15用作幀指針寄存器

B14用作數(shù)據(jù)頁指針寄存器

B15用作堆棧指針寄存器混合編程的接口規(guī)范

調(diào)用函數(shù)將參數(shù)傳遞到被調(diào)用函數(shù)中,前十個參數(shù)將被從左到右依次放入寄存器A4、B4、A6、B6、A8、B8、A10、B10、A12和B12如果傳遞的參數(shù)是長型、雙精度型或者是長雙精度型,則將參數(shù)依次放入寄存器組A5:A4、B5:B4、A7:A6等,并將剩下的變量按相反的順序放在堆棧里。如果傳遞的參數(shù)是一個結(jié)構(gòu)類型的參數(shù),則傳遞的是該結(jié)構(gòu)類型的地址

如果在C/C++調(diào)用函數(shù)中做了正確的函數(shù)返回聲明,則被調(diào)用的匯編函數(shù)可以返回有效值。如果返回值是整型或32位的浮點(diǎn)型,則放在寄存器A4中返回;如果返回值是雙精度或是長雙精度型,則放在A5:A4中返回;如果返回值是一個結(jié)構(gòu)類型,則將其結(jié)構(gòu)的地址放在A3中返回。

混合編程的接口規(guī)范

對于只在匯編語言模塊中用到的變量標(biāo)識符,不能從下劃線開始。任何在匯編語言中聲明的對象都要使其在C/C++中是可訪問的,在匯編語言中必須用.def或.global將其聲明為外部變量。在匯編語言中要引用C/C++函數(shù)或?qū)ο髸r,必須用.ref或.global將C/C++對象聲明。中斷子程序必須把該子程序?qū)⒁玫降乃屑拇嫫鬟M(jìn)行入棧處理。除了全局變量的初始化外,匯編語言的模塊不得因?yàn)槿魏文康亩褂?cinit段。匯編代碼的結(jié)束需用指令“BB3”將程序執(zhí)行從被調(diào)用函數(shù)返回到C語言調(diào)用函數(shù)中?;旌暇幊痰慕涌谝?guī)范打開工程Complex.pjt,可以看到該工程包含如下文件:

main.c:C語言編寫的主程序文件,調(diào)用使用匯編語言編寫的延時程序asm_delay()函數(shù)進(jìn)行精確延時,調(diào)用asm_add()函數(shù)進(jìn)行加法運(yùn)算

delay.asm:匯編語言編寫的延時函數(shù)

add.asm:匯編語言編寫的加法函數(shù)示例0903混合編程示例程序3.4啟動(Bootload)大部分程序大于1K字節(jié),所以在啟動代碼起始的1K字節(jié)區(qū)域內(nèi)包含了一段Flash啟動程序。當(dāng)DSP加電啟動時,它首先從Flash地址(CE1,0x90000000)起始處復(fù)制1K字節(jié)的數(shù)據(jù)到DSP內(nèi)部地址0處,然后跳到地址0處開始執(zhí)行程序。其中關(guān)鍵是將boot.asm的代碼放置在0x0-0x400的1K區(qū)域內(nèi),中斷向量表放置在0x400以后的區(qū)域,程序代碼放置在0x600以后的區(qū)域。設(shè)置寄存器ISTP=0x400,與中斷向量表的偏移量對齊。同時要保證boot.asm文件中CODE_SIZE的數(shù)值大于程序的長度。3.4啟動(Bootload)FLASH_START.equ0x90000400;flashstartaddressCODE_START.equ0x00000400;startofnonbootcodeCODE_SIZE.equ0x00010000;applicationcodesizeinbyte.sect

"bootload"

_boot_start:MVKLFLASH_START,B4;flashstartaddress->B4MVKHFLASH_START,B4 MVKLCODE_START,A4;appscodestartaddress->A4 MVKHCODE_START,A4 ZEROA1

MVKLCODE_SIZE,B6 MVKHCODE_SIZE,B6 _boot_loop1: LDW*B4++,A0 NOP5 STWA0,*A4++ NOP5 ADD1,A1,A1 CMPLTA1,B6,B0 NOP [B0]b_boot_loop1 NOP5 B_c_int00NOP5簡單程序開發(fā)流程(1)建立項(xiàng)目ProjectNew選擇一個目錄位置,生成一個項(xiàng)目文件test.pjt簡單程序開發(fā)流程(2)添加文件ProjectAddFilestoProject…添加文件(.c,.lib,.cmd,.sa,.asm…)簡單程序開發(fā)流程(3)代碼編輯雙擊項(xiàng)目窗口的文件名,開始編輯源程序簡單程序開發(fā)流程(4)設(shè)置編譯選項(xiàng)ProjectOptions簡單程序開發(fā)流程(5)Build查找錯誤ProjectBuild簡單程序開發(fā)流程(5)簡單的調(diào)試加載程序FileLoadProgram…設(shè)置斷點(diǎn),通過WatchWindow觀察變量單步執(zhí)行簡單程序開發(fā)流程(6)Profile(剖析)ProfileEnableClock,startnewsession基本應(yīng)用程序框架intmain(){intnum=1;Sys_Initialize(); while(1){ switch(num){ case1: num=2; break; case2: num=1; break; default: break; }}; }在主程序main()函數(shù)里,首先進(jìn)行初始化,隨后進(jìn)入死循環(huán)while(1),在中斷函數(shù)里響應(yīng)各種事件,然后在死循環(huán)while(1)里執(zhí)行各種相應(yīng)的任務(wù)軟件開發(fā)平臺傳統(tǒng)軟件開發(fā)方法用ASM或ASM和C混合編程,從零開始編寫硬件資源頭文件DSP片內(nèi)寄存器資源頭文件描述片內(nèi)寄存器地址描述片內(nèi)寄存器控制/狀態(tài)位域板上資源頭文件描述片外外設(shè)寄存器地址描述片外外設(shè)寄存器控制/狀態(tài)位域編寫應(yīng)用專用的外設(shè)驅(qū)動程序片內(nèi)/片外外設(shè)初試化程序片內(nèi)/片外外設(shè)操作程序編寫應(yīng)用專用的算法編寫主控程序順序、循環(huán)執(zhí)行軟件開發(fā)平臺TI免費(fèi)提供的基礎(chǔ)軟件CSL庫:ChipSupportLibrary芯片支持庫定義DSP片內(nèi)外設(shè)資源,實(shí)現(xiàn)片內(nèi)外設(shè)基本操作DDK:DriverDevelopmentKit設(shè)備驅(qū)動程序開發(fā)包設(shè)計標(biāo)準(zhǔn)的設(shè)備驅(qū)動程序模型,方便開發(fā)新的設(shè)備驅(qū)動程序DSPLIB/IMGLIB:SignalProcessingLibrary數(shù)學(xué)運(yùn)算、矩陣運(yùn)算、FFT、濾波、卷積、相關(guān)等信號處理函數(shù)壓縮、分析、濾波和格式轉(zhuǎn)換等圖像/視頻處理函數(shù)DSP/BIOS:嵌入式實(shí)時、多任務(wù)操作系統(tǒng)實(shí)時、多任務(wù)內(nèi)核實(shí)時分析ReferenceFrameworks:程序參考架構(gòu)C程序初試骨架,通過其可以迅速創(chuàng)建特定的應(yīng)用程序XDAIS:DSPAlgorithmStandard,DSP算法標(biāo)準(zhǔn)規(guī)定一系列算法編程規(guī)則,遵循這些規(guī)則的算法可以相互調(diào)用軟件開發(fā)平臺TI倡導(dǎo)的DSP軟件架構(gòu)UserApplicationTargetBoardDSPCSLDSP/BIOS?

Kernel/SchedulerDriverSignalProcessingLibraryTimerMcBSPEMIFCPUTMS320DSPAlgorithmStandardReferenceFramework3.5芯片支持庫CSL為什么要設(shè)計CSLDSP片上外設(shè)種類及其應(yīng)用日趨復(fù)雜提供一組標(biāo)準(zhǔn)的方法用于訪問和控制片上外設(shè)免除用戶編寫配置和控制片上外設(shè)所必需的定義和代碼什么是CSL:ChipSupportLibrary用于配置、控制和管理DSP片上外設(shè)已為C6000和C5000系列DSP設(shè)計了各自的CSL庫CSL庫函數(shù)大多數(shù)是用C語言編寫的,并已對代碼的大小和速度進(jìn)行了優(yōu)化CSL庫是可裁剪的:即只有被使用的CSL模塊才會包含進(jìn)應(yīng)用程序中CSL庫是可擴(kuò)展的:每個片上外設(shè)的API相互獨(dú)立,增加新的API,對其他片上外設(shè)沒有影響CSL的特點(diǎn)片上外設(shè)編程的標(biāo)準(zhǔn)協(xié)議:定義一組標(biāo)準(zhǔn)的APIs:函數(shù)、數(shù)據(jù)類型、宏對硬件進(jìn)行抽象,提取符號化的片上外設(shè)描述定義一組宏,用于訪問和建立寄存器及其域值基本的資源管理對多資源的片上外設(shè)進(jìn)行管理已集成到DSP/BIOS中通過圖形用戶接口GUI對CSL進(jìn)行配置使片上外設(shè)容易使用縮短開發(fā)時間,增加可移植性CSL的結(jié)構(gòu)C6000?DSPModulesCACHECHIPDATDMAEMIF-EMIFA-EMIFBGPIOHPIIRQMCBSPPCIPWRTCPTIMERUTOP(UTOPIA)VCPXBUSC55x?DSPModulesADCCHIPDATDMAEMIFGPIOIRQI2CMCBSPPLLPWRRTCUSBWDTIMC54x?DSPModulesCHIPDAADATDMAEBUSGPIOHPIIRQMCBSPPLLPWRUARTWDTIM通用外設(shè)模塊外設(shè)(PER)描述 IncludeFile ModuleSupportSymbolEDMA Enhanceddirectmemoryaccessmodule csl_edma.h EDMA_SUPPORT EMIF Externalmemoryinterfacemodule csl_emif.h EMIF_SUPPORT GPIO General-Purposeinput/outputmodule csl_gpio.h GPIO_SUPPORTHPI Hostportinterfacemodule csl_hpi.h HPI_SUPPORT I2C Inter?Integratedcircuitmodule csl_i2c.h I2C_SUPPORT IRQ Interruptcontrollermodule csl_irq.h IRQ_SUPPORT McASP Multichannelaudioserialportmodule csl_mcasp.h MCASP_SUPPORT McBSP Multichannelbufferedserialportmodule csl_mcbsp.h MCBSP_SUPPORT TIMER Timermodule csl_timer.h TIMER_SUPPORT

CSL命名規(guī)則和數(shù)據(jù)類型對象類型 名稱NamingConvention

Function PER_funcName() Variable PER_varName Macro PER_MACRO_NAME Typedef PER_Typename FunctionArgument funcArg StructureMember memberName

DataType Description

Uint8 unsignedchar Uint16 unsignedshort Uint32 unsignedint Uint40 unsignedlong Int8 char Int16 short Int32 int Int40 long

通用的CSL函數(shù)handle=PER_open(channelNumber,[priority]flags)

功能:打開一個外設(shè)通道,根據(jù)標(biāo)志執(zhí)行相應(yīng)的操作。使用通道前必須調(diào)用此函數(shù),返回一個唯一的設(shè)備句柄用于后續(xù)API調(diào)用。優(yōu)先級(priority)參數(shù)僅適用于DAT模塊。 PER_config([handle,]*configStructure)

功能:將配置結(jié)構(gòu)的值寫入外設(shè)寄存器。使用整型常量、整型變量、CSL符號常量PER_REG_DEFAULT、PER_REG_RMK宏生成的合并域值進(jìn)行初始化。PER_configArgs([handle,]regval_1,...regval_n)

功能:寫值(regval_n)到外設(shè)寄存器??蓪懼蛋ǎ赫统A?、整型變量、CSL符號常量PER_REG_DEFAULT、PER_REG_RMK宏生成的合并域值。 PER_reset([handle])

功能:復(fù)位外設(shè),將其所有值恢復(fù)到上電缺省值。

PER_close(handle)

功能:關(guān)閉由PER_open()函數(shù)打開的外設(shè)通道。通道寄存器恢復(fù)上電初始值,清除所有未執(zhí)行的中斷。通過寄存器來實(shí)現(xiàn)外設(shè)初始化CSL提供了兩種函數(shù)來初始化外設(shè)的寄存器:PER-config()用來初始化控制PER外設(shè)的寄存器,其中PER是CSL模塊之一。這個函數(shù)需要一個地址來作為他的參數(shù)。這個地址指出了這個結(jié)構(gòu)的位置,他代表了外設(shè)寄存器的值。每一個外設(shè)模塊都定義了他的配置結(jié)構(gòu)數(shù)據(jù)類型,包括PER-config()函數(shù)。PER_ConfigMyConfig={reg0,reg1,…}; … PER_config(&MyConfig); PER-configArgs()允許將個別寄存器的值傳給函數(shù)的變量,然后將獨(dú)立的值傳給寄存器。PER_configArgs(reg0,reg1,…);通用CSL宏

PER表示外設(shè),如EDMAREG表示寄存器名,如PRICTL0,AUXCTLFIELD表示寄存器域,如ESIZE

regval

表示外設(shè)域生成宏P(guān)ER-FMK()產(chǎn)生的整型常量,整型變量,符號常量(PER_REG_DEFAULT),或者融合域值

fieldval

表示的是整常量,整型變量,或者符號常數(shù)(PER_REG_FIELD_SYMVAL)x表示整型常量,整型變量

sym表示符號常量通用CSL宏P(guān)ER_REG_RMK(fieldval_n,...fieldval_0)

功能:產(chǎn)生外設(shè)寄存器值;_RMK宏基于位域,使構(gòu)建寄存器值變得很簡單。_RMK宏使用規(guī)則:域必須可寫。首先指定域參數(shù)的最高有效位(MSB),不管用到與否,必須包含所有可寫域的值。如果所傳值超出特定域所允許的位寬,_RMK宏將截斷該域值。PER_RGET(REG)功能:返回外設(shè)寄存器值。 PER_RSET(REG,regval)功能:將值寫入外設(shè)寄存器。 PER_FMK(REG,FIELD,fieldval)

功能:可與其他_FMK宏的結(jié)果進(jìn)行或(OR)操作后,生成移位的fieldval值,對REG寄存器進(jìn)行初始化。作為_RMK宏的替代者,該宏允許初始化REG寄存器中的幾個域,而不像_RMK宏那樣必須初始化REG寄存器的所有域。PER_FGET(REG,FIELD)功能:返回外設(shè)寄存中指定域(FIELD)的值。 PER_FSET(REG,FIELD,fieldval)功能:將fieldval寫入外設(shè)寄存器中指定域(FIELD)。PER_REG_ADDR(REG)功能:如果可用,取得外設(shè)寄存器(REG)的內(nèi)存地址(或子地址) PER_FSETS(REG,FIELD,sym)功能:將符號值寫入外設(shè)指定域中。PER_FMKS(REG,FIELD,symmacro)功能:可與其他_FMK/_FMKS宏的結(jié)果進(jìn)行或(OR)操作,生成移位的符號值,對REG寄存器進(jìn)行初始化。通用CSL宏

PER_ADDRH(h,REG)Returnstheaddressofamemory-mappedregisterforagivenhandle. PER_RGETH(h,REG)Returnsthevalueofaregisterforagivenhandle. PER_RSETH(h,REG,x) Setstheregistervaluetoxforagivenhandle. PER_FGETH(h,REG,FIELD)Returnsthevalueofthefieldforagivenhandle. PER_FSETH(h,REG,FIELD,x)Setsthefieldvaluetoxforagivenhandle. PER_FSETSH(h,REG,FIELD,SYM) Setsthefieldvaluetothesymbolvalueforagivenhandle. CSL符號常量值PER_REG_DEFAULT 寄存器的缺省值,復(fù)位操作后對應(yīng)的寄存器值或者復(fù)位失效后歸零。 PER_REG_FIELD_SYMVAL

該符號常量用于指定特定外設(shè)寄存器中某個域的值。符號值的詳細(xì)信息請參見附錄B:CSLRegisters PER_REG_FIELD_DEFAULT 域的缺省值,復(fù)位操作后對應(yīng)的寄存器值或者復(fù)位失效后歸零。

使用CSL句柄使用函數(shù)PER_open()來打開設(shè)備,獲得一個句柄Handle,若打開設(shè)備失敗,那么PER_open()函數(shù)返回INV。使用函數(shù)PER_close()來關(guān)閉設(shè)備。

EDMA_Handle

myEdma;/*DefinesaDMA_Handleobject,myEdma*//*Oncedefined,theCSLhandleobjectisinitializedbyacalltoPER_open.*/myEdma=EDMA_open(EDMA_CHA0,EDMA_OPEN_RESET);/*OpenEDMAchannel0*//*ThecalltoDMA_openinitializesthehandle,myDma.ThishandlecanthenbeusedincallstootherAPIfunctions.*/if(myEdma!=INV){

EDMA_start(myEdma);/*Begintransfer*/

EDMA_close(myEdma);/*FreeDMAchannel*/}DSP/BIOS操作系統(tǒng)DSP/BIOS是一個實(shí)時操作系統(tǒng)RTOS提供通常的RTOS的功能(任務(wù)調(diào)度,任務(wù)間通訊)提供驅(qū)動程序模型,層次化地設(shè)計應(yīng)用程序DSP/BIOS以CCS插件的形式提供一些實(shí)時分析工具程序跟蹤:觀察任務(wù)的調(diào)度、切換性能監(jiān)視:觀察CPU的負(fù)載狀態(tài)統(tǒng)計:對事件做統(tǒng)計提供RTDX(實(shí)時數(shù)據(jù)交換),不打斷DSP運(yùn)行的情況下實(shí)現(xiàn)主機(jī)和DSP的數(shù)據(jù)交換DSP/BIOS功能搶先型實(shí)時、多任務(wù)操作系統(tǒng)內(nèi)核基于優(yōu)先級的、搶先型實(shí)時調(diào)度程序支持多線程管理與調(diào)度支持4種線程類型:HWI、SWI、TSK、IDL支持3種作業(yè)間的通信方式:Mailboxes、Semaphores、Queues支持周期函數(shù),方便實(shí)現(xiàn)固定時間間隔的數(shù)據(jù)采集,簡化多速率系統(tǒng)的設(shè)計提供存儲器管理,實(shí)現(xiàn)動態(tài)存儲器分配實(shí)時分析模塊分析信息實(shí)時獲取、傳輸和顯示,為早期的系統(tǒng)級排錯提供幫助DSP/BIOS模塊中內(nèi)含分析信息的實(shí)時獲取功能分析信息的實(shí)時傳輸由RTDX(Real-TimeDataExchange)技術(shù)實(shí)現(xiàn),完成目標(biāo)DSP與主機(jī)之間的實(shí)時通信,C6000RTDX的帶寬為20KByte,RTDX是在idle作業(yè)期間完成,所以對程序執(zhí)行速度的影響最小主機(jī)可以顯示:事件記錄、線程執(zhí)行順序、執(zhí)行次數(shù)的最大值或平均值和總的CPU負(fù)載等信息DSP/BIOS使用為了方便使用,TI提供一個可視化的配置工具,用于配置實(shí)際系統(tǒng)中所需的DSP/BIOS模塊DSP/BIOS是可裁剪的,只有被應(yīng)用程序使用的模塊才會被鏈接到應(yīng)用程序中DSP/BIOS開銷?。捍a大?。?KWordsCPU占用:1MIPSDSP/BIOS采用標(biāo)準(zhǔn)的API,所以不同系列DSP之間的移植容易DSP/BIOS集成在CCS中,無需使用許可費(fèi)

DDK(DriverDevelopmentKit)TI提供DDK的目的標(biāo)準(zhǔn)的設(shè)備驅(qū)動程序模型,用戶無需從零開始編寫設(shè)備驅(qū)動程序DDK是在CSL基礎(chǔ)上對外設(shè)I/O進(jìn)行更高層次的抽象TI免費(fèi)提供DDK的源代碼、庫及相關(guān)文檔,可從TI網(wǎng)站上免費(fèi)下載設(shè)備驅(qū)動程序模型(IOM)將設(shè)備驅(qū)動程序分為2個部分與設(shè)備相關(guān)的:“迷你”驅(qū)動程序(mini-driver)與設(shè)備無關(guān)的:“類”驅(qū)動程序(class-driver)DDK(DriverDevelopmentKit)“類”驅(qū)動程序設(shè)備驅(qū)動程序的上層抽象,使其與特定設(shè)備無關(guān),為應(yīng)用程序提供通用的接口3大類“類”驅(qū)動程序:SIO、PIP和GIOSIO:流I/O接口,由S

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論