版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
08級《DSP控制技術(shù)》復(fù)習(xí)題及參考答案(初稿)1考試內(nèi)容以教材及其解答為主,并參考授課PPT和PMSM3-3程序2考題題型判斷題、填空題、選擇題、計算與編程題、軟件設(shè)計題、簡述題。重點掌握片內(nèi)外設(shè)寄存器的功能和設(shè)置及其初始化。掌握系統(tǒng)控制初始化(包括 PLL設(shè)置、系統(tǒng)時鐘設(shè)置、屏蔽看門狗,高速和低速外設(shè)時鐘設(shè)置) ;掌握GPIO的使用和ADC的使用;掌握事件管理器的使用尤其是對稱與非對稱 PWM波形的產(chǎn)生步驟;掌握PIE中斷機制及常用外設(shè)中斷的設(shè)置。了解SCI和SPI及XINTF。了解DSPC語言的特點和關(guān)鍵字,了解寄存器和存儲器的空間分配及CMD文件的編寫。掌握C/C++生成軟件模塊的方法。掌握Q格式和標幺化方法,掌握DSP硬件設(shè)計中電平轉(zhuǎn)換、PWM區(qū)動隔離等方法,了解無刷直流電動機和永磁同步電動機的原理和控制方法,掌握直流電機的 DSP實現(xiàn)。掌握應(yīng)用系統(tǒng)軟硬件調(diào)試的增量式方法。掌握根據(jù)控制框圖分解軟件模塊的方法和用軟件模塊構(gòu)建系統(tǒng)的方法。一DSP概述1DSP芯片有什么特點?DS肢數(shù)據(jù)格式分為哪兩類?計算機控制技術(shù)要求處理器的速度越來越高,體積越來越小,DSP的發(fā)展正好能滿足這一發(fā)展的要求。因為,傳統(tǒng)的其它處理器都有不同的缺陷。 MCU的速度較慢;CPU體積較大,功耗較高;嵌入式CPU的成本較高。DSP的發(fā)展,使得在許多速度要求較高,算法較復(fù)雜的場合,取代MCU或其它處理器,而成本有可能更低。與MCU相比:速度比MCI快,主頻較高;適合于數(shù)據(jù)處理,數(shù)據(jù)處理的指令效率較高;DSP均為16位以上的處理器,不適合于低檔的場合,適用于復(fù)雜控制算法的實現(xiàn); DSP可以同時處理的事件較多,系統(tǒng)級成本有可能較低。DSP的靈活性較好,大多數(shù)算法都可以軟件實現(xiàn)。DSP的集成度較高,可靠性較好。與嵌入CPU相比:DSP是單片機,構(gòu)成系統(tǒng)簡單;DSP的速度快;DSP的成本較低;DSP的性能高,可以處理較多的任務(wù)。DS肢數(shù)據(jù)格式分為定點和浮點DSP定點與浮點DSP的基本差異在于它們對數(shù)據(jù)的數(shù)字表示法不同。定點DSP嚴格執(zhí)行整數(shù)運算,而浮點DSP既支持整數(shù)運算又支持實數(shù)運算,后者以科學(xué)計數(shù)法進行了標準化。浮點DSP將數(shù)據(jù)路徑分為兩部分:一是可用作整數(shù)值或?qū)崝?shù)基數(shù)的尾數(shù),二是指數(shù)。業(yè)界標準單一精確運算的 32位浮點DSP中,尾數(shù)是24位,指數(shù)是8位。動態(tài)范圍大大高于定點格式提供的精確度。但需要的內(nèi)部電路多,32位數(shù)據(jù)路徑經(jīng)當時可用定點器件寬1倍。晶片面積越大,引腳數(shù)量也越多,封裝也越大,成本也更高。但它支持C語言。浮點格式中,實數(shù)運算可直接通過代碼加入硬件運算中,而定點器件則須通過軟件才能間接運行實數(shù)運算。增加了算法指令與延長了開發(fā)時間。浮點最初用于開發(fā)工作強度較大的情況。所以一般定點DSP功耗低,成本低,而浮點DSP成本高,功耗大。2TI公司的TMS320有幾大系列?分別有什么特點?TMS32系列DSPfc要分為兩種類型:定點DSP芯片,浮點DSP芯片;相比之下,定點DS系列齊全,時鐘頻率略高些;浮點DSP適于需要大量高精度運算的場合。 C2000稱之為最佳控制平臺,集成有事件管理器等多種電機控制系統(tǒng)需要的外設(shè),適合電機的數(shù)字控制; C500C稱之為最低功耗平臺,具有處理速度快、功耗低、相對成本低等特點,適合便攜、消費類電子設(shè)備;C6000稱之為最佳處理能力平臺,處理速度更快、精度高,更適合圖像處理及通信設(shè)備等高端市場。AC2000高性能的數(shù)字控制針對數(shù)字運動控制系統(tǒng)設(shè)計的定點 DSR具有強大的運算和控制能力;LF24x為低成本、低功耗系列,速度可達 40MIPS;C28x系列的內(nèi)核和指令與LF24X完全兼容。主頻高達150MHz主要用于大存儲設(shè)備管理,高性能的控制場合。 TMS320C2000DSP特點:1)唯一內(nèi)含F(xiàn)lash的DSP系列;2)唯一內(nèi)含SCI的DSP系列,易實現(xiàn)和PC機的RS232串口通信。BC5000低功耗的手持設(shè)備C5000(定點、低功耗)系列是目前TIDSP的主流DSP它涵蓋了從低檔到中高檔的應(yīng)用領(lǐng)域,目前也是用戶最多的系列。 C55x系列是TI的第三代DSP與54X兼容,功耗為C54xx的1/6,性能為C54xx的5倍;應(yīng)用領(lǐng)域:3G無線通信、語音處理、 GPS無線網(wǎng)絡(luò)、數(shù)碼產(chǎn)品。CC6000高性能的DSP應(yīng)用;是TI的超高性能DSP系列,功耗較大;C62xx系列是定點的DSP系列芯片種類較豐富,是主要的應(yīng)用系列;C64xx系列是新產(chǎn)品,性能是C62xx的10倍;C67xx系列是浮點的DSP用于需要高速浮點處理的領(lǐng)域;應(yīng)用領(lǐng)域:寬帶網(wǎng)絡(luò)、無線基站、 3D圖象、語音識別、多媒體系統(tǒng)。DC3X系列是高性能的32位浮點DSP具有較高的性價比, 適于那些數(shù)據(jù)動態(tài)范圍大、精度高的應(yīng)用;推薦使用VC33;C3x系列是TI浮點DSP的基礎(chǔ)。應(yīng)用領(lǐng)域:工業(yè)自動化和機器人、視頻會議、語音處理、汽車電子、計算機外設(shè)。1-3DSP芯片主要有哪些特點?采用哈佛結(jié)構(gòu),程序和數(shù)據(jù)存儲空間分開,可以同時訪問指令和數(shù)據(jù)。具有專用硬件乘法器,可在一個指令周期內(nèi)完成一次乘法和一次加法。支持流水線操作,使取指、譯碼和執(zhí)行等操作可以重疊執(zhí)行。可以并行執(zhí)行多個操作,具有特殊的DSP指令。片內(nèi)具有快速RAM,通??赏ㄟ^獨立的數(shù)據(jù)總線在兩塊中同時訪問,具有片內(nèi)多總線結(jié)構(gòu)。具有在單周期內(nèi)操作的多個硬件地址產(chǎn)生器,單周期指令。快速的中斷處理和硬件I/O支持。4常用的DSP芯片有哪些?TI公司:TMS320系列DSP已經(jīng)成為當今世界最有影響的DSP芯片,其DSP市場占有量占全世界份額的近50%,為世界上最大的DSP芯片供應(yīng)商;Motorola公司:MC96002;ADI(AnalogDevice)公司:AD2100;MicroChip:dSC;AT&T:DSP16/32二DSP28121簡述2812DSP的內(nèi)部結(jié)構(gòu)主要部分的功能。CPU、片內(nèi)存儲器、片內(nèi)外設(shè) (片內(nèi)接口電路)F28xDSP的硬件資源
F280116■B160ns;1D.6a/32/12xSPI,SCI.CAN,1=0F28063210I160ns/10.616/44/24xSP|p2xSCI.CAN,l2CF2808.64ieI160ns710.816/44/24xSPId2xSCL2xCAN.I2CF281064ie80ns/10.116/NA6/2SPI,2xSCIdCAN,McBSPF281112818SOns/10.116/NA6/2SPIt2XSCI,CAN,McBSPF2812128IS80ns/10.116/NA6/2SPI,2xSCLCAN,McBSP,EMIF2-2指出下列符號的物理意義ACC(AH、AL)累加器XT(T、TL)乘法寄存器P(PHP(PH、PL)DPSPXAR0~XAR7數(shù)據(jù)頁指針堆棧指針輔助寄存器0~7AR0~AR7 輔助寄存器0~7的低16位PC 程序計數(shù)器RPC 程序返回計數(shù)器ST0ST1IFR狀態(tài)寄存器0狀態(tài)寄存器1中斷標志奇存器IERDBGIER中斷使能寄存器調(diào)試中斷使能寄存器。2-3狀態(tài)寄存器STO^STl有什么作用?DSP控制器含有兩個狀態(tài)寄存器ST0和ST1,它們含有各種狀態(tài)和控制位。狀態(tài)寄存器的內(nèi)容可以被保存到數(shù)據(jù)存儲器, 也可以從數(shù)據(jù)存儲器中進行加載。 在子程序調(diào)用或者進入中斷子程序時,實現(xiàn)CPU狀態(tài)態(tài)的保存;在退出子程序或從中斷子程序返回前,將 CPU的狀態(tài)回返。ST0累加器具有相關(guān)狀態(tài)位信息保存在狀態(tài)寄存器ST0中。ST0主要用于算術(shù)邏輯運算,并且只能在流水線的E階段進行修改,其中,OVM、OVC/OVCUV主要用于控制算術(shù)邏輯運算中的溢出保護功能,N,ZC用于對運算結(jié)果做出指示,PM用于位移操作。表中的保留位讀出時為1。ST1ST1主要用于尋址邏輯控制,其中,XFMOMIMAPOBJMODEF兼容模式的選擇,AMODEPAGE0ELLOW和SPA用于指示和控制CPU的尋址方式。IDIESTATLOO用于指示CPU的工作狀態(tài),INTM實現(xiàn)中斷使能的設(shè)置。位6EALLOW仿真讀取使能位。復(fù)位時,該位允許對仿真和其它寄存器進行讀取。EALLOW可由AEALLOW置位,由EDIS指令清0。當CPU服務(wù)于某一中斷時,EALLOW
清0。然而,在中斷服務(wù)子程序ISR的開始就去讀到仿真寄存器是不允許的。如果 ISR必須讀取仿真寄存器,它必須包含一個EALLOW指令,在ISR的結(jié)束,可用IRET指令進行恢復(fù)。位0INTM中斷全局屏蔽位。該位可全局使能和禁止所有的 CPU可屏蔽中斷。0可屏蔽中斷被全局使能。為被 CPU確認,必須由中斷使能寄存器 IER產(chǎn)生局部使能的可屏蔽中斷。1可屏蔽中斷被全局禁止。即使可屏蔽中斷由 IER局部使能,也不能被CPU確認。但對非屏蔽中斷、硬件復(fù)位和硬件中斷 NMI沒有影響。另外當CPU在實時仿真模式下暫停時,即使INTM已置為屏蔽,仍可由IER和DBTIER激活一個可屏蔽中斷。2-4哪些片內(nèi)外設(shè)的寄存器是受 EALLOW保護的?受EALLOW保護即CPU不能寫。在CPU狀態(tài)寄存器ST1的EALLOW指明了寄存器的保護狀態(tài)。復(fù)位后,EALLOW清0,使能EALLOW保護。只允許CPU讀,JTAG讀和寫。執(zhí)行EALLOW指令,即EALLOW位置1,CPU可寫寄存器。修改完畢后,執(zhí)行 EDIS指令,EALLOW位清0,保護這些寄存器不被CPU寫了。下列寄存器受EALLOW保護:DSP仿真寄存器;Flash寄存器;CSM寄存器;PIE矢量表;系統(tǒng)控制寄存器; GPIOMUX寄存器;特定的eCAN寄存器。外部存儲器及I/O擴展XINTFZone0/1,Zone2,Zone6/7,1M+32K。通過數(shù)據(jù)線XD0-XD15、地址線XA0-XA18及控制信號線擴展。典型的DSP應(yīng)用系統(tǒng)多采用最小系統(tǒng),即系統(tǒng)由一個F2810DSP芯片加上相應(yīng)的電源、時鐘、復(fù)位、JTAG電路及應(yīng)用電路構(gòu)成,這種系統(tǒng)也稱為單片系統(tǒng)方案 (SingleChipSolution)。在程序調(diào)試過程中,可以先將程序放入到 H0SARAM、L0SRAM和L1SARAM中運行仿真調(diào)試,對于程序長度小于16K時比較方便。調(diào)試完成后,再將程序放入 Flash存儲器中運行。5DSP2812由哪此片內(nèi)外設(shè)組成?片內(nèi)外設(shè)有事件管理器A、BADCWDMCBSPCANSCIA、B、SPI和GPIQ其中只有ADC輸入,WD俞出,其它外設(shè)都是可雙向流動的。CPU內(nèi)部有存儲器總線掛有算術(shù)邏輯單元、 乘法器和輔助寄存器。內(nèi)部數(shù)據(jù)總線是 32位,地址總線是22位。其中EV是控制器特有的部件而有別于C5000和C6000。主要就是用來完成速度和位置數(shù)字部件的信號輸入和處理,提供速度反饋和位置反饋。 MCBSP是多通道緩沖串口; CANSCI、SPI是通信接口模塊。F2812主頻最高可達150MHZ內(nèi)部集成128KB的Flash存儲器,4KB的BootROMF系列與C系列的區(qū)別是F系列帶Flash,而C系列不帶。2810可以說是28XX系列的最小系統(tǒng)。與2812相比,2810不帶外部擴展接口XINTF也無外部總線。三DSP軟件開發(fā)基礎(chǔ)1DSPC語言有何特點?數(shù)據(jù)類型C語言的每個數(shù)據(jù)類型都有與之對應(yīng)的類型名保留字,由于 281x中數(shù)據(jù)的最小長度為16位,因此所有的字符(char)型數(shù)據(jù),包括有符號字符型(signedchar)和無符號字符型(unsignedchar),長度均為16位,即用一個字的長度表示。數(shù)據(jù)類型的其它特點有:所有的整型(char,short,int,以及對應(yīng)的無符號類型)都是等效的,用16位二進制值表示;長整型和無符號長整型用32位二進制值表示。有符號數(shù)用2s補碼符號表示。char是有符號數(shù),等效于int。枚舉類型enumf弋表16位值,在表達式中enum與int等效。 所有的浮點類(float、double、longdouble)等效,表示成IEEE單精度格式。2DSPC語言有哪些關(guān)鍵字?TMS320C28xC/C++編譯器支持標準的 const、register、volatile等關(guān)鍵字,另外還擴展了cregister、interrupt、near、far等關(guān)鍵字。const該關(guān)鍵字可以使你更優(yōu)化存儲器的分配。你可以加 const到任何變量或陣列的定義以確保其內(nèi)的值不改變。例如在下例中,定義了一個 const型的PIE_VECT_TABLE類型的結(jié)構(gòu)變量PieVectTableInit:interruptvoidPIE_RESERVED(void)//Reservedspace.Fortest.{asm("ESTOP0");for(;;);}conststructPIE_VECT_TABLEPieVectTableInit={PIE_RESERVED,//ReservedspacePIE_RESERVED,//Reservedspace}其中PIE_VECT_TABLE是一個存放中斷矢量表的結(jié)構(gòu), PieVectTableInit是該結(jié)構(gòu)的一個變量,其中定義了所有中斷函數(shù)的起始地址。由于這些地址在 Flash中都固化好,不會改變,因此在聲明PieVectTableInit前可以加const以表示其中的變量內(nèi)容是常數(shù),不會改變。volatile編譯時優(yōu)化器會分析數(shù)據(jù)的流動,盡可能避免對存儲器的讀寫。因此如果你要編寫 C弋碼對存儲器進行讀寫操作,就必須用volatile關(guān)鍵字確定這些操作,以此來說明所定義的變量是可變的”,是可以被DSP中的其它硬件修改的,而不是僅僅只能由 C程序本身修改。用volatile關(guān)鍵字修飾的變量會被分配到非初始化塊。編譯器不會對 volatile變量做任何優(yōu)化。cregister編譯器擴充了C,增加了cregister關(guān)鍵字,從而允許高級語言讀寫控制寄存器。當你對一個對象加cregister修飾時,編譯器比較對象和IER(中斷使能寄存器)、IFR(中斷標志寄存器)的名字。如果名字相符,編譯器產(chǎn)生對控制寄存器操作的弋碼;如果名字不符,編譯器提示一個錯誤。cregister關(guān)鍵字僅用于文件范圍內(nèi), 不能用于函數(shù)內(nèi)的聲明。 而且cregister只能用于整型或指針,不能用于浮點、結(jié)構(gòu)或聯(lián)合等類型。cregister并沒有指明對象是否是volatile,如果控制寄存器是volatile的(即可以被外部控制所修改),該對象就應(yīng)該同時用volatile聲明。在281xC中,cregister僅限于IER、IFR,因此程序中必須有如下聲明:externcregistervolatileunsignedintIER;externcregistervolatileunsignedintIFR;在聲明了寄存器后,就可以直接用它了。 注意IFR只能用|(或)操作和&(與)操作,例:IFR|=0x100;IFR&=0x100;interrupt28xC/C++編譯器增加了interrupt關(guān)鍵字用來說明一個函數(shù)是一個中斷函數(shù)。中斷函數(shù)有一些特殊的地方,如寄存器保存和返回順序。當一個函數(shù)用 interrupt定義后,編譯器就自動加入基于中斷函數(shù)的寄存器內(nèi)容保存和特殊的中斷返回順序的部分。pragma對象pragma對象告訴編譯器的預(yù)處理器如何對待函數(shù)。 TMS320C28XC/C++支持如下的pragma:CODE_SECTION(func,“sectionname”)DATA_SECTION(symbol,“sectionname”)INTERRUPT(func)FUNC_EXT_CALLED(func)FAST_FUNC_CALL(func)其中,func和symbol必須在函數(shù)外聲明或定義。同時也必須在函數(shù)外指定 pragma,而且必須在聲明、定義、引用func和symbol之前指定pragma。不這樣做編譯器會產(chǎn)生警告錯誤。CODE_SECTIONCODE_SECTION為func在一個名為sectionname的塊中指定空間。如果你有一個代碼對象并想將其鏈接到不同于.txt的空間時,該語法就非常有用。 C的標準用法是:#pragmaCODE_SECTION(func,“sectionname”);例:charbufferA[80];//bufferA是全局變量#pragmaCODE_SECTION(funcA,“codeA”);charfuncA(inti);//對函數(shù)funcA的聲明voidmain(){charc;c=funA(1);//對函數(shù)funcA的引用}charfuncA(inti)//函數(shù)funcA的定義{returnbufferA[i];}在上例中,函數(shù)代碼塊funcA被定位于codeA段中。codeA段在.cmd文件中規(guī)定了物理地址。DATA_SECTIONDATA_SECTION為symbol在一個名為sectionname的塊中指定空間。如果你有一個數(shù)據(jù)對象并想將其鏈接到不同于.bss的空間時,該語法就非常有用。 C的標準用法是:#pragmaDATA_SECTION(symbol,“sectionname”);例:#pragmaDATA_SECTION(bufferB,“my_sect”);charbufferB[512];//對bufferB的定義放在pragma的后面數(shù)據(jù)塊bufferB被定位于my_sect段中,my_sect段在.cmd文件中規(guī)定了物理地址。farC/C++編譯器的默認尋址空間是64K。所有指針的默認大小為16位。C28x支持的尋址空間達4MI字,即22位。加上far關(guān)鍵字限定符的指針大小為 22位,可以尋址4M字空間。3-3DSPC語言中如何用實現(xiàn)寄存器及存儲器的硬件抽象?DSP2812^以用匯編語言和C語言編寫程序代碼。由于系統(tǒng)時鐘高,運行速度快,大多采用C語言編程。同單片機一樣, DSP勺C語言也是面向硬件的C語言。對硬件的操作就是對寄存器的操作。用C語言實現(xiàn)寄存器的硬件抽象是關(guān)鍵。 不同于MCUDSP2812及C5000、C6000系統(tǒng)符合嵌入式系統(tǒng)C語言規(guī)范EC++。通過pragma偽指令告訴編譯器如何對待特定的函數(shù)、對象或代碼段。TMS320C28XC/C++編譯器支持如下形式的pragma偽指令:CODE_SECTION(fun“c,sectionname”);DATA_SECTION(symbo“l(fā),sectionname”);注意:func和symbol必須在函數(shù)外聲明或定義。同時, pragma偽指令也必須在函數(shù)外,且位于聲明、定義或引用func和symbol之前,否則,編譯器會給出警告信息。寄存器的定義采用結(jié)構(gòu)體、共用體、位域結(jié)構(gòu)體定義寄存器變量,并虛擬一個外設(shè)寄存器結(jié)構(gòu)體,它包含了相應(yīng)外設(shè)如E\勺勺所有寄存器及位定義。其寄存器定義在DSP281x_Ev.h文件中,此文件中還定義了函數(shù)原型和外部定義如:externvolatilestructEVA_REGSEvaRegs;externvolatilestructEVB_REGSEvbRegs;extern將此結(jié)構(gòu)變量說明為外部變量;volatile意思為“可變的”,所修飾的變量會被分配到非初始化段,編譯器不會對此變量進行任何優(yōu)化。是可以由 DSF中的其它硬件修改的,而不僅僅只能由C程序本身。由于寄存器都是映射到數(shù)據(jù)存儲器,要編寫 C代碼對存儲器進行讀/寫操作,必須用volatile關(guān)鍵字確定這些操作。而函數(shù)原型在文件DSP281x_GlobalPrototypes.h中定義,如externvoidInitAdc(void);externvoidInitEv(void);externvoidKickDog(void);externvoidDisableDog(void);等。在全局變量和為命名段名的段中符號分配空間文件DSP281x_GlobalVariableDSP281x中,通過pragma偽指令將寄存器變量分配到數(shù)據(jù)段。如#pragmaDATA_SECTION(AdcRegs,"AdcRegsFile");DSP281x^卜設(shè)寄存器鏈接命令文件 DSP281x_Headers_nonBIOS.cmd中,通過MEMOR偽指令指示寄存器的實際硬件空間如ADC:origin=0x007100,length=0x000020DSP281x^卜設(shè)寄存器鏈接命令文件 DSP281x_Headers_nonBIOS.cmd中通過SECTION偽指令將寄存器數(shù)據(jù)段分配到 實際硬件空間。如AdcRegsFile:>ADC,PAGE=1存儲器的映射也類似于寄存器,但簡單得多,只需在命令文件中分配到實際硬件空間。一般在存儲器F2812程序在RAM運行時的連接命令文件F2812_EzDSP_RAM_lnk.cmd中。這樣就將用結(jié)構(gòu)變量AdcRegs、PieVectTable等描述的AD(寄存器、中斷矢量表和真正的硬件地址對應(yīng)起來。因此用戶在使用時就完全可以不用考慮具體的硬件地址映射問題。其他硬件的編程方法類似。3-4C/C++工程項目由哪些文件組成?各自的功能是什么?
一個DSP應(yīng)用,在TI公司的集成開發(fā)環(huán)境CCS(codecomposerstudio)中組織成一個項目(project)。項目通常由以下文件組成:(1)C語言程序(.c)(2)頭文件(.h)(3)庫文件(rts2xx.lib)(4)命令文件(.cmd)(5)復(fù)位和中斷向量文件vectors.asm其中只一個.c文件含有main(),稱為主程序,其它.c文件可是一些相關(guān)的子程序, 如中斷、初始化子程序等,這些都是可執(zhí)行的 .c文件。編譯程序在編譯時會分別編譯所有的文件再用鏈接器將所有的.OBJ文件鏈接起來。另外,.h文件按照各種外設(shè)和CPU資源定義了各種寄存器。上述絕大部分子程序其實都不用用戶自己編寫,在TI公司的免費例程中已經(jīng)寫好,用戶只需要稍加修改,并加入自己的主程序,就可編寫出自己的工程文件。這也就是用 C語言編程上手快的原因之一。DSP281x_SysCtrl.h系統(tǒng)控制寄存器定義DSP281x_PieVect.hPIE矢量表定義DSP281x_PieCtrl.hPIE控制寄存器定義DSP281x_DefaultIsr.h缺省中斷服務(wù)定義DSP281x_XIntrupt.h外部中斷寄存器定義DSP281x_Adc.hADC寄存器定義DSP281x_CpuTimers.hCPU寄存器定義DSP281x_Ecan.hEcan寄存器定義DSP281x_Ev.h事件管理器寄存器定義DSP281x_Gpio.h通用IO寄存器定義DSP281x_Mcbsp.hMcbsp寄存器定義DSP281x_Sci.hEcan寄存器定義DSP281x_Spi.hEcan寄存器定義DSP281x_Ecan.hEcan寄存器定義DSP281x_Xintf.hXintf 寄存器定義DSP281x_Xintf.hXintf 寄存器定義DSP281x_SWPrioritizedIsrLevels.h軟件優(yōu)先級定義#defineDINTasm("#defineDINTasm("setcINTM"#defineERTMasm("clrcDBGM"#defineDRTMasm("setcDBGM"#defineEALLOWasm("EALLOW")#defineEINTasm("clrcINTM"#defineEDISasm("EDIS")#defineESTOP0asm("ESTOP0")還有常用中斷的數(shù)字定義,寄存器位定義,#ifndefDSP28_DATA_TYPES#defineDSP28_DATA_TYPEStypedefintint16;typedeflongint32;DSP281x_Dvice.h28XX元件定義,包括常用CPU寄存器如IFR,IER,常用匯編的預(yù)編譯))))DSPC語言數(shù)據(jù)類型定義如typedefunsignedintUint16;typedefunsignedlongUint32;typedeffloatfloat32;typedeflongdoublefloat64;#endif并包含了所有外設(shè)的頭文件DSP281x_GlobalPrototypes.h全局函數(shù)原型forDSP28ExamplesexternvoidInitAdc(void);externvoidInitPeripherals(void);externvoidInitECan(void);externvoidInitEv(void);externvoidInitGpio(void);externvoidInitMcbsp(void);externvoidInitPieCtrl(void);externvoidInitPieVectTable(void);externvoidEnableInterrupts(void);externvoidInitSci(void);externvoidInitSpi(void);externvoidInitSysCtrl(void);externvoidInitXintf(void);externvoidInitXIntrupt(void);externvoidInitPll(Uint16val);externvoidInitPeripheralClocks(void);externvoidKickDog(void);externvoidDisableDog(void);在相應(yīng)的.c文件中規(guī)定了寄存器的初始化函數(shù)及其缺省值。DSP281x_PieCtrl.cPIE控制寄存器初始化函數(shù)DSP281x_PieVect.cPIE矢量表初始化函數(shù)DSP281x_DefaultIsr.c缺省中斷服務(wù)路線DSP281x_GlobalVariableDefs.c全局變量和數(shù)據(jù)段程序DSP281x_GlobalVariableDefs.cDSP281x 全局變量和數(shù)據(jù)段3-5與教材中C語言的函數(shù)模塊相比,類模塊具有以下優(yōu)點:1函數(shù)名比變量名穩(wěn)定。所有的接口使用公有的成員函數(shù)而不是公有的數(shù)據(jù)成員。 代價是即便是簡單的輸入輸出(本可以通過變量賦值來實現(xiàn)的)也須通過成員函數(shù)來完成。函數(shù)調(diào)用是有額外開銷的。是以降低效率來換取可維護性的一種策略。 C++可通過在類的內(nèi)部定義函數(shù)或用關(guān)鍵字inline實現(xiàn)內(nèi)聯(lián),來減少函數(shù)開銷。TI采用賦值語句來完成對象的輸出輸入功能。2相對于C,C++可節(jié)省全局符號資源相對于函數(shù),對象是更抽象的概念對象是更大的容器以數(shù)據(jù)為中心是更為合理的模塊提供了改進如構(gòu)造函數(shù)、關(guān)鍵詞private等pvivate有利于信息的隱藏,防止誤pvivate有利于信息的隱藏,防止誤3-6面向DSP的C/C++是如何實現(xiàn)類的?C語言沒有關(guān)鍵字class但可用結(jié)構(gòu)體來實現(xiàn)類。通過typedef實現(xiàn)指針的簡潔定義以類名加后綴”_Handle"表示指針TypedefSTUD*STUD_Handle;typedefstruct{_iqAs;_iqBs;_iqAlpha;_iqBeta;void(*calc)();}CLARKE;typedefCLARKE*CLARKE_handle;對象的初始化C語言沒有自動初始化的構(gòu)造函數(shù)機制,每次定義對象時,可以用結(jié)構(gòu)體的初始化來模擬構(gòu)造函數(shù),實現(xiàn)對象的初始化,作為簡化,初始化值用宏定義來代替#defineCLARKE_DEFAULTS{0,\0,\0,\0,\(void(*)(Uint32))clarke_calc}TI的例程中,對象中所變量都作了初始化;防止漏寫,所有類的定義都是變量在前,函數(shù)指針在后,要浪費內(nèi)存。必須初始化所有的變量后才能對必須有所指的函數(shù)指針做初始化。3-7TI算法模塊C/C++規(guī)范Module.htypedefstructmodule_data{intin,pastIn,result;//Persistentdata,coefficientsetc.void(*calc)()//Pointertocalculationfunction}MODULE;#defineMODULE_DEFAULTS{0,0,0,(void(*)(Uint32))module_calcModule.cvoidmodule_calc(MODULE*p){//computecodep->result=p->pastIn+p->In;p->pastIn=p->In;}Client.cMODULEmod=MODULE_DEFAULTS;voidsomefunc(void){intfoo;
mod.in=10;//coefficientconfigurationmod.calc(&mod);foo=mod.result;//Useresult}3-8以CLARKE變換\PARK變換為例,說明TI軟件模塊的規(guī)范。As CLARKEAlpha L ?解答:1首先,確定模塊的輸入輸出,并增加對應(yīng)的頭文件進行定義類、定義缺省值即初始化化值,并定義函數(shù)原型。typedefstruct{_iqAs;//Input:phase-astatorvariable_iqBs;//Input:phase-bstatorvariable_iqAlpha;//Output:stationaryd-axisstatorvariable_iqBeta;//Output:stationaryq-axisstatorvariablevoid(*calc)();//Pointertocalculationfunction}CLARKE;typedefCLARKE*CLARKE_handle;//DefaultinitalizerfortheCLARKEobject.#defineCLARKE_DEFAULTS{0,\0,\0,\0,\(void(*)(Uint32))clarke_calc}//PrototypesforthefunctionsinCLARKE.Cvoidclarke_calc(CLARKE_handle);2在C文件中,根據(jù)算法原理編寫函數(shù)。include"IQmathLib.h" //IncludeheaderforIQmathlibrary//Don'tforgettosetaproperGLOBAL_Qin"IQmathLib.h"file#include"dmctype.h"#include"clarke.h"voidclarke_calc(CLARKE*v){v->Alpha=v_>As;v->Beta=_IQmpy((v->As+_IQmpy(_IQ(2),v->Bs)),_IQ(0.57735026918963));//1/sqrt(3)=0.57735026918963}3-9系統(tǒng)初始化即時鐘模塊和鎖相環(huán)初始化降低對硬鎖相環(huán)的目的是外部時鐘允許較低的工作頻率,片內(nèi)通過鎖相環(huán)倍頻提供較高的系統(tǒng)時鐘,這可有效降低系統(tǒng)對外部時鐘的依賴和電磁干擾, 提高系統(tǒng)啟動和運行的可靠性,件設(shè)計的要求。降低對硬外設(shè)時鐘控制寄存器PCLKCR系統(tǒng)控制與外設(shè)狀態(tài)寄存器SCSR高速外設(shè)時鐘定標寄存器HISPCP低速外設(shè)時鐘定標寄存器LOSPCP鎖相環(huán)倍頻寄存器PLLCRvoidInitSysCtrl(void) //系統(tǒng)初始化子程序{EALLOW; //#defineEALLOWasm(“EALLOW”)宏定義SysCtrlRegs.PLLCR=0x000A;//初始化鎖相環(huán),OSCCLK=30MHz//DIV=0x0A,CLKIN=30MHz*10/2=150MHzasm(“NOP”);asm(“NOP”);for(i=0;i<3000;i++){;} //延時,等待鎖相環(huán)穩(wěn)定SysCtrlRegs.HISPCP.all=0x0000;//HSPCLK=SYSCLKOUT=150MHzSysCtrlRegs.LOSPCP.all=0x0002;//LSPCLK=SYSCLKOUT/4=37.5MHzSysCtrlRegs.PCLKCR.bit.EVAENCLK=1; //使能EVASysCtrlRegs.PCLKCR.bit.EVBENCLK=1; //使能EVBSysCtrlRegs.PCLKCR.bit.SCIENCLKA=1; //使能SCI_A//SysCtrlRegs.PCLKCR.bit.SCIENCLKB=1;//不用的外設(shè)不使能,//以降低功耗SysCtrlRegs.PCLKCR.bitADCENCLK=1; //使能ADCEDIS;//#defineEDISasm( “EDIS”)宏定義}3-10看門狗定時器281xDSP內(nèi)置了一個看門狗定時器(WDT),用來監(jiān)視DSP的運行狀況。當系統(tǒng)進入不可預(yù)知的狀態(tài)而造成“死機”時,WD將產(chǎn)生一個復(fù)位操作,從而使DSP進入一個已知的起始位置重新運轉(zhuǎn)。如果CPU崩潰一旦8位的看門狗計數(shù)器達到最大計數(shù)值,看門狗模塊就產(chǎn)生一個512個OSCCLK周期寬的脈沖,使DSP復(fù)位或中斷被觸發(fā)。為防止計數(shù)器溢出,CPU必須周期性的向看門狗KEY寄存器寫入0X55+0XAA序列,在復(fù)位之后(30M外部時鐘)3ms之內(nèi)看門狗必須被啟用或者禁止。因為281x上電時看門狗是使能的,所以要盡快屏蔽,以免程序跑飛。上電后 SCSR寄存器中的WDOVERRIDE位為1,即允許WDCR寄存器中的WDDIS位被修改,所以不用先對WDOVERRIDE位操作就能修改WDDIS位。8位WD計數(shù)寄存器:WDCNTRWD復(fù)位鑰匙寄存器:WDKEYWD定時器控制寄存器:WDCRWDKEY:如果先寫入0x55,在寫入0xAA就會使WDCNTR清零。寫入任何其他數(shù)值則馬上使DSP復(fù)位。讀操作返回的是WDCR寄存器的值。voidKickDog(void){EALLOW;//允許CPU對寄存器進行操作SysCtrlRegs.WDKEY=0x0055;//防止WD溢出SysCtrlRegs.WDKEY=0x00AA;//EDIS;//禁止CPU對寄存器進行操作}voidDisableDog(void){EALLOW;SysCtrlRegs.WDCR=0x0068;//屏蔽看門狗,以免程序跑飛EDIS;}3-11281xDSP有哪些32位CPU定時器?如何使用?F281x與240x相比,增加了三個32位CPU定時器0/1/2。CPU定時器1和2保留給實時操作系統(tǒng)(RTOS),只有CPU定時器0留給用戶使用。配置CPU定時器就是設(shè)置周期寄存器,由給定的 DSP時鐘頻率Freq(MHz)和定時器周期Period(q)兩個參數(shù)確定。初始化后定時器處于停止狀態(tài)。必須在主程序中啟動。voidConfigCpuTimer(structCPUTIMER_VARS*Timer,floatFreq,floatPeriod){unsignedlongtemp;Timer->CPUFreqInMHz=Freq; //InitializetimerperiodTimer->PeriodInUSec=Period;temp=(long)(Freq*Period); //150MHzX100us=15000Timer->RegsAddr->PRD.all=temp;Timer->RegsAddr->TPR.all=0; //Setpre-scalecountertodivideby1Timer->RegsAddr->TPRH.all=0;//Initializetimercontrolregister:Timer->RegsAddr->TCR.bit.TSS=1/0; //1=Stoptimer,0=StartTimerTimer->RegsAddr->TCR.bit.TRB=1; //1=reloadtimerTimer->RegsAddr->TCR.bit.SOFT=1;Timer->RegsAddr->TCR.bit.FREE=1; //TimerFreeRunTimer->RegsAddr->TCR.bit.TIE=1; //1=EnableTimerInterrupt}3-11PIE中斷控制F281X共支持17個CPU級中斷,包括一個NMI和16個可屏蔽中斷(INT1?INT14,RTOSINT和DLOGINT)。外設(shè)中斷擴展模塊(PIE)中多個中斷源復(fù)用1個中斷信號。PIE支持多達96個中斷源,其中8個中斷源為一組,復(fù)用一個中斷信號,總共有 12個中斷信號(INT1?INT12)PIE的中斷優(yōu)先級由高到低分別是 INT1—INT12,組內(nèi)8個優(yōu)先級由高到低的次序依次是 INTx.1-INTx.8。每個中斷源都有相應(yīng)的中斷向量存放在RAM中,構(gòu)成整個系統(tǒng)的中斷向量表來存在中斷服務(wù)程序的地址,中斷向量表由 256X16位的SRAM構(gòu)成,每個中斷矢量占用兩個 2個16位的地址空間。F281X支持三個外部中斷,INT1、INT2和INT13,其中INT13和NMI復(fù)用,每個外部中斷可以使能/屏蔽、設(shè)定為上升/下降沿觸發(fā)。中斷系統(tǒng)包括三個層次:外設(shè)級、PIE級和CPU級例配置CPU定時器0產(chǎn)生定時中斷,每次中斷LED的狀態(tài)切換一次(0/1)外設(shè)中斷的編程:1)定義使用的外設(shè)中斷矢量表
2)外設(shè)級中斷控制寄存器初始化--InitPieCtrl()3)CPU級中斷控制寄存器和外設(shè)和外設(shè)中斷矢量的初始化 --main()4)中斷服務(wù)程序2)外設(shè)級中斷控制寄存器初始化--InitPieCtrl()3)CPU級中斷控制寄存器和外設(shè)和外設(shè)中斷矢量的初始化 --main()4)中斷服務(wù)程序--ISRTimer0()1)定義使用的外設(shè)中斷矢量表采用位域結(jié)構(gòu)方式,在中斷矢量表中定義所有的中斷矢量,如外設(shè)中斷組conststructPIE_VECT_TABLEPieVectTableInit={1(INT1)。PDPINTA_ISR,PDPINTB_ISR,rsvd_ISR,XINT1_ISR,XINT2_ISR,ADCINT_ISR,TINT0_ISR,WAKEINT_ISR,//EV-A//EV-B//ADC//Timer0//WD};2)外設(shè)級中斷控制寄存器初始化--InitPieCtrl()voidInitPieCtrl(void){DINT;//關(guān)CPU級中斷PieCtrlRegs.PIECRTL.bit.ENPIE=0;//PieCtrlRegs.PIEIER1.all=0;PieCtrlRegs.PIEIER2.all=0;關(guān)PIE級中斷//清除所有的PIEIER寄存器PieCtrlRegs.PIEIER12.all=0;PieCtrlRegs.PIEIFR1.all=0;PieCtrlRegs.PIEIFR2.all=0;//清除所有的PIEIFR寄存器PieCtrlRegs.PIEIFR12.all=0;PieCtrlRegs.PIECRTL.bit.ENPIE=1;//PieCtrlRegs.PIEACK.all=0xFFFF;theCPU允許PIE中斷//寫1清0,EnablesPIEtodriveapulseinto3)CPU級中斷控制寄存器初始化和外設(shè)和外設(shè)中斷矢量的初始化 --main()voidmain(void){InitSysCtrl(); //初始化系統(tǒng)控制DINT;//關(guān)中斷IER=0x0000;//CPUIER清0IFR=0x0000;//CPUIFR清0InitPieCtrl(); //初始化PIEInitPieVectTable(); //初始化PIE中斷矢量表,僅用于方法1InitPeripherals(); //初始化外設(shè),可以根據(jù)需要配置,見系統(tǒng)初始化程序EALLOW;PieVectTable.TINT0=&ISRTimer0; //方法1//*TINT0=(unsignedlong)ISRTimer0;//方法2EDIS;ConfigCpuTimer(&CpuTimer0,150,1000000);//配置CPU定時器0為1秒CpuTimer0Regs.TCR.bit.TSS=0;//起動CPU定時器0PieCtrl.PIEIER1.all=0x40;//使能CPU定時器0中斷IER|=0x0001;EINT;//EnableGlobalinterruptINTMfor(;;) {……}}4)中斷服務(wù)程序--ISRTimer0()#defineLED1_ON GpioDataRegs.GPFDAT.bit.GPIOF11=0#defineLED1_OFF GpioDataRegs.GPFDAT.bit.GPIOF11=1//PIEGroup1-MUXedintoCPUINT1interruptvoidISRTimer0(void){PieCtrl.PIEACK.all|=0x0001;if(Led_Flag==1){LED1_ON;Led_Flag=0;}else{LED1_OFF;Led_Flag=1;}}voidInitPieVectTable(void)//InitializesthePIEvectortabletoaknownstate.{int16i;Uint32*Source=(void*)&PieVectTableInit;Uint32*Dest=(void*)0x000D00;EALLOW;for(i=0;i<128;i++)*Dest++=*Source++;EDIS;PieCtrlRegs.PIECRTL.bit.ENPIE=1; //EnablethePIEVectorTable}3-12通用I/OF281X器件上有56個多功能復(fù)用引腳,通過GPxMUX寄存器可配置為外設(shè)信號或數(shù)字I/O引腳;
如果配置為數(shù)字I/O引腳,可以通過方向寄存器(GPxDIR)控制引腳為輸入或輸出; 通過量化寄存器(GPxQUAL)設(shè)定量化采樣周期(QUALPRD),消除輸入信號中的毛刺干擾。用GPxSET和GPxCLEAR寄存器對數(shù)字量進行置位或清零,還可通過 GPxDAT寄存器獨立讀寫I/O信號。GPxMUX寄存器GPxMUX.bit:0—配置為I/O方式;1—配置為外設(shè)方式GPxDIR寄存器GPxDIR.bit:0—配置為數(shù)字輸入;1—配置為數(shù)字輸出GPxDAT寄存器GPxDAT.bit:輸入方式讀引腳狀態(tài),輸出方式設(shè)定狀態(tài)GPxSET寄存器GPxSET.bit: 1—輸出方式下引腳置高電平GPxCLEAR寄存器GPxCLEAR.bit: 1—輸出方式下引腳置低電平GPxTOGGLE寄存器GPxTOGGLE.bit:1—輸出方式下將引腳電平置反例如:GpioDataRegs.GPFDAT.bit.GPIOF10=0通用I/O的初始化voidInitGpio(void)//ThisfunctioninitializestheGpiotoaknownstate.voidInitGpio(void)EALLOW; //設(shè)置GPIOA引腳,AL(7:0)為輸入-AH(15:8)為輸出GpioMuxRegs.GPAMUX.all=OxOOOO;GpioMuxRegs.GPADIR.all=OxFFOO;GpioMuxRegs.GPAQUAL.all=OxOOOO;GpioDataRegs.GPADAT.all=0xAA00;//setsGPIOMuxsasI/OsGpioMuxRegs.GPAMUX.all=OxOOOO;GpioMuxRegs.GPADIR.all=OxFFOO;GpioMuxRegs.GPAQUAL.all=OxOOOO;GpioDataRegs.GPADAT.all=0xAA00;//setsGPIOMuxsasI/Os//upperbyteasoutput/lowbyteasinput//Inputqualifierdisabled//ToggleI/OsusingDATAregisters4恥4恥GpioDataRegs.GPASET.all=OxAAOO;//ToggleI/OsusingSET/CLEARregistersGpioDataRegs.GPACLEAR.all=0x5500;GpioDataRegs.GPATOGGLE.all=OxFFOO;//ToggleI/OsusingTOGGLEregisters//SetGPIOBportpins,configuredasEVBsignalsGpioMuxRegs.GPBMUX.all=OxFFFF;//ConfigureperipheralssignalsonthepinsGpioMuxRegs.GPBQUAL.all=OxOOOO;//Inputqualifier=0(disabled)EDIS;}例點亮發(fā)光二極管voidmain(void){InitSysCtrl(); //系統(tǒng)初始化子程序,DSP28_sysctrl.c中EALLOW;GpioMuxRegs.GPBDIR.bit.GPIOBO=1;〃設(shè)置D1對應(yīng)的DSP引腳為輸出EDIS;GpioDataRegs.GPBDAT.bit.GPIOB0=0;//D1對應(yīng)輸出低電平,發(fā)光二極管點亮GpioDataRegs.GPBDAT.bit.GPIOBO=1;//D1對應(yīng)輸出高電平,發(fā)光二極管不亮GpioDataRegs.GPBCLEAR.bit.GPIOBO=1;//寫一清零GPIOB0
GpioDataRegs.GPBSET.bit.GPIOB0=1;//寫一置位GPIOB0GpioDataRegs.GPBTOGGLE.bit.GPIOB0=1;//寫一取反GPIOB0輸出GpioDataRegs.GPBTOGGLE.bit.GPIOB0=1;〃寫一取反GPIOBO輸出while(1);}例3.51個LED旨示燈接到DSP通過擴展的外部簡單接口電路的最低位 ,其地址為OxcOOOO。采用通用定時器T1中斷方式定時200ms,用C語言編程使之閃爍, 即引腳上產(chǎn)生周期為400ms的方波,XCLKIN=30MHz,SYSCLKOUT=150MHz#include"DSP281x_Device.h" //DSP281x寄存器頭文件interruptvoideva_timer1_isr(void);voidEVA_Timer1() //{EvaRegs.GPTCONA.all=0; //EvaRegs.T1PR=0x9895;interruptvoideva_timer1_isr(void);voidEVA_Timer1() //{EvaRegs.GPTCONA.all=0; //EvaRegs.T1PR=0x9895;EvaRegs.EVAIMRA.bit.T1PINT=1;EvaRegs.EVAIFRA.bit.T1PINT=1;EvaRegs.T1CNT=0x0000;EvaRegs.T1CON.all=0x1740;初始化EVATimer1//定時周期為5.12us*(T1PR+1)=0.2s//使能定時器1的周期中斷//寫1清除定時器1的周期中斷標志計數(shù)寄存器從0開始//連續(xù)增計數(shù),128分頻,打開定時器main(){InitSysCtrl();〃初始化DSP運行時鐘,時鐘頻率150MHzEALLOW;SysCtrlRegs.HISPCP.all=0x0003;//高速時鐘頻率=25MHzEDIS;DINT; //關(guān)閉總中斷IER=0x0000; //清中斷使能IFR=0x0000; //清中斷標志InitPieCtrl(); //初始化PIE控制寄存器InitPieVectTable(); //初始化PIE中斷向量表EVA_Timer1(); //初始化EVATimer1EALLOW;PieVectTable.T1PINT=&eva_timer1_isr;//中斷服務(wù)程序入口地址放入中斷向量表EDIS;〃依次使能各級中斷:外設(shè)中相應(yīng)中斷位->PIE控制器->CPUPieCtrlRegs.PIEIER2.all=M_INT4;〃GP定時器1使能位于PIE第2組第4個,將其使能IER|=M_INT2; //使能的PIE第2組可屏蔽中斷2(INT2)EINT; //開總中斷LBDS=O;//指示燈全滅while(1){;}//等待中斷}interruptvoideva_timer1」sr(void){LBDSA=1; //產(chǎn)生方波,最低位指示燈亮滅切換EvaRegs.EVAIMRA.bit.TIPINT=1; //使能定時器1的周期中斷EvaRegs.EVAIFRA.bit.TIPINT=1; //寫1清除定時器1的周期中斷標志PieCtrlRegs.PIEACK.all=PIEACK_GROUP2;//清零PIEACK中的第2組中斷對應(yīng)位3-13ADC初始化及其應(yīng)用ADCCLK最高為25MHz。AD專換流程配置AD(啟動的觸發(fā)源;配置ADCTRL1設(shè)定ADC寸鐘預(yù)定標系數(shù)、轉(zhuǎn)換時鐘預(yù)定標FCLK采樣轉(zhuǎn)換模式、ADC中斷優(yōu)先級、級聯(lián)排序器或雙排序器選擇;配置ADCTRL2ADC勺啟動信號源、軟件復(fù)位排序器指針、軟件觸發(fā)或清除 ADC言號源、中斷方式;配置MAXCONV設(shè)定一次自動轉(zhuǎn)換的通道個數(shù);配置CHSELSEQx設(shè)定多路ADC輸入通道;等待觸發(fā)源;轉(zhuǎn)換完成后讀RESULTx獲取轉(zhuǎn)換結(jié)果;ADC寸鐘定標ADCTRLl[U-8](AC<J^PS[54)])ADCTHL3[4i1](ADCLKPS[10]JAD(內(nèi)核時鐘和采樣保持時鐘XCWNAD(內(nèi)核時鐘和采樣保持時鐘XCWNSHclock/pulse通往ADC勺時鐘鏈例,A/D轉(zhuǎn)換程序。采用雙排序器和順序采樣模式,排序器SEQ對兩個模擬輸入通道ADCINA0和ADCINA的電壓信號進行自動轉(zhuǎn)換。排序器采用事件管理器EVA(T1)的下溢中斷標志作為觸發(fā)啟動信號。使用AD(模塊的中斷方式,每次排序結(jié)束(EOS)都產(chǎn)生中斷。在中斷服務(wù)程序中,讀取模擬量的轉(zhuǎn)換結(jié)果并存儲到兩個長度為1024的數(shù)組Voltage1和Voltage2中。#include"DSP281x_Device.h" //DSP281xHeaderfileIncludeFileinterruptvoidadc_isr(void);//Globalvariablesusedinthisexample全局變量定義Uint16(onversion(ount;//轉(zhuǎn)換次數(shù)計數(shù)Uint16Voltage1[1024];Uint16Voltage2[1024];main(){InitSys(trl(); //初始化(PUDINT; //關(guān)中斷InitPieCtrl(); 〃初始化pie寄存器IER=0x0000;//禁止所有的中斷IFR=0x0000;InitPieVectTable();〃初始化pie中斷向量表EALLOW;//ThisisneededtowritetoEALLOWprotectedregisterPieVectTable.ADCINT=&adc_isr;EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregistersAdcRegs.ADCTRLI.bit.RESET=1; //復(fù)位ADC模塊asm(”RPT#10||NOP");II等待12個時鐘周期使ADC復(fù)位產(chǎn)生作用AdcRegs.ADCTRL3.all=0x00C8;//ADC參考電壓與帶隙基準電路上電AdcRegs.ADCTRL3.bit.ADCBGRFDN=0x3;AdcRegs.ADCTRL3.bit.ADCPWDN=1; IIADC其它電路上電IIEnableADCINTinPIEPieCtrlRegs.PIEIER1.bit.INTx6=1;IER|=M_INT1;IIEnableCPUInterrupt1EINT; IIEnableGlobalinterruptINTMERTM; IIEnableGlobalrealtimeinterruptDBGMLoopCount=0;ConversionCount=0;II配置ADCAdcRegs.ADCMAXCONV.all=0x0001; II設(shè)置SEQ1轉(zhuǎn)換通道數(shù)為2AdcRegs.ADCCHSELSEQ1.bit.CONVOO=0x0;II設(shè)置ADCINA0為第1個轉(zhuǎn)換通道AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1;II設(shè)置ADCIN10為第2個轉(zhuǎn)換通道AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1; II選擇EVA啟動SEQ1轉(zhuǎn)換AdcRegs.ADCTRL2.bit.lNT_ENA_SEQ1=1;II使能EVA啟動SEQ1轉(zhuǎn)換II配置EVAIIAssumesEVAClockisalreadyenabledinInitSysCtrl();EvaRegs.T1CMPR=0x0080; II設(shè)定T1比較值EvaRegs.T1PR=0x10; II設(shè)置T1周期寄存器EvaRegs.GPTCONA.bit.T1TOADC=1;II設(shè)置EVA(T1)下溢事件啟動ADCEvaRegs.T1CON.all=0x1042; 〃設(shè)置T1為連續(xù)增模式,并啟動定時器1while(1)LoopCount++;〃等待ADC中斷interruptvoidadc_isr(void){Voltage1[ConversionCount]=AdcRegs.ADCRESULT0>>4;Voltage2[ConversionCount]=AdcRegs.ADCRESULT1>>4;//If40conversionshavebeenlogged,startoverif(ConversionCount==1023){ConversionCount=0;}elseConversionCount++;//ReinitializefornextADCsequenceAdcRegs.ADCTRL2.bit.RST_SEQ1=1; //ResetSEQ1AdcRegs.ADCST.bit.INT_SEQ1_CLR=1; //ClearINTSEQ1bitPieCtrlRegs.PIEACK.all=PIEACK_GROUP1;//AcknowledgeinterrupttoPIEreturn;}編程采用雙排序器和順序采樣模式 ,排序器SEQ1寸兩個模擬輸入通道ADCINA刑ADCINA6勺電壓信號進行自動轉(zhuǎn)換。排序器采用事件管理器 EVA(T1)的周期匹配中斷標志作為觸發(fā)啟動信號,T1定時50卩s。使用AD(模塊的中斷方式,每次排序結(jié)束 (EOS)都產(chǎn)生中斷。在中斷服務(wù)程序中,讀取模擬量的轉(zhuǎn)換結(jié)果并存儲到兩個長度為 200的數(shù)組Voltagel和Voltage2中。設(shè)CPU寸鐘頻率為150MHz3-14SPI與XINTF有什么區(qū)別?串行外設(shè)接口(SPI)是一種同步串行輸入/輸出接口,傳輸速率最高可達 37.5Mbps,信號線少(2-4條),適于板級擴展的外設(shè)輸入/輸出接口,適于板級微處理器間通信。外部擴展接口(XINTF)是一種并行輸入/輸出接口,傳輸速率較很高,可達 75MX16=1200Mbps,信號線多(DB16、AB19、CB11),限用于板級擴展外設(shè)的輸入/輸出接口。3-15SPI與SCI有什么區(qū)別?串行外設(shè)接口(SPI)是一種同步串行輸入/輸出接口,傳輸速率較高(LSPCLK/4),適于板級通信。串行通信接口(SCI)是一種異步串行接口,通常需經(jīng)過收發(fā)器進行電平轉(zhuǎn)換,通信速率較低,適于長距離通信。通常用于DSP與擴展外設(shè)以及其它處理器間進行通信,如顯示驅(qū)動器、ADC、DAC、EPROM、RTC以及主從模式的多處理器應(yīng)用等。 F2812包含一個SPI接口,支持16級的接受和傳輸FIFO。四事件管理器及其應(yīng)用281xDSP提供兩個完全相同的事件管理器模塊 EVA/EVB事件管理器非常適用于運動控制和電機控制領(lǐng)域。每個事件管理器包括:通用定時器GPT,比較單元與PWM電路,捕獲單元,正交脈沖編碼電路QEP。通用定時器通用定時器x包括以下16位可讀寫的寄存器:(EVA:x=1,2;EVB:x=3,4) :定時器計數(shù)器TxCNT,定時器周期寄存器TxPR,定時器比較寄存器TxCMPR定時器控制寄存器TxCON通用定時器的輸入包括:內(nèi)部高速時鐘 HSPCL。外部時鐘TCLKINA/B,最高頻率不超過CPU時鐘的1/4。方向輸入TDIRA/B,控制定時器增/減計數(shù)的方向。復(fù)位信號 RESET用于QEP電路時,QEF產(chǎn)生定時器的時鐘和方向。通用定時器的輸出包括:通用定時器比較輸出 TxCMP,x=1,2,3,4。為ADC模塊提供ADC轉(zhuǎn)換啟動信號。為自身比較邏輯和比較單元提供下溢、上溢、比較匹配和周期匹配信號。 計數(shù)方向指示位。通用定時器的比較輸出可以高電平有效、低電平有效、強制高或強制低,與 GPTCONA/B控制寄存器的設(shè)置有關(guān)。當比較輸出高 (低)電平有效同時在第一次比較匹配時,比較輸出由低變?yōu)楦?由高變?yōu)榈?。如果通用定時器配置為遞增/遞減計數(shù)模式,則在第二次比較匹配或周期匹配時,比較輸出從高至低 (由低至高)。當定時器的比較輸出設(shè)置為強制高(低)時,它立即變?yōu)楦?低)電平。定時器計數(shù)方向寄存器GPTCONA/中的相應(yīng)位反映了通用定時器的計數(shù)方向:1代表遞增計數(shù);0代表遞減計數(shù)。通用定時器的時鐘可以采用內(nèi)部CPU時鐘或外部時鐘作為時鐘源,外部時鐘通過 TCLKINA/B引腳提供。外部時鐘的頻率必須小于或等于內(nèi)部 CPU頻率的1/4。在定向增/減計數(shù)模式下,通用定時器2(EVA)和通用定時器4(EVB)可以使用QEP電路,此時QEP電路為定時器提供時鐘和方向輸入。通用定時器中斷在通用定時器的EVAIFRAEVAIFRBEVBIFRA和EVBIFRB寄存器中有16個中斷標志,當發(fā)生下列事件時,每個通用定時器可產(chǎn)生 4個中斷。上溢(Overflow),TxOFINT(x=1~4)。下溢(Underflow),TxUFINT(x=1~4) 。比較匹配(Comparematch),TxCINT(x=1~4)。周期匹配(Periodmatch),TxPINT(x=1~4) 。通用定時器的計數(shù)操作模式通用定時器的有四種工作模式停止 /保持模式
連續(xù)增計數(shù)模式定向增/減模式連續(xù)增/減模式?通用定時器的比較操作非對稱波形的產(chǎn)生通用定時器連續(xù)增計數(shù)模式下的比較 /PWMI連續(xù)增計數(shù)模式定向增/減模式連續(xù)增/減模式?通用定時器的比較操作非對稱波形的產(chǎn)生通用定時器連續(xù)增計數(shù)模式下的比較 /PWMI輸出sPWM/TtcCMPapciivehigh對稱波形的產(chǎn)生通用定時器連續(xù)增減計數(shù)模式下的比較 /PWMI輸出//例,利用GP定時器1在GPI0B5引腳上產(chǎn)生周期為1s的方波,//令一個LED閃爍〃XCLKIN=30MHz,SYSCLKOUT=150MHz#inelude"DSP281x_Device.h"interruptvoideva_timer1」sr(void);intcounter; //全局變量軟件計數(shù)器,擴大定時時間voidEVA_Timer1(){EvaRegs.GPTCONA.all=0; //EvaRegs.TIPR=0x249; //EvaRegs.EVAIMRA.bit.TIPINT=1;//EvaRegs.EVAIFRA.bit.TIPINT=1;//EvaRegs.TICNT=0x0000;EvaRegs.T1CON.all=0x1740; //初始化EVATimer1定時周期為1.707us*(T1PR+1)=1ms使能定時器1的周期中斷寫1清除定時器1的周期中斷標志連續(xù)增計數(shù),128分頻,開啟定時器}voidmain(void)//初始化系統(tǒng)控制寄存器//初始化系統(tǒng)控制寄存器,時鐘頻率150MHzInitSysCtrl();
//高速時鐘的工作頻率HSPCL長25MHzEALLOW;GpioMuxRegs.GPBMUX.all=0;//把GPIOB般置為一般I/O口關(guān)閉總中斷,清除中斷標志//關(guān)閉外圍中斷//關(guān)閉總中斷,清除中斷標志//關(guān)閉外圍中斷//清中斷標志//初始化PIE控制寄存器DINT; //IER=0x0000;IFR=0x0000;InitPieCtrl();InitPieVectTable();EVA_Timer1();EALLOW;PieVectTable.T1PINT=&eva_timer1_isr;//中斷服務(wù)程序入口地址放入中斷向量表EDIS;//依次使能各級中斷:外設(shè)中相應(yīng)中斷位->PI
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024成都裝修合同
- 央視《中國詩詞大會》里的11首經(jīng)典古詩詞賞析
- 2025年春季學(xué)期學(xué)校德育工作計劃
- 2025年度海洋工程鉆井平臺安全協(xié)議3篇
- 2024影院裝修工程合同書
- 《煤礦電氣系統(tǒng)的安全檢查》培訓(xùn)課件2025
- 2024年魚塘場地租賃及漁業(yè)資源保護合作協(xié)議3篇
- 2024年高端住宅區(qū)聯(lián)合開發(fā)合同3篇
- 《名人傳記史玉柱》課件
- 2024房地產(chǎn)開發(fā)商與承建商建設(shè)合同
- 二零二四年度物業(yè)管理合同標的的管理內(nèi)容和質(zhì)量要求
- 企業(yè)年終總結(jié)表彰大會模板 76
- 人工智能ArtificialIntelligence第五章課件
- 2024年國網(wǎng)公司企業(yè)文化與職業(yè)道德試考試題庫(含答案)
- 環(huán)境監(jiān)測實驗室事故應(yīng)急預(yù)案
- 企業(yè)總經(jīng)理管理培訓(xùn)
- 2024院感年終總結(jié)報告
- 消防培訓(xùn)課件
- 04S206自動噴水與水噴霧滅火設(shè)施安裝圖集
- 《小學(xué)數(shù)學(xué)課堂教學(xué)中創(chuàng)設(shè)情境的實踐研究》開題報告
- DB34∕T 4010-2021 水利工程外觀質(zhì)量評定規(guī)程
評論
0/150
提交評論