DSP軟件開(kāi)發(fā)與C語(yǔ)言編程課件_第1頁(yè)
DSP軟件開(kāi)發(fā)與C語(yǔ)言編程課件_第2頁(yè)
DSP軟件開(kāi)發(fā)與C語(yǔ)言編程課件_第3頁(yè)
DSP軟件開(kāi)發(fā)與C語(yǔ)言編程課件_第4頁(yè)
DSP軟件開(kāi)發(fā)與C語(yǔ)言編程課件_第5頁(yè)
已閱讀5頁(yè),還剩153頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章

DSP的軟件開(kāi)發(fā)與C語(yǔ)言編程本章內(nèi)容:4.1DSP開(kāi)發(fā)工具與軟件開(kāi)發(fā)流程4.2集成開(kāi)發(fā)環(huán)境CCS4.3DSP的C工程文件

4.4DSPC語(yǔ)言程序設(shè)計(jì)基礎(chǔ)4.5DSPC程序舉例11/17/20221山東大學(xué)控制學(xué)院張東亮第4章DSP的軟件開(kāi)發(fā)與C語(yǔ)言編程本章內(nèi)容:11/9/24.1DSP開(kāi)發(fā)工具與軟件開(kāi)發(fā)流程1.DSP開(kāi)發(fā)工具硬件TIXDS510(ExtendedDevelopmentSystem)硬件仿真器。DSK(DSPStarterKit)初學(xué)者開(kāi)發(fā)套件。瑞泰ICETEK-5100PP/USBDSP開(kāi)發(fā)系統(tǒng)。評(píng)估板。DSP教學(xué)實(shí)驗(yàn)系統(tǒng)。開(kāi)發(fā)工具包括硬件、軟件兩部分。硬件部分主要是仿真器(Emulator),軟件主要是集成開(kāi)發(fā)環(huán)境CCS(CodeComposerStudio)。DSP開(kāi)發(fā)系統(tǒng)(仿真器)有PCI插卡式、并口式、USB接口式,目前多用USB接口式,即DSP開(kāi)發(fā)系統(tǒng)通過(guò)USB接口與PC機(jī)相連,開(kāi)發(fā)系統(tǒng)通過(guò)JTAG(基于掃描的仿真)接口與用戶(hù)目標(biāo)板相連,實(shí)現(xiàn)DSP軟硬件調(diào)試與程序燒寫(xiě)。11/17/20222山東大學(xué)控制學(xué)院張東亮4.1DSP開(kāi)發(fā)工具與軟件開(kāi)發(fā)流程1.DSP開(kāi)發(fā)工具

DSP評(píng)估板(也稱(chēng)為EVM板、目標(biāo)板、DEMO板、實(shí)驗(yàn)板等),包括基本的DSP芯片及必要的電源、時(shí)鐘、復(fù)位電路外,還經(jīng)常包括用于程序調(diào)試的片外擴(kuò)展存儲(chǔ)器、擴(kuò)展的A/D、D/A轉(zhuǎn)換器、鍵盤(pán)顯示電路、EEPROM、RS232串行接口、SPI接口、CAN接口驅(qū)動(dòng)電路、簡(jiǎn)單應(yīng)用電路等。F2812DSP評(píng)估板11/17/20223山東大學(xué)控制學(xué)院張東亮DSP評(píng)估板(也稱(chēng)為EVM板、目標(biāo)板、DEF2812DSP評(píng)估板原理框圖開(kāi)發(fā)系統(tǒng)與評(píng)估板11/17/20224山東大學(xué)控制學(xué)院張東亮F2812開(kāi)發(fā)系統(tǒng)11/9/20224山東大學(xué)控制學(xué)院張2812EVM板的主要性能指標(biāo)如下:(1)TMS320F2812,運(yùn)行速度150MIPS。(2)片內(nèi)RAM18K字。(3)擴(kuò)展RAM64K字。(4)片內(nèi)16路12位A/D轉(zhuǎn)換器,最大采樣速率12.5MSPS。(5)擴(kuò)展的4路12位D/A轉(zhuǎn)換器DAC7617。(6)兩路UART串行接口,符合RS-232C標(biāo)準(zhǔn)。(7)16路PWM輸出。(8)CAN總線標(biāo)準(zhǔn)接口。(9)用戶(hù)開(kāi)關(guān)與指示燈。(10)片內(nèi)128K字Flash存儲(chǔ)器,帶128位加密位。(11)IEEE1149.1兼容的邏輯掃描電路即JTAG接口,用于仿真調(diào)試。(12)+5V電源輸入,板上3.3V,1.8V電源管理。11/17/20225山東大學(xué)控制學(xué)院張東亮2812EVM板的主要性能指標(biāo)如下:11/9/20225山11/17/20226山東大學(xué)控制學(xué)院張東亮11/9/20226山東大學(xué)控制學(xué)院張東亮2.軟件開(kāi)發(fā)流程軟件開(kāi)發(fā)流程框圖11/17/20227山東大學(xué)控制學(xué)院張東亮2.軟件開(kāi)發(fā)流程軟件開(kāi)發(fā)流程框圖11/9/20227山

軟件開(kāi)發(fā)流程

1)編輯:生成源程序(*.asm,*.c)、頭文件(*.h)與命令文件(*.cmd)。2)編譯與匯編:生成目標(biāo)文件(*.obj,公共目標(biāo)文件COFF格式)及列表文件(*.lst)。3)連接:生成可執(zhí)行代碼文件(*.out)及映射文件(*.map)。4)調(diào)試:通過(guò)JTAG接口下載到目標(biāo)系統(tǒng)EVM。5)通過(guò)JTAG接口將程序固化燒寫(xiě)到Flash存儲(chǔ)器。11/17/20228山東大學(xué)控制學(xué)院張東亮軟件開(kāi)發(fā)流程1)編輯:生成源程序(*.asm,*.c)軟件開(kāi)發(fā)工具主要有源程序編輯器(Editor)編譯器(Compiler)匯編器(Assembler)鏈接器(Linker)歸檔器(Archiver)運(yùn)行時(shí)支持庫(kù)(Run-Time-SupportLibrary)庫(kù)建立程序(Library-buildUtility)HEX轉(zhuǎn)換程序(HexConversionUtility)3.軟件工具11/17/20229山東大學(xué)控制學(xué)院張東亮軟件開(kāi)發(fā)工具主要有3.軟件工具11/9絕對(duì)列表器(AbsoluteLister)和交叉引用列表器(Cross-ReferenceLister)調(diào)試工具(Debuggingtools)C++名稱(chēng)復(fù)原程序(C++NameDemanglingUtility)GEL語(yǔ)言(GeneralExtensionLanguage,通用擴(kuò)展語(yǔ)言)DSP/BIOS等。11/17/202210山東大學(xué)控制學(xué)院張東亮絕對(duì)列表器(AbsoluteLister)和交叉引用列表1.CCS軟件安裝與設(shè)置CCS2.0’C2000(CCS3.3)驅(qū)動(dòng)程序設(shè)置。Simulator:PC模擬軟件仿真。Emulator:實(shí)時(shí)DSP硬件仿真。4.2集成開(kāi)發(fā)環(huán)境CCS11/17/202211山東大學(xué)控制學(xué)院張東亮1.CCS軟件安裝與設(shè)置CCS2.0’C2000(CCS運(yùn)行主窗口

11/17/202212山東大學(xué)控制學(xué)院張東亮CCS運(yùn)行主窗口11/9/202212山東大學(xué)控制學(xué)院CCS主要工具源程序編輯器(Editor)。C編譯器(CCompiler)。匯編器(Assembler)。連接器(Linker)。調(diào)試工具(Debug)。十六進(jìn)制轉(zhuǎn)換公用程序(HexConversionUtility)。11/17/202213山東大學(xué)控制學(xué)院張東亮CCS主要工具源程序編輯器(Editor)。11/9/2022.CCS主要菜單與功能典型的CCS運(yùn)行界面如圖所示。CCS的功能可以通過(guò)菜單或工具條按鈕實(shí)現(xiàn)。主要的菜單項(xiàng)有File、Edit、View、Project、Debug等。這些菜單的使用與常用的集成開(kāi)發(fā)軟件VisualC++等使用方法基本一樣。11/17/202214山東大學(xué)控制學(xué)院張東亮2.CCS主要菜單與功能典型的CCS運(yùn)行界典型CCS運(yùn)行界面11/17/202215山東大學(xué)控制學(xué)院張東亮典型CCS運(yùn)行界面11/9/202215山東大學(xué)控制學(xué)院CodeComposerStudio?Components

Robust,Easy-to-UseDevelopmentEnvironmentHelpCPUWindowMemorywindowGraphwindowProjectManager:Source&objectfilesFiledependenciesCompiler,Assembler&LinkerbuildoptionsStatuswindowFullC/C++&AssemblyDebugging:C&ASMSourceMixedmodeDisassembly(patch)SetBreakPointsSetprobePointsWatchwindowProductiveEditor:StructureExpansionMenusorIcons11/17/202216山東大學(xué)控制學(xué)院張東亮CodeComposerStudio?ComponenReal-timeDebuggingAllowsyoutohaltinnon-criticalcodefordebugwhiletime-criticalinterruptscontinuetobeserviced.Accessmemoryandregisterswithoutstoppingtheprocessor.Implementedinsilicon,notbyadebugmonitor:Easy-to-use,noapplicationresourcesrequiredInterruptvoidISR_1(){………}Main(){……}function(){

……}Haltandsinglestepnon-timecriticalcodeTime-criticalinterruptsarestillserviced.InControl,IfTheProcessorStops,TheSystemCanGoOutOfControl11/17/202217山東大學(xué)控制學(xué)院張東亮Real-timeDebuggingAllowsyouFile菜單11/17/202218山東大學(xué)控制學(xué)院張東亮File菜單11/9/202218山東大學(xué)控制學(xué)院張東亮Project菜單11/17/202219山東大學(xué)控制學(xué)院張東亮Project菜單11/9/202219山東大學(xué)控制學(xué)院View菜單11/17/202220山東大學(xué)控制學(xué)院張東亮View菜單11/9/202220山東大學(xué)控制學(xué)院張東亮Debug菜單11/17/202221山東大學(xué)控制學(xué)院張東亮Debug菜單11/9/202221山東大學(xué)控制學(xué)院張東3.采用CCS開(kāi)發(fā)應(yīng)用程序的步驟創(chuàng)建一個(gè)新工程(project)。編輯源程序(*.asm,*.c)與連接命令文件(*.cmd)。將文件添加到該工程中(*.asm,*.c,*.h,*.cmd)。編譯匯編連接。裝載程序。調(diào)試程序。程序固化。11/17/202222山東大學(xué)控制學(xué)院張東亮3.采用CCS開(kāi)發(fā)應(yīng)用程序的步驟創(chuàng)建一個(gè)新工程(proje調(diào)試程序連續(xù)運(yùn)行與單步運(yùn)行。設(shè)置斷點(diǎn)。查看與修改存儲(chǔ)單元。查看與修改寄存器內(nèi)容。觀察和編輯變量。程序Animate運(yùn)行和數(shù)據(jù)圖形顯示。11/17/202223山東大學(xué)控制學(xué)院張東亮調(diào)試程序連續(xù)運(yùn)行與單步運(yùn)行。11/9/202223山東大學(xué)控C工程(Project)幾種基本文件CCS工程文件(擴(kuò)展名為.pjt)。由CCS自動(dòng)生成。在CC(CodeComposer)軟件環(huán)境中,擴(kuò)展名為.mak。

源程序:匯編語(yǔ)言文件(*.asm),C文件(*.c)。頭文件(*.h):定義寄存器映射地址,用戶(hù)自定義的常量等。例如,頭文件DSP281x_Adc.h定義了ADC寄存器,頭文件DSP281x_PieVec.h定義了PIE中斷矢量。鏈接命令文件(*.cmd)。庫(kù)文件(*.lib)。運(yùn)行時(shí)支持庫(kù)rts2800_ml.lib。目標(biāo)文件(*.obj):COFF公共目標(biāo)文件格式。列表文件(*.lst):匯編生成的文件。映射文件(*.map):存儲(chǔ)器分配??蓤?zhí)行代碼文件(*.out)。4.3DSP的C工程文件11/17/202224山東大學(xué)控制學(xué)院張東亮C工程(Project)幾種基本文件CCS工程文件(擴(kuò)展名為4.3.1公共目標(biāo)文件格式COFF編譯、匯編與鏈接程序建立的目標(biāo)文件采用共用目標(biāo)文件格式(CommonObjectFileFormat,COFF),便于模塊化編程、管理代碼段和存儲(chǔ)器,即不必為程序代碼或變量指定目標(biāo)地址。匯編器根據(jù)命令用適當(dāng)?shù)亩螌⒏鞑糠殖绦虼a和數(shù)據(jù)連在一起,構(gòu)成目標(biāo)文件。鏈接器分配存儲(chǔ)單元,即把各個(gè)段重新定位到目標(biāo)存儲(chǔ)器中。段(section,也稱(chēng)為塊)是目標(biāo)文件的最小單位,是在存儲(chǔ)器中占據(jù)連續(xù)空間的代碼和數(shù)據(jù)塊,各段相互獨(dú)立。11/17/202225山東大學(xué)控制學(xué)院張東亮4.3.1公共目標(biāo)文件格式COFF編譯、匯編與鏈目標(biāo)文件中段與目標(biāo)存儲(chǔ)器之間的關(guān)系

匯編器的COFF文件格式包括三個(gè)默認(rèn)的段:.text段,即程序段,該段通常包含可執(zhí)行代碼即程序。.data段,即數(shù)據(jù)段,該段通常包含已初始化的數(shù)據(jù)。.bss段,即保留數(shù)據(jù)空間段,該段通常為未初始化的數(shù)據(jù)保留空間。11/17/202226山東大學(xué)控制學(xué)院張東亮目標(biāo)文件中段與目標(biāo)存儲(chǔ)器之間的關(guān)系匯編器的COFF文件格式匯編器和鏈接器允許用戶(hù)建立和鏈接自定義的段。所有段可以分為初始化段和未初始化段兩類(lèi)。初始化段包含程序代碼和數(shù)據(jù)。未初始化段則為未初始化的數(shù)據(jù)保留存儲(chǔ)空間。匯編命令.sect和.usect可以分別用來(lái)創(chuàng)建自定義的初始化段和未初始化段。C編譯器對(duì)C程序編譯后也產(chǎn)生初始化段和未初始化段兩類(lèi),具體的段名稍有不同,除了不使用.data段之外,還產(chǎn)生一些新的段。11/17/202227山東大學(xué)控制學(xué)院張東亮匯編器和鏈接器允許用戶(hù)建立和鏈接自定義的段。編譯器對(duì)C語(yǔ)言編譯后除了生成2個(gè)基本段,即.text、.bss外,還生成其他一些段??煞譃槌跏蓟魏臀闯跏蓟?。初始化段包含可執(zhí)行代碼或常數(shù)表。C編譯器產(chǎn)生的初始化段有.pint、.const、.econst、.text、.cinit、.switch。.text段,包含可執(zhí)行代碼和常量(constant)。.cinit段和.pint段,包含初始化變量和常量。.const段,包含串常量,全局變量、靜態(tài)變量的聲明和初始化。.econst段,包含串常量,全局變量、靜態(tài)變量的聲明和初始化。變量由farconst修飾,或用大存儲(chǔ)器模型,初始化后放進(jìn)遠(yuǎn)(far)存儲(chǔ)器。.switch段,包含switch語(yǔ)句表。11/17/202228山東大學(xué)控制學(xué)院張東亮編譯器對(duì)C語(yǔ)言編譯后除了生成2個(gè)基本段,即.t未初始化段用于保留存儲(chǔ)器(通常為RAM)空間。C編譯器產(chǎn)生的為初始化段有.bss、.ebss、.stack、.sysmem和.esysmem段。.bss段,為全局和靜態(tài)變量保留空間。.ebss段,為全局和靜態(tài)變量保留空間。變量由far修飾,或用大存儲(chǔ)器模型使用。.stack段,為C系統(tǒng)堆棧。用于保護(hù)函數(shù)的返回地址、分配局部變量、調(diào)用函數(shù)時(shí)傳遞參數(shù)。.sysmem段,為動(dòng)態(tài)存儲(chǔ)器分配保留空間,malloc函數(shù)使用。.esysmem段,為動(dòng)態(tài)存儲(chǔ)器分配保留空間,farmalloc函數(shù)使用。11/17/202229山東大學(xué)控制學(xué)院張東亮未初始化段用于保留存儲(chǔ)器(通常為RAM)空間。C編譯器產(chǎn)生的初始化段鏈接

段名稱(chēng)描述限制.text可執(zhí)行代碼和常量程序.cint已初始化的全局與靜態(tài)變量的C初始化記錄低64K數(shù)據(jù).pint全局構(gòu)造器(C++constructor)表程序.switch實(shí)現(xiàn)switch語(yǔ)句表程序/低64K數(shù)據(jù).const已初始化的全局與靜態(tài)const修飾變量,串常量低64K數(shù)據(jù).econstfarcostant變量數(shù)據(jù)任何位置11/17/202230山東大學(xué)控制學(xué)院張東亮初始化段鏈接段名稱(chēng)描述限制.text可執(zhí)行代碼和常量程序.未初始化段鏈接

段名稱(chēng)內(nèi)容限制.bss全局與靜態(tài)變量低64K數(shù)據(jù).ebssfar全局與靜態(tài)變量數(shù)據(jù)任何位置.stack堆??臻g低64K數(shù)據(jù).sysmemmalloc函數(shù)存儲(chǔ)區(qū)低64K數(shù)據(jù).esysmemfarmalloc函數(shù)存儲(chǔ)區(qū)數(shù)據(jù)任何位置11/17/202231山東大學(xué)控制學(xué)院張東亮未初始化段鏈接段名稱(chēng)內(nèi)容限制.bss全局與靜態(tài)變量低64K存儲(chǔ)器映射表

段(Section)存儲(chǔ)器類(lèi)型(TypeofMemory)頁(yè)面(Page).textROM或RAM0.cintROM或RAM0.pintROM或RAM0.switchROM或RAM0,1.constROM或RAM1.econstROM或RAM1.bssRAM1.ebssRAM1.stackRAM1.sysmemRAM1.esysmemRAM111/17/202232山東大學(xué)控制學(xué)院張東亮存儲(chǔ)器映射表段(Section)存儲(chǔ)器類(lèi)型(Typeof4.3.2鏈接命令文件CCS的鏈接器可以有很多選項(xiàng),如-l(包含庫(kù)文件)、-stack(定義堆棧)、-o(定義輸出文件)等,并且將用戶(hù)軟件定義的段與目標(biāo)系統(tǒng)存儲(chǔ)器物理地址對(duì)應(yīng)關(guān)系定義清楚。鏈接器選項(xiàng)的實(shí)現(xiàn)通常采用工程選項(xiàng)菜單或鏈接器命令文件(.cmd)兩種方法。編寫(xiě)一個(gè)鏈接器命令文件,將所有鏈接器選項(xiàng)寫(xiě)在文件中,并將此文件加入到工程,這樣CCS在進(jìn)行編譯鏈接時(shí),會(huì)自動(dòng)按照鏈接器命令文件中的選項(xiàng)進(jìn)行。有兩條鏈接器命令MEMORY和SECTIONS可以實(shí)現(xiàn)對(duì)程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器空間的分配。MEMORY命令定義目標(biāo)存儲(chǔ)器的配置,SECTIONS命令定義編程段與目標(biāo)存儲(chǔ)器的關(guān)系。11/17/202233山東大學(xué)控制學(xué)院張東亮4.3.2鏈接命令文件CCS的鏈接器可以有MEMORY命令

MEMORY命令定義目標(biāo)系統(tǒng)中可以使用的存儲(chǔ)器范圍,每個(gè)存儲(chǔ)器范圍具有名字、起始地址和長(zhǎng)度。一般形式為MEMORY{PAGE0:name:origin=constant,length=constant;…PAGEn:name:origin=constant,length=constant;}PAGEn:定義存儲(chǔ)器空間。n=0~254.通常PAGE0定義程序存儲(chǔ)器,PAGE1定義數(shù)據(jù)存儲(chǔ)器。name:存儲(chǔ)器范圍名字??梢允?~8個(gè)字符。origin或簡(jiǎn)寫(xiě)為o:存儲(chǔ)器范圍的起始地址。length或簡(jiǎn)寫(xiě)為l:存儲(chǔ)器范圍的長(zhǎng)度。11/17/202234山東大學(xué)控制學(xué)院張東亮MEMORY命令MEMORY命令定義目標(biāo)系統(tǒng)中可以SECTIONS命令SECTIONS命令用于將輸出各段定位到所定義的存儲(chǔ)器。一般形式為SECTIONS{name:[property,property,…]name:[property,property,…]…}在段名之后是是特性列表,定義段的內(nèi)容以及是怎樣分配的。段的特性(property)是裝載位置、運(yùn)行位置、輸入段、段類(lèi)型等。通常的特性符號(hào)“>”表示輸出段裝載位置。

11/17/202235山東大學(xué)控制學(xué)院張東亮SECTIONS命令SECTIONS命令用于將輸4.4DSPC語(yǔ)言程序設(shè)計(jì)基礎(chǔ)4.4.1數(shù)據(jù)類(lèi)型4.4.2C語(yǔ)言運(yùn)算符與基本語(yǔ)句4.4.3函數(shù)4.4.4指針4.4.5編譯預(yù)處理命令4.4.6C語(yǔ)言與匯編語(yǔ)言混合編程4.4.7C28xDSP編譯器的關(guān)鍵字11/17/202236山東大學(xué)控制學(xué)院張東亮4.4DSPC語(yǔ)言程序設(shè)計(jì)基礎(chǔ)4.4.1數(shù)據(jù)類(lèi)型11C語(yǔ)言程序設(shè)計(jì)優(yōu)缺點(diǎn)匯編語(yǔ)言程序設(shè)計(jì):

執(zhí)行速度快。開(kāi)發(fā)周期長(zhǎng)、移植性和可讀性差。C語(yǔ)言程序設(shè)計(jì):開(kāi)發(fā)周期短、移植性和可讀性好。執(zhí)行速度可以滿(mǎn)足要求。11/17/202237山東大學(xué)控制學(xué)院張東亮C語(yǔ)言程序設(shè)計(jì)優(yōu)缺點(diǎn)匯編語(yǔ)言程序設(shè)計(jì):C語(yǔ)言程序設(shè)計(jì):11/C28xDSP具有優(yōu)化的C編譯器,它支持ANSIC標(biāo)準(zhǔn)。還具有一些不同于標(biāo)準(zhǔn)C的特征。DSP的基本數(shù)據(jù)類(lèi)型如表所示,還具有數(shù)組、結(jié)構(gòu)、聯(lián)合等構(gòu)造類(lèi)型數(shù)據(jù)。4.4.1數(shù)據(jù)類(lèi)型11/17/202238山東大學(xué)控制學(xué)院張東亮C28xDSP具有優(yōu)化的C編譯器,它支持ANSITMS320C28xC的數(shù)據(jù)類(lèi)型

1.C28x編譯器基本數(shù)據(jù)類(lèi)型11/17/202239山東大學(xué)控制學(xué)院張東亮TMS320C28xC的數(shù)據(jù)類(lèi)型1.C28x編譯器基本片內(nèi)外設(shè)寄存器通常通過(guò)結(jié)構(gòu)與聯(lián)合變量的方法進(jìn)行訪問(wèn)。2.結(jié)構(gòu)例如,GPIOA口的MUX復(fù)用控制寄存器可用位段(bitfield)結(jié)構(gòu)表示structGPAMUX_BITS{

unsignedintPWM1_GPIOA0:1; //第0位

unsignedintPWM2_GPIOA1:1;

unsignedintC2TRIP_GPIOA14:1;

unsignedintC3TRIP_GPIOA15:1; //第15位

};11/17/202240山東大學(xué)控制學(xué)院張東亮片內(nèi)外設(shè)寄存器通常通過(guò)結(jié)構(gòu)與聯(lián)合變量的方法進(jìn)例如,GPIOD口的MUX復(fù)用控制寄存器結(jié)構(gòu)structGPDMUX_BITS{

unsignedintT1CTRIP_PDPA_GPIOD0:1; //第0位

unsignedintT2CTRIP_PDPA_GPIOD1:1; //1

unsignedintrsvd1:3; //4:2,保留unsignedintT3CTRIP_PDPA_GPIOD5:1; //5

unsignedintT4CTRIP_PDPA_GPIOD6:1; //6

unsignedintrsvd2:9; //15:7,保留

};當(dāng)一個(gè)結(jié)構(gòu)中有效字段(位段)的長(zhǎng)度不足16位時(shí),可以加入保留字段,以保證數(shù)據(jù)的完整性。結(jié)構(gòu)變量的定義與成員變量的引用,例如,

structGPDMUX_BITSbit;//bit為GPDMUX_BITS類(lèi)型變量

bit.T1CTRIP_PDPA_GPIOD0=1//將D0位定義為PDPA功能11/17/202241山東大學(xué)控制學(xué)院張東亮例如,GPIOD口的MUX復(fù)用控制寄存器結(jié)構(gòu)struct聯(lián)合體(也稱(chēng)為共用體)類(lèi)型,可以將不同類(lèi)型的數(shù)據(jù)存放在同一個(gè)地方,且占據(jù)同樣大小的存儲(chǔ)空間。例如,定義聯(lián)合體類(lèi)型GPDMUX_REG,

unionGPDMUX_REG{

unsignedintall; //all為無(wú)符號(hào)整型變量 structGPDMUX_BITSbit;//bit為結(jié)構(gòu)型變量

};聯(lián)合變量的定義與成員變量的引用,例如,

unionGPDMUX_REGGPDMUX;//GPDMUX為聯(lián)合類(lèi)型變量

GPDMUX.all=1;//將D0引腳定義為PDPA功能,其他為數(shù)字I/O3.聯(lián)合11/17/202242山東大學(xué)控制學(xué)院張東亮聯(lián)合體(也稱(chēng)為共用體)類(lèi)型,可以將不同類(lèi)型的聯(lián)合可以出現(xiàn)在結(jié)構(gòu)和數(shù)組中,結(jié)構(gòu)和數(shù)組也可以出現(xiàn)在聯(lián)合中。例如,結(jié)構(gòu)類(lèi)型GPIO_MUX_REGS,

structGPIO_MUX_REGS{

unionGPAMUX_REGGPAMUX;

unionGPDMUX_REGGPDMUX;

};結(jié)構(gòu)變量的定義與成員變量的引用,例如,

structGPIO_MUX_REGSGpioMuxRegs;

//表示GpioMuxRegs是結(jié)構(gòu)GPIO_MUX_REGS的一個(gè)變量

可以采用點(diǎn)運(yùn)算符的方法引用各成員變量,

GpioMuxRegs.GPAMUX.all=0x077F;//CAP1-3,PWM1-6,T1pwm

GpioMuxRegs.GPDMUX.bit.T1CTRIP_PDPA__GPIOD0=1;//PDPA

GpioMuxRegs.GPDMUX.bit.T2CTRIP_SOCA__GPIOD1=0;//GPIOD1

GpioMuxRegs.GPDMUX.bit.T3CTRIP_PDPB__GPIOD5=0;//GPIOD5

GpioMuxRegs.GPDMUX.bit.T4CTRIP_SOCB__GPIOD6=0;//GPIOD6

定義GPIOA口時(shí),采用了一條C語(yǔ)句。而定義GPIOD口時(shí),采用了4條C語(yǔ)句。編程風(fēng)格可以編程者自己決定。11/17/202243山東大學(xué)控制學(xué)院張東亮聯(lián)合可以出現(xiàn)在結(jié)構(gòu)和數(shù)組中,結(jié)構(gòu)和數(shù)組也可以4.4.2C語(yǔ)言運(yùn)算符與基本語(yǔ)句

1.C語(yǔ)言運(yùn)算符2.C語(yǔ)言基本語(yǔ)句C語(yǔ)言運(yùn)算符有算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位操作運(yùn)算符等。不同的運(yùn)算符可以有不同的優(yōu)先級(jí)、運(yùn)算對(duì)象個(gè)數(shù)與結(jié)合方向。C語(yǔ)句有控制語(yǔ)句、表達(dá)式語(yǔ)句、函數(shù)調(diào)用語(yǔ)句、空語(yǔ)句和復(fù)合語(yǔ)句五類(lèi)。控制語(yǔ)句有9種。11/17/202244山東大學(xué)控制學(xué)院張東亮4.4.2C語(yǔ)言運(yùn)算符與基本語(yǔ)句1.C語(yǔ)言運(yùn)算符2

與普通的C語(yǔ)言程序類(lèi)似,DSPC程序是由若干模塊化的函數(shù)構(gòu)成。函數(shù)是C程序的基本模塊,子程序就是由函數(shù)來(lái)實(shí)現(xiàn)的。用戶(hù)可以根據(jù)需要定義自己的功能函數(shù),也可以調(diào)用C編譯器提供的標(biāo)準(zhǔn)函數(shù)(庫(kù)函數(shù))來(lái)完成某種特定的功能。注意函數(shù)調(diào)用的規(guī)則。4.4.3函數(shù)11/17/202245山東大學(xué)控制學(xué)院張東亮與普通的C語(yǔ)言程序類(lèi)似,DSPC程序是由若干C函數(shù)的一般格式為類(lèi)型函數(shù)名(形式參數(shù)及其類(lèi)型表){變量聲明部分;執(zhí)行語(yǔ)句部分;}一個(gè)函數(shù)在程序中可以三種形態(tài)出現(xiàn):函數(shù)定義(Definition)、函數(shù)調(diào)用和函數(shù)聲明(Declaration)。函數(shù)定義相當(dāng)于匯編語(yǔ)言中的一般子程序。函數(shù)調(diào)用相當(dāng)于調(diào)用子程序。函數(shù)定義和函數(shù)調(diào)用不分先后,但若調(diào)用在定義之前,那么在調(diào)用前必須先進(jìn)行函數(shù)聲明。函數(shù)聲明是一個(gè)沒(méi)有函數(shù)體的函數(shù)定義,而函數(shù)調(diào)用則要求有函數(shù)名和實(shí)際參數(shù)表。11/17/202246山東大學(xué)控制學(xué)院張東亮C函數(shù)的一般格式為11/9/202246山東大學(xué)控制

可以用指針的方法訪問(wèn)變量,用指針訪問(wèn)數(shù)組、結(jié)構(gòu)、聯(lián)合變量非常方便。4.4.4指針

例如,指向結(jié)構(gòu)類(lèi)型的指針變量p

structGPDMUX_BITS*p;

structGPDMUX_BITSbit;

p=&bit;

bit的成員T1CTRIP_PDPA_GPIOD0可用下述3種形式之一訪問(wèn)

bit.T1CTRIP_PDPA_GPIOD0

(*p).T1CTRIP_PDPA_GPIOD0

p->T1CTRIP_PDPA_GPIOD011/17/202247山東大學(xué)控制學(xué)院張東亮可以用指針的方法訪問(wèn)變量,用指針訪問(wèn)數(shù)組、結(jié)構(gòu)、ANSIC新標(biāo)準(zhǔn)增加了一種void*指針類(lèi)型,即可以定義一個(gè)指針變量,但不指定它是指向哪一種數(shù)據(jù)類(lèi)型,例

unsignedlong

*Source=(void*)&PieVectTableInit;地址&PieVectTableInit被(void*)強(qiáng)制成了void*類(lèi)型。指針Source為unsignedlong類(lèi)型。例如,描述中斷矢量表的指針PINTtypedef

unsignedintUint16; //定義一種類(lèi)型Uint16Uint16i;typedefinterruptvoid(*PINT)(void);//指針PINT指向中斷函數(shù)struct PIE_VECT_TABLE{ PINTPIE1_RESERVED; PINTPIE2_RESERVED;…}11/17/202248山東大學(xué)控制學(xué)院張東亮ANSIC新標(biāo)準(zhǔn)增加了一種void*C語(yǔ)言用指針訪問(wèn)數(shù)據(jù)存儲(chǔ)器(或片內(nèi)外設(shè)寄存器)可以用指針?lè)椒▽?shí)現(xiàn)。例如,從擴(kuò)展的外設(shè)接口讀取開(kāi)關(guān)狀態(tài),然后輸出到擴(kuò)展的指示燈外設(shè)接口。#defineLBDS(*((unsignedint*)0xc0000))//擴(kuò)展的外設(shè)寄存器,指示燈#defineDIPS(*(unsignedint*)0xc0001)//擴(kuò)展的外設(shè)寄存器,開(kāi)關(guān)LBDS=DIPS; //讀取撥碼開(kāi)關(guān)狀態(tài)直接送指示燈顯示一般將這些定義放到一個(gè)頭文件,使用時(shí),用編譯預(yù)處理命令include包含該頭文件即可。11/17/202249山東大學(xué)控制學(xué)院張東亮C語(yǔ)言用指針訪問(wèn)數(shù)據(jù)存儲(chǔ)器(或片內(nèi)外設(shè)寄存器)main(){

inti;

unsignedint*px,*py,*pz; px=(unsignedint*)0x80000; py=(unsignedint*)0x80100; for(i=0,pz=px;i<16;i++,pz++) (*pz)=i; for(i=0,pz=py;i<16;i++,pz++) (*pz)=0x1234; for(i=0;i<16;i++,px++,py++) (*py)=(*px); while(1){;}}例4-3,將數(shù)據(jù)存儲(chǔ)器80000H開(kāi)始的16個(gè)單元復(fù)制到80100H開(kāi)始的單元。11/17/202250山東大學(xué)控制學(xué)院張東亮main()例4-3,將數(shù)據(jù)存儲(chǔ)器80000H開(kāi)始的16個(gè)例4-4擴(kuò)展外部接口,編寫(xiě)C程序?qū)?個(gè)開(kāi)關(guān)狀態(tài)反應(yīng)到4個(gè)指示燈。#include"DSP281x_Device.h"http://DSP281xHeadfileIncludeFile//定義指示燈控制寄存器地址和寄存器類(lèi)型#defineLBDS(*((unsignedint*)0xc0000))//定義撥碼開(kāi)關(guān)控制寄存器地址和寄存器類(lèi)型#defineDIPS(*(unsignedint*)0xc0001)main(){ InitSysCtrl(); //初始化DSP運(yùn)行時(shí)鐘,自定義函數(shù) while(1) LBDS=DIPS; //讀取撥碼開(kāi)關(guān)狀態(tài)直接送指示燈顯示} 11/17/202251山東大學(xué)控制學(xué)院張東亮例4-4擴(kuò)展外部接口,編寫(xiě)C程序?qū)?個(gè)開(kāi)關(guān)狀態(tài)反應(yīng)到4宏定義#define #definePI3.14159 #defineUint16unsignedint(typedefunsignedintUint16;) #defineEINTasm(“clrcINTM”) EINT; #defineEALLOWasm(“EALLOW”)4.4.5編譯預(yù)處理

文件包含#include #include<math.h> #include“DSP281x_Device.h”1.宏定義、文件包含與條件編譯11/17/202252山東大學(xué)控制學(xué)院張東亮宏定義#define4.4.5編譯預(yù)處理文件包含#i條件編譯 #ifdef標(biāo)識(shí)符 程序段1 #else 程序段2 #endif11/17/202253山東大學(xué)控制學(xué)院張東亮條件編譯11/9/202253山東大學(xué)控制學(xué)院張東亮pragma是一類(lèi)編譯預(yù)處理命令(directive),通知編譯預(yù)處理器如何處理函數(shù)。C28xC/C++支持如下pragma命令, CODE_SECTION(func,“sectionname”) DATA_SECTION(symbol,“sectionname”) INTERRUPT(func) FUNC_EXT_CALLED(func) FAST_CALL(func)2.pragma命令11/17/202254山東大學(xué)控制學(xué)院張東亮pragma是一類(lèi)編譯預(yù)處理命令(dire

CODE_SECTION代碼段它為函數(shù)func在一個(gè)名為sectionname的段(section)中指定空間。將一個(gè)代碼對(duì)象連接到一個(gè)不同于.text段的空間時(shí),該語(yǔ)法非常有用。例如charbufferA[80];#pragmaCODE_SECTION(funA,“codeA”)charfunA(inti);voidmain(){charc;c=funA(1);}charfunA(inti){returnbufferA[i[];}11/17/202255山東大學(xué)控制學(xué)院張東亮CODE_SECTION代碼段11/9/202255山

DATA_SECTION數(shù)據(jù)段它為符號(hào)symbol在一個(gè)名為sectionname的段中指定空間。將一個(gè)數(shù)據(jù)對(duì)象連接到一個(gè)不同于.bss段的空間時(shí),該語(yǔ)法非常有用。例如#pragmaDATA_SECTION(bufferB,“my_sect”)charbufferB(512);數(shù)據(jù)塊bufferB被定位于my_sect段中,my_sect段在.cmd文件中規(guī)定物理地址。11/17/202256山東大學(xué)控制學(xué)院張東亮DATA_SECTION數(shù)據(jù)段11/9/2022564.4.6C語(yǔ)言與匯編語(yǔ)言混合編程在C程序中直接嵌入?yún)R編語(yǔ)句。獨(dú)立的C模塊和匯編模塊接口。獨(dú)立編寫(xiě)C程序與匯編程序,分別編譯、匯編生成目標(biāo)代碼模塊,然后用連接器連接起來(lái)。從C程序中訪問(wèn)匯編程序變量。11/17/202257山東大學(xué)控制學(xué)院張東亮4.4.6C語(yǔ)言與匯編語(yǔ)言混合編程在C程序中直接嵌入?yún)R編語(yǔ)1.在C程序中直接嵌入?yún)R編語(yǔ)句C程序嵌入?yún)R編語(yǔ)句是一種直接的C模塊和匯編模塊接口方法??梢栽贑程序中實(shí)現(xiàn)用C語(yǔ)言難以實(shí)現(xiàn)的一些硬件控制功能。另一方面,也可以用這種方法在C程序中的關(guān)鍵部分用匯編語(yǔ)句代替C語(yǔ)句以?xún)?yōu)化程序。這種方法的一個(gè)缺點(diǎn)是它比較容易破壞C環(huán)境,因?yàn)镃編譯器在編譯嵌入了匯編語(yǔ)句的C程序時(shí)并不檢查或分析所嵌入的匯編語(yǔ)句。直接在C語(yǔ)言程序中相應(yīng)位置嵌入?yún)R編語(yǔ)句,只需在匯編語(yǔ)句加上雙引號(hào)和小括號(hào),前面加asm標(biāo)識(shí)符號(hào),雙引號(hào)內(nèi)第一個(gè)字符應(yīng)是空格。即,

asm(“匯編語(yǔ)句”)例如asm(“NOP”);#defineEINTasm(“CLRCINTM”)//開(kāi)放中斷 EINT;11/17/202258山東大學(xué)控制學(xué)院張東亮1.在C程序中直接嵌入?yún)R編語(yǔ)句C程序嵌入?yún)R編語(yǔ)句是一種直接2.獨(dú)立的C模塊和匯編模塊接口在編寫(xiě)?yīng)毩⒌膮R編程序時(shí),必須注意以下幾點(diǎn):(1)不論是用C語(yǔ)言編寫(xiě)的函數(shù)還是用匯編語(yǔ)言編寫(xiě)的函數(shù),都必須遵循寄存器使用規(guī)則。(2)必須保護(hù)函數(shù)要用到的幾個(gè)特定寄存器。(3)中斷程序必須保護(hù)所有用到的寄存器。(4)從匯編程序調(diào)用C函數(shù)時(shí),第一個(gè)參數(shù)(最左邊)必須放入累加器A中,剩下的參數(shù)按自右向左的順序壓入堆棧。(5)調(diào)用C函數(shù)時(shí),注意C函數(shù)只保護(hù)了幾個(gè)特定的寄存器,而其他寄存器可以自由使用。(6)長(zhǎng)整型和浮點(diǎn)數(shù)在存儲(chǔ)器中存放的順序是低位字在高地址,高位字在低地址。11/17/202259山東大學(xué)控制學(xué)院張東亮2.獨(dú)立的C模塊和匯編模塊接口在編寫(xiě)?yīng)毩⒌膮R編程序時(shí),必須(7)如果函數(shù)有返回值,返回值存放在累加器中。(8)匯編語(yǔ)言模塊不能改變由C模塊產(chǎn)生的.cinit段,如果改變其內(nèi)容將會(huì)引起不可預(yù)測(cè)的后果。(9)編譯器在所有標(biāo)識(shí)符(函數(shù)名、變量名等)前加下劃線“_”。(10)任何在匯編程序中定義的對(duì)象或函數(shù),如果需要在C程序中訪問(wèn)或調(diào)用,則必須用匯編指令.global定義。11/17/202260山東大學(xué)控制學(xué)院張東亮(7)如果函數(shù)有返回值,返回值存放在累加器中。11/9/23.從C程序中訪問(wèn)匯編程序變量從C程序中訪問(wèn)在匯編程序中定義的變量或常數(shù),可以分為以下3種情況:(1)訪問(wèn)在.bss段中定義的變量。(2)訪問(wèn)不在.bss段中定義的變量。(3)對(duì)于在匯編程序中用.set和.global偽指令定義的全局常數(shù),也可以使用特殊的操作從C程序中訪問(wèn)它們。11/17/202261山東大學(xué)控制學(xué)院張東亮3.從C程序中訪問(wèn)匯編程序變量從C例4-5,在C程序中訪問(wèn)在.bss段中定義的變量。匯編程序:.bss_var,1 ;定義變量.global_var ;聲明為外部變量C程序:externintvar //聲明為外部變量var=1 //訪問(wèn)變量11/17/202262山東大學(xué)控制學(xué)院張東亮例4-5,在C程序中訪問(wèn)在.bss段中定義的變量。11/9/例4-6,在C程序中訪問(wèn)不在.bss段中定義的變量。匯編程序:.global_sine ;聲明為外部變量.sect“sine_tab” ;建立一個(gè)獨(dú)立的段_sine: ;常數(shù)表起始地址.float0.0.float0.015987.float0.022145C程序:externfloatsine[] //聲明為外部變量float*sine_p=sine; //聲明一個(gè)指針指向該變量f=sine_p[4]; //作為普通數(shù)組訪問(wèn)sine數(shù)組11/17/202263山東大學(xué)控制學(xué)院張東亮例4-6,在C程序中訪問(wèn)不在.bss段中定義的變量。11/94.4.6C28xDSP編譯器的關(guān)鍵字C28xDSPC/C++編譯器,支持標(biāo)準(zhǔn)的const、register、volatile等關(guān)鍵字,還擴(kuò)展了cregister、interrupt、far、near等關(guān)鍵字。關(guān)鍵字const

該關(guān)鍵字可以?xún)?yōu)化存儲(chǔ)器的分配。加const到任何變量的定義可以確保其內(nèi)的值不變。11/17/202264山東大學(xué)控制學(xué)院張東亮4.4.6C28xDSP編譯器的關(guān)鍵字關(guān)鍵字volatile該關(guān)鍵字所定義的變量是可變的,可以被其他硬件修改,而不僅僅只能由C程序修改。優(yōu)化器會(huì)盡量減少存儲(chǔ)器的訪問(wèn),所以有時(shí)必須禁止優(yōu)化,特別是循環(huán)控制變量。例子

volatileunsignedint*ctrl;while(*ctrl!=0xff);//循環(huán)等待,直到ctrl地址的內(nèi)容為0xff11/17/202265山東大學(xué)控制學(xué)院張東亮關(guān)鍵字volatile11/9/202265山東大學(xué)控制學(xué)院關(guān)鍵字cregster該擴(kuò)展關(guān)鍵字允許高級(jí)語(yǔ)言讀/寫(xiě)控制寄存器。在F281xC中,cregister僅限于中斷使能寄存器IER和中斷標(biāo)志寄存器IFR,程序中應(yīng)有如下聲明externcregistervolatileunsignedintIER;externcregistervolatileunsignedintIFR;可以用|(位或)和&(位與)進(jìn)行操作,例如IFR|=0x100;IFR&=0x100; 11/17/202266山東大學(xué)控制學(xué)院張東亮關(guān)鍵字cregster11/9/202266山東大學(xué)控制學(xué)院關(guān)鍵字interrupt該擴(kuò)展關(guān)鍵字用來(lái)說(shuō)明函數(shù)是一個(gè)中斷函數(shù)。中斷函數(shù)被定義成返回void類(lèi)型,而且無(wú)參數(shù)調(diào)用,例如,

interruptvoidint_handler() { unsignedintflags; … }11/17/202267山東大學(xué)控制學(xué)院張東亮關(guān)鍵字interrupt11/9/202267山東大學(xué)控制學(xué)關(guān)于中斷函數(shù)中斷的使能和屏蔽必須由程序員自己設(shè)置。中斷程序沒(méi)有參數(shù)傳遞,既使說(shuō)明,也會(huì)被忽略。中斷處理程序不能被正常的C程序調(diào)用。為了使中斷程序與中斷一致,在相應(yīng)的中斷矢量中必須放置一條轉(zhuǎn)移指令,可以用.sect匯編偽指令建立一個(gè)簡(jiǎn)單的跳轉(zhuǎn)指令表來(lái)完成此項(xiàng)功能。在匯編語(yǔ)言中斷程序中,注意在符號(hào)名前面加上一個(gè)下劃線,例如c_int00記為_(kāi)c_int00。中斷程序使用的所有寄存器,包括狀態(tài)寄存器和程序中調(diào)用函數(shù)使用的寄存器都必須予以保護(hù)。11/17/202268山東大學(xué)控制學(xué)院張東亮關(guān)于中斷函數(shù)中斷的使能和屏蔽必須由程序員自己設(shè)置。11/9關(guān)鍵字farC/C++編譯器的默認(rèn)尋址空間是64K。所有指針的默認(rèn)大小為16位。C28x支持的尋址空間達(dá)4M字,即22位。加上far關(guān)鍵字限定符的指針大小為22位,可以尋址4M字空間。11/17/202269山東大學(xué)控制學(xué)院張東亮關(guān)鍵字far11/9/202269山東大學(xué)控制學(xué)院張東亮#include"DSP281x_Device.h"http://DSP281xHeaderfileIncludeFile//定義指示燈寄存器地址和寄存器類(lèi)型#defineLBDS(*((unsignedint*)0xc0000))//指定地址的整型變量voidDelay(unsignedintnDelay); //延時(shí)子程序,函數(shù)聲明main(){ unsignedintuLED[4]={1,2,4,8};//控制字0001,0010,0100,1000數(shù)組 inti; InitSysCtrl(); //初始化DSP運(yùn)行時(shí)鐘,自定義函數(shù) //系統(tǒng)時(shí)鐘150MHz,使能外設(shè)時(shí)鐘,禁止WDwhile(1)例4-7

4個(gè)LED指示燈接到DSP通過(guò)CPLD擴(kuò)展的外部簡(jiǎn)單接口電路,其地址為0xc0000。用C語(yǔ)言編程使之閃爍。+3.3V1kLED4.5DSPC程序舉例11/17/202270山東大學(xué)控制學(xué)院張東亮#include"DSP281x_Device.h"{for(i=0;i<4;i++) { LBDS=uLED[i]; //正向順序送控制字 Delay(256); //延時(shí) }for(i=3;i>=0;i--) { LBDS=uLED[i]; //反向順序送控制字 Delay(256); //延時(shí) } }}11/17/202271山東大學(xué)控制學(xué)院張東亮{11/9/202271山東大學(xué)控制學(xué)院voidDelay(unsignedintnDelay)//延時(shí)程序,自定義函數(shù){ intii,jj,kk=0; for(ii=0;ii<nDelay;ii++) { for(jj=0;jj<512;jj++){kk++;} }}11/17/202272山東大學(xué)控制學(xué)院張東亮voidDelay(unsignedintnDelay#include"DSP281x_Device.h" //DSP281xHeaderfileIncludeFile//定義指示燈寄存器地址和寄存器類(lèi)型voidDelay(unsignedintnDelay); //延時(shí)子程序,函數(shù)聲明#defineCTRGR*(int*)0x108000 //控制板全局控制寄存器#defineCTRLR*(int*)0x108007 //控制板輔助控制寄存器main(){

InitSysCtrl(); //初始化PLL,CLKOUT=150M,使能外設(shè)時(shí)鐘,禁止WDEALLOW;//GpioMuxRegs.GPBMUX.all=00;//ConfigureMUXsasdigitalI/OsGpioMuxRegs.GPBDIR.all=0x00FF;//GPIODIRselectGPIOB7:1asoutputEDIS;

例4-81個(gè)LED指示燈接到DSP的通用輸入輸出接口GPIOB5。用C語(yǔ)言編程使之閃爍。+3.3V1kLED11/17/202273山東大學(xué)控制學(xué)院張東亮#include"DSP281x_Device.h"voidDelay(unsignedintnDelay)//延時(shí)程序,自定義函數(shù){ intii,jj,kk=0; for(ii=0;ii<nDelay;ii++) for(jj=0;jj<512;jj++)kk++;} CTRGR=0; //初始化ICETEK-CTR CTRGR=0x80; CTRGR=0; CTRLR=0; //關(guān)閉東西方向的交通燈 CTRLR=0x40; //關(guān)閉南北方向的交通燈 CTRGR=2;while(1){GpioDataRegs.GPBDAT.bit.GPIOB5=0;Delay(10);GpioDataRegs.GPBDAT.bit.GPIOB5=1;Delay(10);}}

11/17/202274山東大學(xué)控制學(xué)院張東亮voidDelay(unsignedintnDelay例4-9,1個(gè)LED指示燈接到DSP通過(guò)擴(kuò)展的外部簡(jiǎn)單接口電路的最低位,其地址為0xc0000。采用通用定時(shí)器T1中斷方式定時(shí)200ms,用C語(yǔ)言編程使之閃爍,即引腳上產(chǎn)生周期為400ms的方波,XCLKIN=30MHz,SYSCLKOUT=150MHz。#include"DSP281x_Device.h" //DSP281x寄存器頭文件#defineLBDS*((unsignedint*)0xc0000) //定義指示燈寄存器地址interruptvoideva_timer1_isr(void);void EVA_Timer1() //定時(shí)器初始化{EvaRegs.GPTCONA.all=0; //初始化EVATimer1EvaRegs.T1PR=0x9895;//定時(shí)周期為5.12us*(T1PR+1)=0.2sEvaRegs.EVAIMRA.bit.T1PINT=1;//使能定時(shí)器1的周期中斷EvaRegs.EVAIFRA.bit.T1PINT=1;//寫(xiě)1清除定時(shí)器1的周期中斷標(biāo)志EvaRegs.T1CNT=0x0000; //計(jì)數(shù)寄存器從0開(kāi)始EvaRegs.T1CON.all=0x1740;//連續(xù)增計(jì)數(shù),128分頻,打開(kāi)定時(shí)器}11/17/202275山東大學(xué)控制學(xué)院張東亮例4-9,1個(gè)LED指示燈接到DSP通過(guò)擴(kuò)展的外部簡(jiǎn)單接口main(){ InitSysCtrl(); //初始化DSP運(yùn)行時(shí)鐘,時(shí)鐘頻率150MHz EALLOW; SysCtrlRegs.HISPCP.all=0x0003;//高速時(shí)鐘頻率=25MHz EDIS; DINT; //關(guān)閉總中斷 IER=0x0000; //清中斷使能 IFR=0x0000; //清中斷標(biāo)志 InitPieCtrl(); //初始化PIE控制寄存器 InitPieVectTable(); //初始化PIE中斷向量表 EVA_Timer1(); //初始化EVATimer1 EALLOW; PieVectTable.T1PINT=&eva_timer1_isr; //中斷服務(wù)程序入口地址放入中斷向量表 EDIS;11/17/202276山東大學(xué)控制學(xué)院張東亮main()11/9/202276山東大學(xué)控制學(xué)院張東//依次使能各級(jí)中斷:外設(shè)中相應(yīng)中斷位->PIE控制器->CPU PieCtrlRegs.PIEIER2.all=M_INT4; //GP定時(shí)器1使能位于PIE第2組第4個(gè),將其使能 IER|=M_INT2;//使能的PIE第2組可屏蔽中斷2(INT2) EINT; //開(kāi)總中斷 LBDS=0; //指示燈全滅 while(1){;} //等待中斷}interruptvoideva_timer1_isr(void){LBDS^=1; //產(chǎn)生方波,最低位指示燈亮滅切換EvaRegs.EVAIMRA.bit.T1PINT=1; //使能定時(shí)器1的周期中斷EvaRegs.EVAIFRA.bit.T1PINT=1; //寫(xiě)1清除定時(shí)器1的周期中斷標(biāo)志PieCtrlRegs.PIEACK.all=PIEACK_GROUP2; //清零PIEACK中的第2組中斷對(duì)應(yīng)位}11/17/202277山東大學(xué)控制學(xué)院張東亮//依次使能各級(jí)中斷:外設(shè)中相應(yīng)中斷位->PIE控制器->C思考題與習(xí)題DSP應(yīng)用系統(tǒng)的軟件開(kāi)發(fā)流程是什么?采用CCS集成開(kāi)發(fā)環(huán)境進(jìn)行軟件開(kāi)發(fā)調(diào)試的步驟是什么?DSP的硬件仿真器與軟件仿真器有什么異同點(diǎn)?什么是COFF格式?它有什么特點(diǎn)?說(shuō)明.text段、.data段、.bss段分別包含什么內(nèi)容?鏈接命令文件包括哪些內(nèi)容?MEMORY命令和SECTION命令分別有什么作用?DSPC語(yǔ)言有哪些特點(diǎn)?C28xDSP編譯器有哪些數(shù)據(jù)類(lèi)型?11/17/202278山東大學(xué)控制學(xué)院張東亮思考題與習(xí)題DSP應(yīng)用系統(tǒng)的軟件開(kāi)發(fā)流程是什么?11/9/2如何訪問(wèn)片內(nèi)外設(shè)寄存器的某些位?如何直接訪問(wèn)存儲(chǔ)器單元?pragma編譯預(yù)處理命令有什么用途?C語(yǔ)言與匯編語(yǔ)言混合編程有哪些方法?C28xDSP的C編譯器擴(kuò)展了哪幾個(gè)關(guān)鍵字?1個(gè)LED指示燈接到DSP的通用I/O引腳GPIOB4。采用通用定時(shí)器T1中斷方式定時(shí)200ms,用C語(yǔ)言編程使之閃爍,XCLKIN=30MHz,SYSCLKOUT=150MHz。11/17/202279山東大學(xué)控制學(xué)院張東亮如何訪問(wèn)片內(nèi)外設(shè)寄存器的某些位?11/9/202279山東大第4章

DSP的軟件開(kāi)發(fā)與C語(yǔ)言編程本章內(nèi)容:4.1DSP開(kāi)發(fā)工具與軟件開(kāi)發(fā)流程4.2集成開(kāi)發(fā)環(huán)境CCS4.3DSP的C工程文件

4.4DSPC語(yǔ)言程序設(shè)計(jì)基礎(chǔ)4.5DSPC程序舉例11/17/202280山東大學(xué)控制學(xué)院張東亮第4章DSP的軟件開(kāi)發(fā)與C語(yǔ)言編程本章內(nèi)容:11/9/24.1DSP開(kāi)發(fā)工具與軟件開(kāi)發(fā)流程1.DSP開(kāi)發(fā)工具硬件TIXDS510(ExtendedDevelopmentSystem)硬件仿真器。DSK(DSPStarterKit)初學(xué)者開(kāi)發(fā)套件。瑞泰ICETEK-5100PP/USBDSP開(kāi)發(fā)系統(tǒng)。評(píng)估板。DSP教學(xué)實(shí)驗(yàn)系統(tǒng)。開(kāi)發(fā)工具包括硬件、軟件兩部分。硬件部分主要是仿真器(Emulator),軟件主要是集成開(kāi)發(fā)環(huán)境CCS(CodeComposerStudio)。DSP開(kāi)發(fā)系統(tǒng)(仿真器)有PCI插卡式、并口式、USB接口式,目前多用USB接口式,即DSP開(kāi)發(fā)系統(tǒng)通過(guò)USB接口與PC機(jī)相連,開(kāi)發(fā)系統(tǒng)通過(guò)JTAG(基于掃描的仿真)接口與用戶(hù)目標(biāo)板相連,實(shí)現(xiàn)DSP軟硬件調(diào)試與程序燒寫(xiě)。11/17/202281山東大學(xué)控制學(xué)院張東亮4.1DSP開(kāi)發(fā)工具與軟件開(kāi)發(fā)流程1.DSP開(kāi)發(fā)工具

DSP評(píng)估板(也稱(chēng)為EVM板、目標(biāo)板、DEMO板、實(shí)驗(yàn)板等),包括基本的DSP芯片及必要的電源、時(shí)鐘、復(fù)位電路外,還經(jīng)常包括用于程序調(diào)試的片外擴(kuò)展存儲(chǔ)器、擴(kuò)展的A/D、D/A轉(zhuǎn)換器、鍵盤(pán)顯示電路、EEPROM、RS232串行接口、SPI接口、CAN接口驅(qū)動(dòng)電路、簡(jiǎn)單應(yīng)用電路等。F2812DSP評(píng)估板11/17/202282山東大學(xué)控制學(xué)院張東亮DSP評(píng)估板(也稱(chēng)為EVM板、目標(biāo)板、DEF2812DSP評(píng)估板原理框圖開(kāi)發(fā)系統(tǒng)與評(píng)估板11/17/202283山東大學(xué)控制學(xué)院張東亮F2812開(kāi)發(fā)系統(tǒng)11/9/20224山東大學(xué)控制學(xué)院張2812EVM板的主要性能指標(biāo)如下:(1)TMS320F2812,運(yùn)行速度150MIPS。(2)片內(nèi)RAM18K字。(3)擴(kuò)展RAM64K字。(4)片內(nèi)16路12位A/D轉(zhuǎn)換器,最大采樣速率12.5MSPS。(5)擴(kuò)展的4路12位D/A轉(zhuǎn)換器DAC7617。(6)兩路UART串行接口,符合RS-232C標(biāo)準(zhǔn)。(7)16路PWM輸出。(8)CAN總線標(biāo)準(zhǔn)接口。(9)用戶(hù)開(kāi)關(guān)與指示燈。(10)片內(nèi)128K字Flash存儲(chǔ)器,帶128位加密位。(11)IEEE1149.1兼容的邏輯掃描電路即JTAG接口,用于仿真調(diào)試。(12)+5V電源輸入,板上3.3V,1.8V電源管理。11/17/202284山東大學(xué)控制學(xué)院張東亮2812EVM板的主要性能指標(biāo)如下:11/9/20225山11/17/202285山東大學(xué)控制學(xué)院張東亮11/9/20226山東大學(xué)控制學(xué)院張東亮2.軟件開(kāi)發(fā)流程軟件開(kāi)發(fā)流程框圖11/17/202286山東大學(xué)控制學(xué)院張東亮2.軟件開(kāi)發(fā)流程軟件開(kāi)發(fā)流程框圖11/9/20227山

軟件開(kāi)發(fā)流程

1)編輯:生成源程序(*.asm,*.c)、頭文件(*.h)與命令文件(*.cmd)。2)編譯與匯編:生成目標(biāo)文件(*.obj,公共目標(biāo)文件COFF格式)及列表文件(*.lst)。3)連接:生成可執(zhí)行代碼文件(*.out)及映射文件(*.map)。4)調(diào)試:通過(guò)JTAG接口下載到目標(biāo)系統(tǒng)EVM。5)通過(guò)JTAG接口將程序固化燒寫(xiě)到Flash存儲(chǔ)器。11/17/202287山東大學(xué)控制學(xué)院張東亮軟件開(kāi)發(fā)流程1)編輯:生成源程序(*.asm,*.c)軟件開(kāi)發(fā)工具主要有源程序編輯器(Editor)編譯器(Compiler)匯編器(Assembler)鏈接器(Linker)歸檔器(Archiver)運(yùn)行時(shí)支持庫(kù)(Run-Time-SupportLibrary)庫(kù)建立程序(Library-buildUtility)HEX轉(zhuǎn)換程序(HexConversionUtility)3.軟件工具11/17/202288山東大學(xué)控制學(xué)院張東亮軟件開(kāi)發(fā)工具主要有3.軟件工具11/9絕對(duì)列表器(AbsoluteLister)和交叉引用列表器(Cross-ReferenceLister)調(diào)試工具(Debuggingtools)C++名稱(chēng)復(fù)原程序(C++NameDemanglingUtility)GEL語(yǔ)言(GeneralExtensionLanguage,通用擴(kuò)展語(yǔ)言)DSP/BIOS等。11/17/202289山東大學(xué)控制學(xué)院張東亮絕對(duì)列表器(AbsoluteLister)和交叉引用列表1.CCS軟件安裝與設(shè)置CCS2.0’C2000(CCS3.3)驅(qū)動(dòng)程序設(shè)置。Simulator:PC模擬軟件仿真。Emulator:實(shí)時(shí)DSP硬件仿真。4.2集成開(kāi)發(fā)環(huán)境CCS11/17/202290山東大學(xué)控制學(xué)院張東亮1.CCS軟件安裝與設(shè)置CCS2.0’C2000(CCS運(yùn)行主窗口

11/17/202291山東大學(xué)控制學(xué)院張東亮CCS運(yùn)行主窗口11/9/202212山東大學(xué)控制學(xué)院CCS主要工具源程序編輯器(Editor)。C編譯器(CCompiler)。匯編器(Assembler)。連接器(Linker)。調(diào)試工具(Debug)。十六進(jìn)制轉(zhuǎn)換公用程序(HexConversionUtility)。11/17/202292山東大學(xué)控制學(xué)院張東亮CCS主要工具源程序編輯器(Editor)。11/9/2022.CCS主要菜單與功能典型的CCS運(yùn)行界面如圖所示。CCS的功能可以通過(guò)菜單或工具條按鈕實(shí)現(xiàn)。主要的菜單項(xiàng)有File、Edit、View、Project、Debug等。這些菜單的使用與常用的集成開(kāi)發(fā)軟件VisualC++等使用方法基本一樣。11/17/202293山東大學(xué)控制學(xué)院張東亮2.CCS主要菜單與功能典型的CCS運(yùn)行界典型CCS運(yùn)行界面11/17/202294山東大學(xué)控制學(xué)院張東亮典型CCS運(yùn)行界面11/9/202215山東大學(xué)控制學(xué)院CodeComposerStudio?Components

Robust,Easy-to-UseDevelopmentEnvironmentHelpCPUWindowMemorywindowGraphwindowProjectManager:Source&objectfilesFiledependenciesCompiler,Assembler&LinkerbuildoptionsStatuswindowFullC/C++&AssemblyDebugging:C&ASMSourceMixedmodeDisassembly(patch)SetBreakPointsSetprobePointsWatchwindowProductiveEditor:StructureExpansionMenusorIcons11/17/202295山東大學(xué)控制學(xué)院張東亮CodeComposerStudio?ComponenReal-timeDebuggingAllowsyoutohaltinnon-criticalcodefordebugwhiletime-criticalinterruptscontinuetobeserviced.Accessmemoryandregisterswithoutstoppingtheprocessor.Implementedinsilicon,notbyadebugmonitor:Easy-to-use,noapplicationresourcesrequiredInterruptvoidISR_1(){………}Main(){……}function(){

……}Haltandsinglestepnon-timecriticalcodeTime-criticalinterruptsarestillserviced.InControl,IfTheProcessorStops,TheSystemCanGoOutOfControl11/17/202296山東大學(xué)控制學(xué)院張東亮Real-timeDebuggingAllowsyouFile菜單11/17/202297山東大學(xué)控制學(xué)院張東亮File菜單11/9/202218山東大學(xué)控制學(xué)院張東亮Project菜單11/17/202298山東大學(xué)控制學(xué)院張東亮Project菜單11/9/202219山東大學(xué)控制學(xué)院View菜單11/17/202299山東大學(xué)控制學(xué)院張東亮View菜單11/9/202220山東大學(xué)控制學(xué)院張東亮Debug菜單11/17/2022100山東大學(xué)控制學(xué)院張東亮Debug菜單11/9/202221山東大學(xué)控制學(xué)院張東3.采用CCS開(kāi)發(fā)應(yīng)用程序的步驟創(chuàng)建一個(gè)新工程(project)。編輯源程序(*.asm,*.c)與連接命令文件(*.cmd)。將文件添加到該工程中(*.asm,*.c,*.h,*.cmd)。編譯匯編連接。裝載程序。調(diào)試程序。程序固化。11/17/2022101山東大學(xué)控制學(xué)院張東亮3.采用CCS開(kāi)發(fā)應(yīng)用程序的步驟創(chuàng)建一個(gè)新工程(proje調(diào)試程序連續(xù)運(yùn)行與單步運(yùn)行。設(shè)置斷點(diǎn)。查看與修改存儲(chǔ)單元。查看與修改寄存器內(nèi)容。觀察和編輯變量。程序Animate運(yùn)行和數(shù)據(jù)圖形顯示。11/17/2022102山東大學(xué)控制學(xué)院張東亮調(diào)試程序連續(xù)運(yùn)行與單步運(yùn)行。11/9/202223山東大學(xué)控C工程(Project)幾種基本文件CCS工程文件(擴(kuò)展名為.pjt)。由CCS自動(dòng)生成。在CC(CodeComposer)軟件環(huán)境中,擴(kuò)展名為.mak。

源程序:匯編語(yǔ)言文件(*.asm),C文件(*.c)。頭文件(*.h):定義寄存器映射地址,用戶(hù)自定義的常量等。例如,頭文件DSP281x_Adc.h定義了ADC寄存器,頭文件DSP281x_PieVec.h定義了PIE中斷矢量。鏈接命令文件(*.cmd)。庫(kù)文件(*.lib)。運(yùn)行時(shí)支持庫(kù)rts2800_ml.lib。目標(biāo)文件(*.obj):COFF公共目標(biāo)文件格式。列表文件(*.lst):匯編生成的文件。映射文件

溫馨提示

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

評(píng)論

0/150

提交評(píng)論