2812控制精確的1秒LED閃爍程序_第1頁
2812控制精確的1秒LED閃爍程序_第2頁
2812控制精確的1秒LED閃爍程序_第3頁
2812控制精確的1秒LED閃爍程序_第4頁
2812控制精確的1秒LED閃爍程序_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第一個精確的1秒LED閃爍程序i程序特點本程序使用F2812硬件,控制GPI0F14管腳上的一個LED做精確的1秒間隔 閃爍,并且程序從Flash啟動。2建立工程2.1 文件該工程包含以下文件:-lyFirstPjt. p jt (Debug) I Dependent Projects_| Documentsn DSP/BIOS Config_| Generat ed Flies-Include圜 DSP281x(ic.h= DSP281x_CpuTliners, hg! DSF281K_DefaultISR. h=| DSP28 IxDbvEjlu* hJ DSP281xDevice.h捶1

2、 DSF281K_ECan.h道 DSPSSlx.EvhS DSP281z_ExajiipLes.hDSPESlX-GlobalProt otypes. h圜 DSP281x_GpiOihB DSP281z_Mcbsp.hgj DSP231xPieCtrl.h圜 DSP281x_PieVect,hI DSP281z_Sci.h園 DSP281x_Spi.h豈 DSP281x_SWPriorit izedIsrLevels. hDSF281E_SysCtrl.h昌 DSP281Oitf.hS DSP281x_XIntrupt.h1 Librariesr Source幻 DSP281_CodeSt

3、artBranch, asm罔 DSP281K_Defaultlsr c卻 DSP231xr,GlobalVariableDefs. cffl DSP281K_Gpio,c固 DSP28 lK_MejnCopy. c國 DSP281x_PieCtrl. c:觀 DSP281K_FieVect. c園 DSP281KSysCtrl. c園 DSP281x_ueDelay. asmmain, c國 DSP231x_Headers_nonBIOS* cmd 國 F2812.cmd注:除了 Ma in .c為自己寫的之外,其他均為 F2812DEMO自帶的文件。其中部 分文件做了小小的修改,下文會詳述

4、2.2 建立工程打開CCS3.1,選擇Project New,輸入工程名,這里是 MyFirstPjt,選擇工 程目錄后點擊確定,然后在左側的工程管理窗口中選中 MyFirstPjt.pjt,右鍵一 添加 文件,將下列文件加入工程:然后再次選中動搜索關聯的文件,:拓 DSP281xr_CodeSt art Branch, asm.卻 DSP281z_Defaultlsr, c園 DSP2SlKGlobalVariableDefs. c省 DSP281K_tpio,c宙 DSP23lKKenCopy.闆 DSP231x_PieCtrl.圉 DSP281xPieVect-園 DSF281KSysC

5、trl.曲 DSP 2 81a _u sD e1ay | L.團- :tl DSP231x_Headers_nonBIOS. cmd B F2812,cmdMyFirstPjt.pjt,右鍵一Scan All File Dependencies CCS 系統(tǒng)會自 特別是.h頭文件,并將所有.h頭文件顯示出來,如下圖所示: I- ,i MyFirstPj. pjt CDebug); I Dependenl: Pr o j ec sL_lL3LJFDocumentsDSP/BIOS Config Generat ed Files Include亙1圍 圍圍IIasmDSP281_Adc.h D S

6、 P 2 81kwCpuT ime r s,h DSP281x_Def ault I SR., h DSP281x_DevEjnu. h DSP28 lK_Device. h DSP281xaECan. h DSP281X DSP281X DSP281X DSP281X DSP281X DSP281X DSP281X DSP2S12_Sci.h DSP281K_Spi. hDSP28 lx_SWPr ior it izedlsrLftvels h DSP281xSysC+r 1 h DSP281H_Kint.hDSP281x_X工nt rupt. hEw hExamples, hGlobalP

7、irct otypes* hGpio hMcbsp hPieCtrl hPieVect h h hLibr ari esSource柿 DSP2S1asm總 DSP281x_Default Isr. e重 DSP281x_GlobalVariableDeTs. cDSP281x_Gpio. c單 DSP281x_MemCQp5r c 至)DSP281x_PieCtr1 c 因| DSP281x_PieVect c 玉j DSP28lx_SysCt r1 口 總 DSP281x usDelay asm 宙礎J3 DSP 281k_Heade r s_nonBIOS. cmd F2S12, u二1

8、但注意此時并沒有完成,還需要設置編譯環(huán)境:在左側的工程管理窗口中選中MyFirstPjt.pjt,右鍵一Bulid Options 做如下設置:很關鍵的一個設置是必須設置頭文件的搜索路徑, CCS在編譯時先搜索安裝目 錄下的頭文件,然后再搜索用戶指定的路徑,如果再找不到,就報錯。 頭文件的搜 索路徑設置如下:其中$(Proj_dir)表示工程所在的目錄,這里設置為“ $(Proj_dir)DSP281x_headersinclude, $(Proj_dir)DSP281x_commoninelude 多個 路徑中間用逗號隔開。當然也可以設置絕對路徑,但這樣設置方便一些,便于在工 程拷貝中不用再

9、更改設置。然后設置庫和庫的搜索路徑:Build Opt ions for MyFirstPjt. . . H ?|乂Gener&1 | Compiler Linker Link Order確定取消幫助這里使用了 CCS3.1自帶的庫rts2800_ml.lib,該庫位于CCS安裝目錄的 C2000cgtoolslib下,此庫中帶有bootloader的obj文件,以便于與用戶的應用程序 連接,大信號模式下用rts2800_mlib,小信號模式下用rts2800ib。2.3編譯略,與眾多IDE相似。2.4下載首先確保安裝了 F2812的Flash燒寫插件和仿真器的驅動,硬件連接好后,按 CTRL

10、+ALT+R以RESET仿真器,按ALT+C連接DSP和PC,點擊CCS上的Tools 下的 F28xx On-Chip Flash Programmer即可下載。具體步驟從略。2.5運行斷開仿真器,上電即可運行。具體從略。3 程序詳解3.1 Main.c#i nclude DSP281x_Device.h #in elude DSP281x_Examples.h#i nclude DSP281x_Gpio.h#include DSP281x_XIntrupt.h/ DSP281x Headerfile In elude File / DSP281x Examples In elude Fil

11、e /extern void DSP28x_usDelay(Ui nt32 time);void ma in (void)In itSysCtrl();DisableDog();MemCopy(&Ramfu ncsLoadStart, &Ramfu ncsLoadE nd, & Ramfu ncsR un Start); InitGpio();/初始化 pio, gpiof14 為輸出DINT;IER = 0x0000;IFR = 0x0000;In itPieCtrl();/初始化中斷向量表In itPieVectTable();for(;) GpioDataRegs.GPFTOGGLE.b

12、it.GPIOF14 = 1; /gpiof14 輸出值翻轉 DELAY_US(0xF4240);/ Delay One sec ond _其中:InitSysCtrl()主要用來配置DSP的時鐘頻率,該函數在 DSP281x_SysCtrl.c文件 中;DisableDog ()關閉看門狗,函數也在 DSP281x_SysCtrl.c 中;MemCopy(&Ramfu ncsLoadStart, &Ramf un csLoadE nd, & Ramfu ncsRun Start)這一 句用來將將Flash中的DSP28x_usDelay()函數調入RAM中運行,下面將詳解。3.2 閃爍LED

13、的實現本工程的LED接到GPIOF14的管腳上,使用GPIO來控制LED的亮滅。InitGpio()用來初始化GPIO,函數原型在 Gpio.c中:void Ini tGpio(void)/ Set GPIO A port pin s,AL(Bits 7:0)(i nput)-AH(Bits 15:8) (output) 8bits /In put Qualifier =0, noneEALLOW;GpioMuxRegs.GPFMUX.bit.XF_GPIOF14 = 0;/將/XPLLDIS 配置為I/OGpioMuxRegs.GPFDIR.bit.GPIOF14 = 1;/配置為 outp

14、utEDIS;其它的語句:DINT;IER = 0x0000;IFR = 0x0000; In itPieCtrl();In itPieVectTable();/初始化中斷向量表可要可不要,作用從略GpioDataRegs.GPFTOGGLE.bit.GPIOF14 = 1; gpiof14 輸出值翻轉 語句的作用是將gpiof14的管腳電平取反,達到控制 LED閃爍的目的。3.3將Flash中的程序DSP28x_usDelay(調入RAM中運行本程序為了實現精確的定時,使用了一個用匯編編寫的延時函數DSP28x_usDelay(),該函數在文件DSP281x_usDelay.asm中,細節(jié)請

15、閱讀該文件。為了調用該函數,在Ma in .c中做了如下聲明:extern void DSP28x_usDelay(Ui nt32 time);該函數的定時仍然不夠精確,因此在文件DSP281x_Examples.h中做了如下的宏定義修正:#define DELAY_US(A)DSP28x_usDelay(lo ng double) A * 1000.0L) / (longdouble)CPU_RATE) - 9.0L) / 5.0L)函數DSP28x_usDelay(Uint32 time)要想非常精確,必須在SARAM 中運行,因此需要在運行時將其調入SARAM中。為此,需要做如下工作:首

16、先,在 DSP281x_usDelay.asm 中使用.sect ramfu ncs將該段代碼定義到段ramfuncs中,段ramfuncs的位置在編譯時指定,實際上由F2812.cmd文件中的如下語句來指定:ramfu ncs LOAD = FLASHD, PAGE = 0,RUN = RAML0, PAGE = 1,LOAD_START(_Ramfu ncsLoadStart),LOAD_END(_Ramfu ncsLoadE nd), RUN_START(_Ramfu ncsRu nStart)第1行表示該段的裝載在 PAGA0的FLASHD中(PAGA0和FLASHD的分段請見F281

17、2.cmd 文件,后文將有詳解);第2行表示該段的運行地址在PAGE1的RAML0中(PAGA1和RAML0 的分段請見F2812.cmd文件,后文將有詳解);LOAD_ START(_RamfuncsLoadStart)令編譯器創(chuàng)建了一個變量RamfuncsLoadStart,該變量指向段ramfuncs的裝載地址的首地址(LOAD_ START為編譯偽指令,請見CCS的幫助文檔);LOAD_ START(_RamfuncsLoadEnd)令編譯器創(chuàng)建了一個變量RamfuncsLoadEnd,該變量指向段ramfuncs的裝載地址的末地址(LOAD_ END為編譯偽指令,請見 CCS的幫助文

18、檔);LOAD_ START(_RamfuncsRunStart)令編譯器創(chuàng)建了一個變量RamfuncsRunStart,該變量指向段ramfuncs的運行地址的首地址(LOAD_ START為編譯偽指令,請見 CCS的幫助文檔);從第1和2行可以看出,段ramfuncs中的函數DSP28x_usDelay()的裝載地址和運行地址是 不同的,本程序中裝載在 Flash的塊FLASHD中,而在SARAM L0中運行,這只是目標,實際 運行時DSP并會自動將Flash中的代碼拷貝到 SARAM中,因此需要手動添加代碼來完成。在 C 函數中,為了使用變量RamfuncsLoadStart、Ramfu

19、ncsLoadEnd 和 RamfuncsRunStart,必須先聲明,本工程在文件 DSP281x_GlobalPrototypes.h中做了如下聲明:extern Ui nt16 Ramfu ncsLoadStart;extern Uin t16 Ramfu ncsLoadE nd;extern Ui nt16 Ramfu ncsRu nStart;然后就可以使用了。在 Ma in .c中,使用 MemCopy()函數將段ramfu ncs中的函數 DSP28x_usDelay()的代碼從裝載地址 RamfuncsLoadStart RamfuncsLoadEnd 拷貝到 Ramfuncs

20、RunStart開始的SARAM 空間中。之后在程序運行時,只要調用DSP28x_usDelay()函數,都會自動地指向 SARAM中相應的函數入口地址,這一點是自動完成的。MemCopy()函數原型在 MemCopy.c 中,在 DSP281x_GlobalPrototypes.h 聲明。注意:即使這樣,定時仍然可能不精確,因為可能有中斷打斷DSP28x_usDelay()的運行,所以在調用之前要關中斷。4 如何從Flash啟動4.1 F2812 的 BootLoader工作原理要讓程序從Flash中啟動,必須用到DSP的BootLoader。那么什么是 BootLoader 呢?F2812

21、內部有一塊ROM稱為On-Chip ROM其結構如圖所示:Math tables and ulure upyrad3kx 16On-ctlip bool ROMHaaure ss0x3F F0000x31= F5020x3F F7120X3F F8340x3F F9E80x3F FB5O0x3 F FCOO0x3 F FFCO0x3F FFFFData pace Prog spaceSin;Cos(644x 16)Nonnalized inverse(528x 16)Nor麗貶耐square root(274 x 16NornvihzoGraph lmage繪制出一個漂亮的1.25個正弦波形。

22、從0x3FFC00到0x3FFFC0固化的有BootLoader的程序,以及版本號、校驗等 信息。詳情請參考 TI 的“TMS320x281x DSP Boot ROM Referenee Guide(SPRU095B)”。從0x3FFFC0到0x3F FFFF裝載的是復位向量和 CPU中斷向量。這些向量的映 射在Debug模式下會映射到不同的位置,詳情請參考TI的“ TMS320x281x DSP Boot ROM Referenee Guide( SPRU095B)”。那么DSP F2812從上電到啟動過程中到底做了哪些工作?1.上電復位時,上電運行 BootLoader根據MP/MC引腳

23、的狀態(tài)決定是從片外 的3fffe0處(XINTF Zone7)讀取復位向量或者是從片內的 On Chip rom的 3fffe0處讀取復位向量。MC方式下從片內讀取,MP方式下從片外讀取。復位向量位置見文件 F2812.cmd中的PAGE0:RESET:origin = 0x3FFFC0, length = 0x000002以及:.reset RESET,PAGE = 0, TYPE = DSECT2. 一般我們用的是MC方式,即從片內讀取復位向量,在片內的rom 3fffe0處有一個向量指向了一個程序InitBoot o實際上該函數就從地址3fffe0開始。復位后處理器從3fffe0處讀取3

24、ffe00這個地址,所以InitBoot程序從3ffe00 處開始執(zhí)行。3. 3ffe00處開始的就是initboot過程。首先根據IO管腳的狀態(tài)判斷該進入那 一種引導方式,引導方式有:GPIOF4GPH3F12GPICF3GPIOF2(SCITXDAf(MDXA)(SPISTEA(SPtCLK)PUNo PUNa PUHoPUMods Selected1XXXJump Co品 0x3F 7FF6Ybu must have programmed a branch inslniction here prior to reset to re-dlrM code execuiian as desir

25、ed.01XXCa* SPI Boot to load from an eidemai 論iai SPI EEPROM011Call SCl_E3ocrt to road from SCI-A0D10Jump 卜 10 SARAM ctdresS UX3F fiOCO0001Jump 対 OTP across (h3D 7&000000Call Paralto(_Boot to load from GP:0 Port B4. 然后根據不同的引導方式來引導程序:在SCITXA引腳為高電平時就是flash boot方式。其它的方式還需要用戶編寫引導代碼,詳情見TI的“TMS320x281x DSP

26、 Boot ROM Referenee Guide (SPRU095B)”。5. 然后調用ExitBoot函數,來配置硬件,設置寄存器等的初始值,設置運行 環(huán)境等。隨后,此時置PC=3F7FF6 (內部Flash引導模式時)。因此地址 0x3F7FF6是用戶程序的入口,見 F2812.cmd中:BEGIN:origin = 0x3F7FF6, le ngth :=0x000002和eodestart: BEGINPAGE =06.在片內flash的3F7FF6和3F7FF7處一般會放有一個跳轉指令。本工程中, 由一段代碼來完成,見文件 DSP281x_CodeStartBranch.asm作用

27、是先關閉 看門狗,然后跳轉到c_int00,即LB _e_int00。更具根據上文,DSP281x_CodeStartBranch.asm的代碼必須從0x3F7FF6開始,所以程序中 有這么一句:.sect codestart7. 執(zhí)行這個跳轉指令后程序就開始運行 c_int00這個函數了,這個函數在rts 的庫中。見CCS的安裝目錄下的C2000cgtoolslibrts.src。實際上c_int00 執(zhí)行的是boot.asm,8. 這個函數就是建立一個c程序的運行環(huán)境,等建立完c運行環(huán)境后c_int00 調用 main 函數,詳情見 TI 的“ TMS320x281x DSP Boot R

28、OM Referenee Guide(SPRU095B)”中的BootLoader的源代碼。Cnt00可以看作是c程 序的Main函數入口。9. main函數開始就是我們自己編寫的應用程序了。實際上,如果想讓程序從Flash中啟動,只要硬件配置正確,軟件上只要將代碼 段.text定位到Flash中即可,剩下的全部由編譯器自動完成。關鍵是撰寫正確的.cmd 文件。5 CMD文件詳解5.1 DSP281x_Headers_nonBIOS.cmd該文件是為硬件的各種寄存器映射存儲器地址分頁和分配空間地址,一般是固 定的,用戶無權改動也不必改動, 該文件適合在沒有使用操作系統(tǒng) BIOS時使用。 使用時

29、不必改動。MEMORYtPAGE 0:/* Program Memory */PAGE 1:/* Data Memory */DEV_EMU:origin = 0x000880, length = 0x000180/* device emulation registers */PIE_VECT:origin = 0x000D00, length = 0x000100/* PIE Vector Table */FLASH_REGS : origin = 0x000A80, length = 0x000060/* FLASH registers */CSM:origin = 0x000AE0, l

30、ength = 0x000010/* code security module registers */XINTF:origin = 0x000B20, length = 0x000020/* external interface registers */CPU_TIMER0 :origin = 0x000C00, length = 0x000008/* CPU Timer0 registers (CPU Timer1 and Timer2 arereserved for BIOS)*/PIE_CTRL:origin = 0x000CE0, length = 0x000020/* PIE co

31、ntrol registers */ECANA:origin = 0x006000, length = 0x000040/* eCAN control and status registers */ECANA_LAM:origin = 0x006040, length = 0x000040/* eCAN local acceptance masks */ECANA_MOTS:origin = 0x006080, length = 0x000040/* eCAN message object time stamps */ECANA_MOTO:origin = 0x0060C0, length =

32、 0x000040/* eCAN object time-out registers */ECANA_MBOX:origin = 0x006100, length = 0x000100/* eCAN mailboxes */SYSTEM:origin = 0x007010, length = 0x000020/* System control registers */SPIAorigin = 0x007040, length = 0x000010/* SPI registers */SCIA:origin = 0x007050, length = 0x000010/* SCI-A regist

33、ers */XINTRUPT:origin = 0x007070, length = 0x000010/* external interrupt registers */GPIOMUX:origin = 0x0070C0, length = 0x000020/* GPIO mux registers */GPIODAT:origin = 0x0070E0, length = 0x000020/* GPIO data registers */ADC:origin = 0x007100, length = 0x000020/* ADC registers */EVA:origin = 0x0074

34、00, length = 0x000040/* Event Manager A registers */EVB:origin = 0x007500, length = 0x000040/* Event Manager B registers */SCIB:origin = 0x007750, length = 0x000010/* SCI-B registers */MCBSPA:origin = 0x007800, length = 0x000040/* McBSP registers */CSM_PWL:origin = 0x3F7FF8, length = 0x000008/* Part

35、 of FLASHA. CSM password locations. */SECTIONSiPieVectTableFile : PIE_VECT,PAGE = 1/* Peripheral Frame 0 Register Structures */FlashRegsFile CsmRegsFile: FLASH_REGS, PAGE = 1: CSM,PAGE = 1XintfRegsFile : XINTF,PAGE = 1CpuTimerORegsFile : CPU_TIMERO, PAGE = 1PieCtrlRegsFile : PIE_CtRL, PAGE = 1 /* Pe

36、ripheral Frame 1 Register Structures */SysCtrlRegsFile: SYSTEM,SpiaRegsFile: SPI A,SciaRegsFile: SCIA,XIntruptRegsFile : XINTRUPT,GpioMuxRegsFile GpioDataRegsFile : AdcRegsFile EvaRegsFile EvbRegsFile ScibRegsFile McbspaRegsFile: GPIOMUX, GPIODAT: ADC,: EVA,: EVB,: SCIB,: MCBSPA,PAGE = 1PAGE = 1PAGE

37、 = 1PAGE = 1PAGE = 1PAGE = 1PAGE = 1PAGE = 1PAGE = 1PAGE = 1PAGE = 1/* Peripheral Frame 2 Register Structures */ECanaRegsFile : ECANA,PAGE = 1ECanaLAMRegsFile : ECANA_LAMPAGE = 1ECanaMboxesFile : ECANA_MBOXPAGE = 1ECanaMOTSRegsFile : ECANA_MOTSPAGE = 1ECanaMOTORegsFile : ECANA_MOTO PAGE = 1 /* Code

38、Security Module Register Structures */CsmPwlFile: CSM_PWL,PAGE = 15.2 F2812.cmd:origin = 0x002000, length = 0x002000:origin = 0x004000, length = 0x002000:origin = 0x008000, length = 0x001000:origin = 0x080000, length = 0x080000:origin = 0x100000, length = 0x080000:origin = 0x3D7800, length = 0x00080

39、0:origin = 0x3D8000, length = 0x002000:origin = 0x3DA000, length = 0x002000:origin = 0x3DC000, length = 0x004000:origin = 0x3E0000, length = 0x004000:origin = 0x3E4000, length = 0x004000:origin = 0x3E8000, length = 0x004000:origin = 0x3EC000, length = 0x004000:origin = 0x3F0000, length = 0x004000:or

40、igin = 0x3F6000, length = 0x001F80:origin = 0x3F7F80, length = 0x000076ZONE0ZONE1RAML0ZONE2ZONE6OTPFLASHJFLASHIFLASHHFLASHGFLASHFFLASHEFLASHDFLASHCFLASHACSM_RSVDwhen CSM is in use. */BEGIN: origin = 0x3F7FF6, length = 0x000002/* ZONE7ROMRESET zone 7 (MP/MCn=1) */VECTORSzone 7 (MP/MCn=1) */PAGE 1 :or

41、igin = 0x3FC000, length = 0x003FC0:origin = 0x3FF000, length = 0x000FC0:origin = 0x3FFFC0, length = 0x000002:origin = 0x3FFFC2, length = 0x00003E/* XINTF zone 7 available if MP/MCn=1 */* Boot ROM available if MP/MCn=0 */* part of boot ROM (MP/MCn=0) or XINTF/* part of boot ROM (MP/MCn=0) or XINTF/*

42、Data Memory */* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */ /* Registers remain on PAGE1:origin = 0x000000, length = 0x000400:origin = 0x000400, length = 0x000400:origin = 0x008000, length = 0x001000:origin = 0x009000, length = 0x001000:origin = 0x3F4000, length = 0

43、x002000:origin = 0x3F8000, length = 0x002000RAMM0RAMM1RAML0RAML1FLASHBRAMH0/* Allocate sections to memory blocks.Note:codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code execution when booting to flashramfuncs user defined section to store functions that will be copied

44、from Flash into RAM*/* on-chip RAM block M0 */* on-chip RAM block M1 */* on-chip SARAM block L0 */ /* on-chip SARAM block L1 */ /* on-chip FLASH */* on-chip RAM block H0 */MEMORYPAGE 0:/* Program Memory */* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */* XINTF zone 0 */*

45、XINTF zone 1 */* on-chip RAM block L0 */* XINTF zone 2 */* XINTF zone 6 */* on-chip OTP */ /* on-chip FLASH */ /* on-chip FLASH */* on-chip FLASH */* on-chip FLASH */* on-chip FLASH */* on-chip FLASH */* on-chip FLASH */* on-chip FLASH */* on-chip FLASH */* Part of FLASHA. Program with all 0x0000/*

46、Part of FLASHA. Used for boot to Flash bootloader mode.On this mode,when boot is filished,it turns to address 0x3F7FF6 to run */:origin = 0x3F7FF8, length = 0x000008/* Part of FLASHA. CSM password locations inCSM_PWLFLASHA */*/SECTIONS/* Allocate program areas: */.cinit: FLASHAPAGE = 0.pinit: FLASHA,PAGE = 0.text: FLASHAPAGE = 0codestart: BEGINPAGE = 0ramfuncs:LOAD = FLASHD, PAGE = 0,RUN = RAML0, PAGE = 1,LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd), RUN_START(_Ramfun

溫馨提示

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

評論

0/150

提交評論