DSP技術(shù)9(軟件結(jié)構(gòu))課件_第1頁
DSP技術(shù)9(軟件結(jié)構(gòu))課件_第2頁
DSP技術(shù)9(軟件結(jié)構(gòu))課件_第3頁
DSP技術(shù)9(軟件結(jié)構(gòu))課件_第4頁
DSP技術(shù)9(軟件結(jié)構(gòu))課件_第5頁
已閱讀5頁,還剩181頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

DSP技術(shù)9(軟件結(jié)構(gòu))DSP技術(shù)9(軟件結(jié)構(gòu))DSP技術(shù)9(軟件結(jié)構(gòu))DSP的軟件結(jié)構(gòu)TMS320C54X的軟件結(jié)構(gòu)尋址方式:立即數(shù)尋址短立即數(shù)尋址(單字指令)在指令字中包括立即操作數(shù)RPT#99;將下一條指令循環(huán)100次LD#0h,DP;將0裝入數(shù)據(jù)頁指針ADD#0ffh,A;將0ffh加到AccADSP技術(shù)9(軟件結(jié)構(gòu))DSP技術(shù)9(軟件結(jié)構(gòu))DSP技術(shù)91DSP技術(shù)9(軟件結(jié)構(gòu))課件2DSP技術(shù)9(軟件結(jié)構(gòu))課件3DSP技術(shù)9(軟件結(jié)構(gòu))課件4DSP技術(shù)9(軟件結(jié)構(gòu))課件5絕對(duì)地址尋址數(shù)據(jù)存儲(chǔ)器(dmad)尋址用一個(gè)符號(hào)或一個(gè)數(shù)來確定數(shù)據(jù)空間中的一個(gè)地址例:MVKDsample,*AR5sample所代表的就是一個(gè)dmad絕對(duì)地址尋址數(shù)據(jù)存儲(chǔ)器(dmad)尋址6絕對(duì)地址尋址程序存儲(chǔ)器地址(pmad)尋址用一個(gè)符號(hào)或一個(gè)數(shù)來確定程序地址空間中的一個(gè)地址例:MVKDtable,*AR5table所代表的就是一個(gè)pmad絕對(duì)地址尋址程序存儲(chǔ)器地址(pmad)尋址7絕對(duì)地址尋址端口地址(PA)尋址用一個(gè)符號(hào)或常數(shù)來確定I/O口地址PORTRPA,SmemPORTWSmem,PA絕對(duì)地址尋址端口地址(PA)尋址8絕對(duì)地址尋址*(lk)尋址用一個(gè)符號(hào)或一個(gè)常數(shù)來確定數(shù)據(jù)存儲(chǔ)器中的一個(gè)地址例:LD*(BUFFER),A把地址為BUFFER的數(shù)據(jù)單元中的數(shù)據(jù)裝到AccA中絕對(duì)地址尋址*(lk)尋址9累加器尋址用累加器中的數(shù)作為一個(gè)地址,可用來對(duì)存放數(shù)據(jù)的程序存儲(chǔ)器尋址:READASmemWRITASmemREADA,把累加器A所確定的程序存儲(chǔ)器單元中的一個(gè)字,傳送到數(shù)據(jù)存儲(chǔ)器單元Smem中。WRITA,把數(shù)據(jù)單元Smem中的一個(gè)字,傳送到累加器A確定的程序存儲(chǔ)器單元。累加器尋址用累加器中的數(shù)作為一個(gè)地址,可用來對(duì)存放數(shù)據(jù)的程序10存儲(chǔ)器映射寄存器(MMR)尋址存儲(chǔ)器映射寄存器尋址用來修改存儲(chǔ)器映射寄存器而不影響當(dāng)前數(shù)據(jù)頁指針(DP)或堆棧指針(SP)的值。存儲(chǔ)器映射寄存器尋址既可以在直接尋址中使用,又可以在間接尋址中使用。存儲(chǔ)器映射寄存器(MMR)尋址存儲(chǔ)器映射寄存器尋址用來修改存11堆棧尋址系統(tǒng)堆棧用來在中斷和子程序期間自動(dòng)存放程序計(jì)數(shù)器,它也能用來存放額外的數(shù)據(jù)項(xiàng)或傳送數(shù)據(jù)值。處理器使用一個(gè)16-bit的存儲(chǔ)器映射寄存器——堆棧指針來對(duì)堆棧尋址,他總是指向存放在堆棧中的最后一個(gè)元素。堆棧尋址系統(tǒng)堆棧用來在中斷和子程序期間自動(dòng)存放程序計(jì)數(shù)器,它12尋址方式:直接尋址TMS320C54x的數(shù)據(jù)存儲(chǔ)器分為512頁,每頁128字,設(shè)置一個(gè)數(shù)據(jù)頁指針DP(dataPointer),用9-bit指向一個(gè)數(shù)據(jù)頁,再加上一個(gè)7-bit的頁內(nèi)偏移地址,形成16-bit的數(shù)據(jù)地址LD#4,DP;指向頁4(0200h-027fh)ADD9h,A;將數(shù)據(jù)頁4中的地址9h的數(shù)據(jù)加給AccA尋址方式:直接尋址TMS320C54x的數(shù)據(jù)存儲(chǔ)器分為51213尋址方式:直接尋址尋址方式:直接尋址14尋址方式:間接尋址8個(gè)輔助寄存器(AR0-AR7),由一個(gè)輔助寄存器指針(ARP3-bit)來指定輔助寄存器算術(shù)單元(ARAU)做16-bit無符號(hào)數(shù)運(yùn)算,決定一個(gè)新的地址,裝入輔助寄存器中的一個(gè)AR0-AR7的內(nèi)容相當(dāng)靈活,可以裝入立即數(shù),加上立即數(shù),減去立即數(shù);也可以從數(shù)據(jù)存儲(chǔ)器裝入地址;還可以作以下變址尋址:尋址方式:間接尋址8個(gè)輔助寄存器(AR0-AR7),由一個(gè)輔15尋址方式:間接尋址尋址方式:間接尋址16尋址方式:間接尋址尋址方式:間接尋址17尋址方式:間接尋址將該AR的內(nèi)容加1或減1,再尋址(循環(huán)常用)將該AR的內(nèi)容加上或減去AR0的內(nèi)容,再尋址。將該AR的內(nèi)容逆向進(jìn)位加上或減去AR0的的內(nèi)容,再尋址。尋址方式:間接尋址將該AR的內(nèi)容加1或減1,再尋址(循環(huán)常用18尋址方式:間接尋址ADD*,8,A;將當(dāng)前輔助寄存器所指的地址里的數(shù)據(jù),左移8-bit后加給AccAADD*+,8,A,AR4;數(shù)據(jù)左移,加給AccA后,當(dāng)前輔助寄存器加1,選擇輔助寄存器AR4尋址方式:間接尋址ADD*,8,A;將當(dāng)前輔助寄存器所指的19尋址方式:間接尋址ADD*0+,8,A;執(zhí)行加法后,將AR0的值加給當(dāng)前輔助寄存器ADD*BR0+,8,A;執(zhí)行加法后,將AR0的值加給當(dāng)前輔助寄存器,但反向進(jìn)位尋址方式:間接尋址ADD*0+,8,A;執(zhí)行加法后,將A20正向進(jìn)位與反向進(jìn)位正向進(jìn)位反向進(jìn)位100100+100+1001000010正向進(jìn)位與反向進(jìn)位正向進(jìn)位21位倒序?qū)ぶ稟R0=100AR1=000按AR1尋址后,將AR0加給AR1,反向進(jìn)位位倒序?qū)ぶ稟R0=10022位倒序?qū)ぶ吩蛟刂肺坏剐蚝蟮刂肺坏剐?000000010011004201001023011110641000011510110156110011371111117位倒序?qū)ぶ吩蛟刂肺坏剐蚝蟮刂?3例:.mmregs.bssx,4,1a0.word012ha1.word321ha2.wordfe11ha3.wordff03h.sect“program”LD#X,AR1LD#0,A,AR1LD#a0,TMAC*+,ALD#a1,TMAC*+,ALD#a2,TMAC*+,ALD#a3,TMAC*,A例:.mmregsMAC*+,A24循環(huán)尋址許多算法,如卷積,相關(guān)和FIR濾波等,都需要在存儲(chǔ)器中實(shí)現(xiàn)一個(gè)循環(huán)緩沖器。在這些算法中,一個(gè)循環(huán)緩沖器就是一個(gè)包換了最近的數(shù)據(jù)的滑動(dòng)窗口。當(dāng)新的數(shù)據(jù)來到時(shí),緩沖器就會(huì)覆蓋最早的數(shù)據(jù)。循環(huán)緩沖器實(shí)現(xiàn)的關(guān)鍵是循環(huán)尋址的實(shí)現(xiàn)。C54x間接尋址中提供了循環(huán)尋址方式,以%表示。循環(huán)尋址許多算法,如卷積,相關(guān)和FIR濾波等,都需要在存儲(chǔ)器25循環(huán)尋址循環(huán)緩沖區(qū)的參數(shù)主要包括:長(zhǎng)度寄存器(BK)、有效基地址(EFB)、尾地址(EOB)。其中,BK定義可循環(huán)緩沖區(qū)的大小R。要求緩沖區(qū)地址始于最低N位為零的地址,且R值滿足2N>R,R值必須要放入BK。例如,一個(gè)長(zhǎng)度為R=31的循環(huán)緩沖區(qū)必須開始于最低5位為零的地址(即XXXXXXXXXXX00000B),且必須將R值加載到BK寄存器中。循環(huán)尋址循環(huán)緩沖區(qū)的參數(shù)主要包括:長(zhǎng)度寄存器(BK)、有效基26循環(huán)尋址循環(huán)緩沖區(qū)的有效基地址(EFB)定義了緩沖區(qū)的起始地址,也就是輔助寄存器(ARx)低N位設(shè)為0后的值。循環(huán)緩沖區(qū)的尾地址(EOB)定義了緩沖區(qū)的底部地址,它通過用BK的低N位代替ARx的低N位得到。循環(huán)緩沖區(qū)的指示index就是當(dāng)前ARx的低N位,步長(zhǎng)step就是一次加到輔助寄存器或從輔助寄存器中減去的值。循環(huán)尋址循環(huán)緩沖區(qū)的有效基地址(EFB)定義了緩沖區(qū)的起始地27循環(huán)尋址循環(huán)尋址的算法為:If0≤index+step<BKindex=index+stepElseifindex+step≥BKindex=index+step-BKElseifindex+step<0index=index+step+BK循環(huán)尋址循環(huán)尋址的算法為:28循環(huán)尋址使用循環(huán)尋址時(shí),必須遵循以下三個(gè)原則:(1)循環(huán)緩沖區(qū)的長(zhǎng)度R小于2N,且地址從一個(gè)低N位為0的地址開始;(2)步長(zhǎng)小于或等于循環(huán)緩沖區(qū)的長(zhǎng)度;(3)所使用的輔助寄存器必須指向緩沖區(qū)單元。位反轉(zhuǎn)尋址主要用于FFT算法中,這種尋址方式可以大大提高程序的執(zhí)行速度和存儲(chǔ)器的利用效率。使用時(shí),AR0存放的整數(shù)值為FFT點(diǎn)數(shù)的一半,另一個(gè)輔助ARx指向存放數(shù)據(jù)的單元。位反轉(zhuǎn)尋址將AR0加到輔助寄存器中,地址以位反轉(zhuǎn)方式產(chǎn)生。也就是說,兩者相加時(shí),進(jìn)位是從左向右反向傳播的,而不是通過加法中的從右向左傳播的。循環(huán)尋址使用循環(huán)尋址時(shí),必須遵循以下三個(gè)原則:29匯編程序語法TMS320的匯編程序包括匯編指令(偽指令:assembledirectives)、匯編語言指令(assemblylanguageinstructions)、宏指令(macrodirectives)和注釋(comments)。匯編程序語法TMS320的匯編程序包括匯編指令(偽指令:as30C54的指令既可以是助記符方式,也可以是代數(shù)方式C54的指令既可以是助記符方式,也可以是代數(shù)方式31助記符方式匯編程序語法[label][:]mnemonic[operandlist][;comment][標(biāo)號(hào)][:]助記符[操作數(shù)][;注釋]所有語句必須由語句標(biāo)號(hào)、空格、“*”號(hào)或“;”號(hào)開頭。后兩種表示都是注釋,后面的語句是不執(zhí)行的,“;”可以出現(xiàn)在該語句行中的任何位置,表示后面的是注釋;“*”只能出現(xiàn)在第一列,表示該行全是注釋。語句標(biāo)號(hào)不是必須的,如果用,就必須在第一列。語句中的各部分之間,由一個(gè)或多個(gè)空格分開。注釋不是必須的。注釋可以從第一列的“*”號(hào)或“;”號(hào)開頭;如果不是從第一列開始的,就必須用“;”開頭。助記符方式匯編程序語法[label][:]mnemonic32語句標(biāo)號(hào)由字母、數(shù)字、_、$組成,最多不能超過32個(gè)字符,對(duì)大小寫敏感,第一個(gè)字符不能是數(shù)字。后跟“:”,但分號(hào)不是語句標(biāo)號(hào)的組成部分。語句標(biāo)號(hào)由字母、數(shù)字、_、$組成,最多不能超過32個(gè)字符,對(duì)33助記符助記符不允許從第一列開始,否則被認(rèn)為是語句標(biāo)號(hào)。助記符可以是機(jī)器指令(如ABS,MPYU,SPH等)、偽指令(如.data,.list,.set等)、宏指令(如.macro,.var,.mexit等)和宏調(diào)用。助記符助記符不允許從第一列開始,否則被認(rèn)為是語句標(biāo)號(hào)。34操作數(shù)操作數(shù)可以是常數(shù)、符號(hào)或表達(dá)式。當(dāng)操作數(shù)多于一個(gè)時(shí),用逗號(hào)區(qū)分開。常數(shù)二進(jìn)制數(shù)(如01B或01b)八進(jìn)制數(shù)(如10Q或10q)十進(jìn)制數(shù)(如23)十六進(jìn)制數(shù)(如78H或78h)字符常數(shù)(如`A`或`b`)字符串(如“sampleprogram”)匯編時(shí)使用的常數(shù)操作數(shù)操作數(shù)可以是常數(shù)、符號(hào)或表達(dá)式。當(dāng)操作數(shù)多于一個(gè)時(shí),用35表達(dá)式表達(dá)式是一個(gè)常數(shù)、符號(hào)、或用算術(shù)運(yùn)算符連接起來的常數(shù)或符號(hào),表達(dá)式的范圍為-32768~32767.表達(dá)式表達(dá)式是一個(gè)常數(shù)、符號(hào)、或用算術(shù)運(yùn)算符連接起來的常數(shù)或36指令集符號(hào)指令集符號(hào)37續(xù)表續(xù)表38續(xù)表續(xù)表39續(xù)表續(xù)表40指令TMS320C54x指令集有近200條指令,按功能分為如下幾類:算術(shù)運(yùn)算類指令邏輯運(yùn)算類指令程序控制類指令裝入和存儲(chǔ)指令指令TMS320C54x指令集有近200條指令,按功能分為如41算術(shù)運(yùn)算指令加法指令減法指令乘法指令乘加指令乘減指令雙數(shù)/雙精度指令特殊操作指令算術(shù)運(yùn)算指令加法指令42加法指令加法指令43減法指令減法指令44乘法指令乘法指令45乘加和乘減指令乘加和乘減指令46乘加(TMS320C50)MACdma,pma;程序存儲(chǔ)器的值乘以數(shù)據(jù)存儲(chǔ)器的值并累加到Acc(Acc)+(shiftedPregister)→Acc(dma)→TREG(dma)×(pma,addressedbyFPC)→PregisterModifyAR(ARP)andARPasspecified(FPC)+1→FPC乘加(TMS320C50)MACdma,pma;程序存儲(chǔ)47MACX0,Y0,AX(R0)+,X0Y:(R4)+N4,Y0這條指令命令DSP56300將寄存器X0和Y0中的數(shù)相乘結(jié)果加到AccA中將寄存器R0所指的X寄存器地址中的值裝入寄存器X0將寄存器R4所指的Y寄存器地址中的值裝入寄存器Y0R0的值加1寄存器N4的值加給R4MACX0,Y0,AX(R0)+,X0Y:(R4)+N48邏輯運(yùn)算指令邏輯運(yùn)算指令49移位指令移位指令50測(cè)試指令測(cè)試指令51程序控制指令分支指令調(diào)用指令中斷指令返回指令循環(huán)指令堆棧操作指令混合程序控制指令程序控制指令分支指令52轉(zhuǎn)移指令轉(zhuǎn)移指令53調(diào)用指令調(diào)用指令54中斷指令中斷指令55返回指令返回指令56循環(huán)指令循環(huán)指令57堆棧操作指令堆棧操作指令58程序控制指令程序控制指令59裝入和存儲(chǔ)指令一般的裝入和存儲(chǔ)指令條件存儲(chǔ)指令并行裝入和存儲(chǔ)指令并行裝入和乘法指令并行裝入和加減乘指令混合裝入和存儲(chǔ)指令裝入和存儲(chǔ)指令一般的裝入和存儲(chǔ)指令60一般的裝入指令一般的裝入指令61存儲(chǔ)指令存儲(chǔ)指令62并行裝入和乘法指令并行裝入和乘法指令63混合裝入和存儲(chǔ)指令混合裝入和存儲(chǔ)指令64FIRS指令FIRS指令用于線性相位濾波器的處理。一個(gè)如右圖的8階線性相位濾波器的輸出表達(dá)式FIRS指令FIRS指令用于線性相位濾波器的處理。一個(gè)如右圖65FIRS*AR2+,*AR3+,COEFFSy=(c0*x0)+(c1*x1)+(c2*x2)+…+(c6*x6)+(c7*x7)=c0(x0+x7)+c1(x1+x6)+c2(x2+x5)+c3(x3+x4)FIRS*AR2+,*AR3+,COEFFSy=66維特比(Viterbi)譯碼DADST、DSADT、CMPS在信道均衡和解碼中經(jīng)常會(huì)使用到Viterbi算法,C54x為此提供了專門的硬件和指令。根據(jù)輸入信號(hào)確定分支似然概率增加量D1/D2,放在T寄存器中,TRN存儲(chǔ)器可能信號(hào)譯碼輸出。維特比(Viterbi)譯碼DADST、DSADT、CMPS67維特比(Viterbi)譯碼維特比(Viterbi)譯碼68最小均方運(yùn)算LMS在進(jìn)行自適應(yīng)濾波等操作中經(jīng)常會(huì)使用LMS算法,C54x提供的LMS指令方便了編程。如下圖所示的自適應(yīng)濾波器設(shè)計(jì)中,濾波器系數(shù)修正公式為:wk(i+1)=wk(i)+2βe(i)x(i)最小均方運(yùn)算LMS在進(jìn)行自適應(yīng)濾波等操作中經(jīng)常會(huì)使用LMS算69最小均方運(yùn)算LMS最小均方運(yùn)算LMS70基于LMS的自適應(yīng)濾波程序STM#-2,BRC;initializetheBlockrepeatcounterwithMMR LD ERROR,T;initializeavariablecalledERRORto0 RPTBD END_LOOP-1;establishlastlineofloopMPY *AR4,A ;delayslotinstructionthatinitializes ;accumulatorALMS *AR3,*AR4+0%;2nddelayslotinstruction ;loopstartshereST A,*AR3+;savefiltercoefficient||MPY *AR3,A;newteamcalculatedLMS *AR3,*AR4+0%;LMSinstructionforadaptivefilter ;A=a+*AR3<<16+2^15 ;B=B+*AR3X*AR4END_LOOP;基于LMS的自適應(yīng)濾波程序STM#-2,BRC71數(shù)據(jù)歸一化相關(guān)指令EXP、NORM歸一化一個(gè)數(shù)是先求其指數(shù),然后把它調(diào)整到最大精度格式。實(shí)現(xiàn)方法如下:數(shù)據(jù)歸一化相關(guān)指令EXP、NORM歸一化一個(gè)數(shù)是先求其指數(shù),72數(shù)據(jù)塊移動(dòng)MVDD、MVDP、MVPD在C54x系列DSP中,數(shù)據(jù)與數(shù)據(jù)存儲(chǔ)器、數(shù)據(jù)與程序存儲(chǔ)器之間可以方便的進(jìn)行數(shù)據(jù)傳輸,結(jié)合單指令循環(huán)可實(shí)現(xiàn)數(shù)據(jù)塊移動(dòng)。如16個(gè)系數(shù)的移動(dòng):數(shù)據(jù)塊移動(dòng)MVDD、MVDP、MVPD在C54x系列DSP中73數(shù)據(jù)塊移動(dòng)MVDD、MVDP、MVPD數(shù)據(jù)塊移動(dòng)MVDD、MVDP、MVPD74并行指令STA,*AR4-||MAC*AR5+,B累加器A中的高位數(shù)按原定的位數(shù)移動(dòng)后,存入AR4指定的存儲(chǔ)單元,AR4中的地址減1;AR5制定的存儲(chǔ)器單元中的數(shù)與T寄存器中的數(shù)相乘,其積加到累加器B中,AR5中的地址加1.并行指令STA,*AR4-75偽指令(AssemblerDirectives)偽指令為程序提供數(shù)據(jù),控制匯編過程。所做的工作包括:將代碼和數(shù)據(jù)匯編到指定的位置。在存儲(chǔ)器中為未初始化的變量保留存儲(chǔ)空間。控制列表方式初始化存儲(chǔ)器匯編條件塊定義全局變量為匯編器制定可以獲得宏的庫檢查符號(hào)調(diào)試信息偽指令(AssemblerDirectives)偽指令為程76段定義偽指令.bss在該段中保留若干字.data匯編已初始化的數(shù)據(jù)段.sect“sectionname”匯編入已命名的段.text匯編入可執(zhí)行的代碼段段定義偽指令.bss在該段中保留若干77初始化常數(shù)偽指令.float初始化一個(gè)32-bit的浮點(diǎn)常數(shù).int初始化一個(gè)或多個(gè)16-bit的整數(shù).string初始化一個(gè)或多個(gè)字符串.word初始化一個(gè)或多個(gè)16-bit的整數(shù)初始化常數(shù)偽指令.float初始化一個(gè)32-b78格式化輸出列表的偽指令.list開始源文件列表.nolist停止源文件列表.length設(shè)置源文件列表的頁長(zhǎng)度.title在列表文件每一頁打印文件名格式化輸出列表的偽指令.list開始源文件列表79引用其他文件的偽指令.copy/.include包含其他文件的源語句.global確認(rèn)一個(gè)或多個(gè)全局(外部)符號(hào).mlib定義宏庫引用其他文件的偽指令.copy/.include包含其80條件匯編偽指令.if/.else/.endif條件匯編代碼塊.loop/.endloop循環(huán)匯編代碼塊.break終止循環(huán)匯編代碼塊條件匯編偽指令.if/.else/.endif81匯編時(shí)的符號(hào).equ/.set使一個(gè)符號(hào)等于一個(gè)值.end結(jié)束程序匯編時(shí)的符號(hào).equ/.set使一個(gè)符號(hào)等于一個(gè)82宏語言Macro:Auser-definedroutinethatcanbeusedasaninstruction.匯編器支持宏語言,使用戶可以建立自己的“指令”。當(dāng)程序要將特定的任務(wù)執(zhí)行若干次時(shí),尤其有用。宏語言Macro:Auser-definedrouti83宏語言可以使用戶:定義自己的宏,或重新定義正在執(zhí)行的宏簡(jiǎn)化長(zhǎng)的或復(fù)雜的匯編代碼訪問由歸檔器建立的宏庫在一個(gè)宏內(nèi)定義條件塊和可重復(fù)的塊在一個(gè)宏內(nèi)操作字符串控制展開列表宏語言可以使用戶:定義自己的宏,或重新定義正在執(zhí)行的宏84定義宏在程序中使用宏之前,首先必須定義它??梢酝ㄟ^兩種方式來定義:(1)在源文件或.include/.copy文件中定義;(2)在宏庫中定義定義宏在程序中使用宏之前,首先必須定義它??梢酝ㄟ^兩種方式來85定義宏macname.macro[parameter]modelstatements[.mexit].endm

macname宏的名字 .macro是一個(gè)偽指令,確認(rèn)源語句為宏定義的第一行 [parameters]選項(xiàng),作為.macro偽指令的操作數(shù) modelstatements每次調(diào)用宏時(shí)執(zhí)行的指令或偽指令 .endm終止宏定義宏macname.macro[parame86定義宏舉例*add3p1,p2,p3*p3=p1+p2+p3add3.macrop1,p2,p3ld p1,aadd p2,aAdd p3,astl a,p3.endm 定義宏舉例*add3p1,p2,p387調(diào)用宏在源程序中用宏的名字作為操作碼來調(diào)用宏add3x,y,z調(diào)用宏在源程序中用宏的名字作為操作碼來調(diào)用宏88展開宏在源程序調(diào)用宏時(shí),匯編器將其展開。在展開時(shí),匯編器將變量傳遞給宏參數(shù),用宏定義取代宏調(diào)用語句,然后匯編其源代碼。在缺省情況下,宏展開打印在列表文件中??梢杂脗沃噶?mnolist來停止其展開的列表。展開宏在源程序調(diào)用宏時(shí),匯編器將其展開。在展開時(shí),匯編器將變89展開宏00002000ldx,a00010001addy,a00010002addz,a00036200stla,z*Reservespaceforvars0000.bssx,10001.bssy,10002.bssz,1展開宏00002000ldx,a90宏庫定義宏的一種方法是建立一個(gè)宏庫。宏庫是包含有宏定義的文件的集合。必須使用歸檔器來把這些文件收集到一個(gè)文件中。宏庫中的每一個(gè)成員都包含一個(gè)宏定義。該文件必須是未匯編的源文件,宏名字和文件名必須相同,且宏文件名的擴(kuò)展名必須是.asm。宏庫定義宏的一種方法是建立一個(gè)宏庫。宏庫是包含有宏定義的文件91訪問宏庫用偽指令.mlib來訪問宏庫,其語法為:.mlibmacrolibraryfilename當(dāng)匯編器識(shí)別到該偽指令時(shí),就打開該宏庫,并建立該宏庫內(nèi)容的表。訪問宏庫用偽指令.mlib來訪問宏庫,其語法為:9266、節(jié)制使快樂增加并使享受加強(qiáng)?!轮兛死?/p>

67、今天應(yīng)做的事沒有做,明天再早也是耽誤了?!崴固┞妪R

68、決定一個(gè)人的一生,以及整個(gè)命運(yùn)的,只是一瞬之間。——歌德

69、懶人無法享受休息之樂?!伎?/p>

70、浪費(fèi)時(shí)間是一樁大罪過。——盧梭66、節(jié)制使快樂增加并使享受加強(qiáng)?!轮兛死?3DSP技術(shù)9(軟件結(jié)構(gòu))DSP技術(shù)9(軟件結(jié)構(gòu))DSP技術(shù)9(軟件結(jié)構(gòu))DSP的軟件結(jié)構(gòu)TMS320C54X的軟件結(jié)構(gòu)尋址方式:立即數(shù)尋址短立即數(shù)尋址(單字指令)在指令字中包括立即操作數(shù)RPT#99;將下一條指令循環(huán)100次LD#0h,DP;將0裝入數(shù)據(jù)頁指針ADD#0ffh,A;將0ffh加到AccADSP技術(shù)9(軟件結(jié)構(gòu))DSP技術(shù)9(軟件結(jié)構(gòu))DSP技術(shù)994DSP技術(shù)9(軟件結(jié)構(gòu))課件95DSP技術(shù)9(軟件結(jié)構(gòu))課件96DSP技術(shù)9(軟件結(jié)構(gòu))課件97DSP技術(shù)9(軟件結(jié)構(gòu))課件98絕對(duì)地址尋址數(shù)據(jù)存儲(chǔ)器(dmad)尋址用一個(gè)符號(hào)或一個(gè)數(shù)來確定數(shù)據(jù)空間中的一個(gè)地址例:MVKDsample,*AR5sample所代表的就是一個(gè)dmad絕對(duì)地址尋址數(shù)據(jù)存儲(chǔ)器(dmad)尋址99絕對(duì)地址尋址程序存儲(chǔ)器地址(pmad)尋址用一個(gè)符號(hào)或一個(gè)數(shù)來確定程序地址空間中的一個(gè)地址例:MVKDtable,*AR5table所代表的就是一個(gè)pmad絕對(duì)地址尋址程序存儲(chǔ)器地址(pmad)尋址100絕對(duì)地址尋址端口地址(PA)尋址用一個(gè)符號(hào)或常數(shù)來確定I/O口地址PORTRPA,SmemPORTWSmem,PA絕對(duì)地址尋址端口地址(PA)尋址101絕對(duì)地址尋址*(lk)尋址用一個(gè)符號(hào)或一個(gè)常數(shù)來確定數(shù)據(jù)存儲(chǔ)器中的一個(gè)地址例:LD*(BUFFER),A把地址為BUFFER的數(shù)據(jù)單元中的數(shù)據(jù)裝到AccA中絕對(duì)地址尋址*(lk)尋址102累加器尋址用累加器中的數(shù)作為一個(gè)地址,可用來對(duì)存放數(shù)據(jù)的程序存儲(chǔ)器尋址:READASmemWRITASmemREADA,把累加器A所確定的程序存儲(chǔ)器單元中的一個(gè)字,傳送到數(shù)據(jù)存儲(chǔ)器單元Smem中。WRITA,把數(shù)據(jù)單元Smem中的一個(gè)字,傳送到累加器A確定的程序存儲(chǔ)器單元。累加器尋址用累加器中的數(shù)作為一個(gè)地址,可用來對(duì)存放數(shù)據(jù)的程序103存儲(chǔ)器映射寄存器(MMR)尋址存儲(chǔ)器映射寄存器尋址用來修改存儲(chǔ)器映射寄存器而不影響當(dāng)前數(shù)據(jù)頁指針(DP)或堆棧指針(SP)的值。存儲(chǔ)器映射寄存器尋址既可以在直接尋址中使用,又可以在間接尋址中使用。存儲(chǔ)器映射寄存器(MMR)尋址存儲(chǔ)器映射寄存器尋址用來修改存104堆棧尋址系統(tǒng)堆棧用來在中斷和子程序期間自動(dòng)存放程序計(jì)數(shù)器,它也能用來存放額外的數(shù)據(jù)項(xiàng)或傳送數(shù)據(jù)值。處理器使用一個(gè)16-bit的存儲(chǔ)器映射寄存器——堆棧指針來對(duì)堆棧尋址,他總是指向存放在堆棧中的最后一個(gè)元素。堆棧尋址系統(tǒng)堆棧用來在中斷和子程序期間自動(dòng)存放程序計(jì)數(shù)器,它105尋址方式:直接尋址TMS320C54x的數(shù)據(jù)存儲(chǔ)器分為512頁,每頁128字,設(shè)置一個(gè)數(shù)據(jù)頁指針DP(dataPointer),用9-bit指向一個(gè)數(shù)據(jù)頁,再加上一個(gè)7-bit的頁內(nèi)偏移地址,形成16-bit的數(shù)據(jù)地址LD#4,DP;指向頁4(0200h-027fh)ADD9h,A;將數(shù)據(jù)頁4中的地址9h的數(shù)據(jù)加給AccA尋址方式:直接尋址TMS320C54x的數(shù)據(jù)存儲(chǔ)器分為512106尋址方式:直接尋址尋址方式:直接尋址107尋址方式:間接尋址8個(gè)輔助寄存器(AR0-AR7),由一個(gè)輔助寄存器指針(ARP3-bit)來指定輔助寄存器算術(shù)單元(ARAU)做16-bit無符號(hào)數(shù)運(yùn)算,決定一個(gè)新的地址,裝入輔助寄存器中的一個(gè)AR0-AR7的內(nèi)容相當(dāng)靈活,可以裝入立即數(shù),加上立即數(shù),減去立即數(shù);也可以從數(shù)據(jù)存儲(chǔ)器裝入地址;還可以作以下變址尋址:尋址方式:間接尋址8個(gè)輔助寄存器(AR0-AR7),由一個(gè)輔108尋址方式:間接尋址尋址方式:間接尋址109尋址方式:間接尋址尋址方式:間接尋址110尋址方式:間接尋址將該AR的內(nèi)容加1或減1,再尋址(循環(huán)常用)將該AR的內(nèi)容加上或減去AR0的內(nèi)容,再尋址。將該AR的內(nèi)容逆向進(jìn)位加上或減去AR0的的內(nèi)容,再尋址。尋址方式:間接尋址將該AR的內(nèi)容加1或減1,再尋址(循環(huán)常用111尋址方式:間接尋址ADD*,8,A;將當(dāng)前輔助寄存器所指的地址里的數(shù)據(jù),左移8-bit后加給AccAADD*+,8,A,AR4;數(shù)據(jù)左移,加給AccA后,當(dāng)前輔助寄存器加1,選擇輔助寄存器AR4尋址方式:間接尋址ADD*,8,A;將當(dāng)前輔助寄存器所指的112尋址方式:間接尋址ADD*0+,8,A;執(zhí)行加法后,將AR0的值加給當(dāng)前輔助寄存器ADD*BR0+,8,A;執(zhí)行加法后,將AR0的值加給當(dāng)前輔助寄存器,但反向進(jìn)位尋址方式:間接尋址ADD*0+,8,A;執(zhí)行加法后,將A113正向進(jìn)位與反向進(jìn)位正向進(jìn)位反向進(jìn)位100100+100+1001000010正向進(jìn)位與反向進(jìn)位正向進(jìn)位114位倒序?qū)ぶ稟R0=100AR1=000按AR1尋址后,將AR0加給AR1,反向進(jìn)位位倒序?qū)ぶ稟R0=100115位倒序?qū)ぶ吩蛟刂肺坏剐蚝蟮刂肺坏剐?000000010011004201001023011110641000011510110156110011371111117位倒序?qū)ぶ吩蛟刂肺坏剐蚝蟮刂?16例:.mmregs.bssx,4,1a0.word012ha1.word321ha2.wordfe11ha3.wordff03h.sect“program”LD#X,AR1LD#0,A,AR1LD#a0,TMAC*+,ALD#a1,TMAC*+,ALD#a2,TMAC*+,ALD#a3,TMAC*,A例:.mmregsMAC*+,A117循環(huán)尋址許多算法,如卷積,相關(guān)和FIR濾波等,都需要在存儲(chǔ)器中實(shí)現(xiàn)一個(gè)循環(huán)緩沖器。在這些算法中,一個(gè)循環(huán)緩沖器就是一個(gè)包換了最近的數(shù)據(jù)的滑動(dòng)窗口。當(dāng)新的數(shù)據(jù)來到時(shí),緩沖器就會(huì)覆蓋最早的數(shù)據(jù)。循環(huán)緩沖器實(shí)現(xiàn)的關(guān)鍵是循環(huán)尋址的實(shí)現(xiàn)。C54x間接尋址中提供了循環(huán)尋址方式,以%表示。循環(huán)尋址許多算法,如卷積,相關(guān)和FIR濾波等,都需要在存儲(chǔ)器118循環(huán)尋址循環(huán)緩沖區(qū)的參數(shù)主要包括:長(zhǎng)度寄存器(BK)、有效基地址(EFB)、尾地址(EOB)。其中,BK定義可循環(huán)緩沖區(qū)的大小R。要求緩沖區(qū)地址始于最低N位為零的地址,且R值滿足2N>R,R值必須要放入BK。例如,一個(gè)長(zhǎng)度為R=31的循環(huán)緩沖區(qū)必須開始于最低5位為零的地址(即XXXXXXXXXXX00000B),且必須將R值加載到BK寄存器中。循環(huán)尋址循環(huán)緩沖區(qū)的參數(shù)主要包括:長(zhǎng)度寄存器(BK)、有效基119循環(huán)尋址循環(huán)緩沖區(qū)的有效基地址(EFB)定義了緩沖區(qū)的起始地址,也就是輔助寄存器(ARx)低N位設(shè)為0后的值。循環(huán)緩沖區(qū)的尾地址(EOB)定義了緩沖區(qū)的底部地址,它通過用BK的低N位代替ARx的低N位得到。循環(huán)緩沖區(qū)的指示index就是當(dāng)前ARx的低N位,步長(zhǎng)step就是一次加到輔助寄存器或從輔助寄存器中減去的值。循環(huán)尋址循環(huán)緩沖區(qū)的有效基地址(EFB)定義了緩沖區(qū)的起始地120循環(huán)尋址循環(huán)尋址的算法為:If0≤index+step<BKindex=index+stepElseifindex+step≥BKindex=index+step-BKElseifindex+step<0index=index+step+BK循環(huán)尋址循環(huán)尋址的算法為:121循環(huán)尋址使用循環(huán)尋址時(shí),必須遵循以下三個(gè)原則:(1)循環(huán)緩沖區(qū)的長(zhǎng)度R小于2N,且地址從一個(gè)低N位為0的地址開始;(2)步長(zhǎng)小于或等于循環(huán)緩沖區(qū)的長(zhǎng)度;(3)所使用的輔助寄存器必須指向緩沖區(qū)單元。位反轉(zhuǎn)尋址主要用于FFT算法中,這種尋址方式可以大大提高程序的執(zhí)行速度和存儲(chǔ)器的利用效率。使用時(shí),AR0存放的整數(shù)值為FFT點(diǎn)數(shù)的一半,另一個(gè)輔助ARx指向存放數(shù)據(jù)的單元。位反轉(zhuǎn)尋址將AR0加到輔助寄存器中,地址以位反轉(zhuǎn)方式產(chǎn)生。也就是說,兩者相加時(shí),進(jìn)位是從左向右反向傳播的,而不是通過加法中的從右向左傳播的。循環(huán)尋址使用循環(huán)尋址時(shí),必須遵循以下三個(gè)原則:122匯編程序語法TMS320的匯編程序包括匯編指令(偽指令:assembledirectives)、匯編語言指令(assemblylanguageinstructions)、宏指令(macrodirectives)和注釋(comments)。匯編程序語法TMS320的匯編程序包括匯編指令(偽指令:as123C54的指令既可以是助記符方式,也可以是代數(shù)方式C54的指令既可以是助記符方式,也可以是代數(shù)方式124助記符方式匯編程序語法[label][:]mnemonic[operandlist][;comment][標(biāo)號(hào)][:]助記符[操作數(shù)][;注釋]所有語句必須由語句標(biāo)號(hào)、空格、“*”號(hào)或“;”號(hào)開頭。后兩種表示都是注釋,后面的語句是不執(zhí)行的,“;”可以出現(xiàn)在該語句行中的任何位置,表示后面的是注釋;“*”只能出現(xiàn)在第一列,表示該行全是注釋。語句標(biāo)號(hào)不是必須的,如果用,就必須在第一列。語句中的各部分之間,由一個(gè)或多個(gè)空格分開。注釋不是必須的。注釋可以從第一列的“*”號(hào)或“;”號(hào)開頭;如果不是從第一列開始的,就必須用“;”開頭。助記符方式匯編程序語法[label][:]mnemonic125語句標(biāo)號(hào)由字母、數(shù)字、_、$組成,最多不能超過32個(gè)字符,對(duì)大小寫敏感,第一個(gè)字符不能是數(shù)字。后跟“:”,但分號(hào)不是語句標(biāo)號(hào)的組成部分。語句標(biāo)號(hào)由字母、數(shù)字、_、$組成,最多不能超過32個(gè)字符,對(duì)126助記符助記符不允許從第一列開始,否則被認(rèn)為是語句標(biāo)號(hào)。助記符可以是機(jī)器指令(如ABS,MPYU,SPH等)、偽指令(如.data,.list,.set等)、宏指令(如.macro,.var,.mexit等)和宏調(diào)用。助記符助記符不允許從第一列開始,否則被認(rèn)為是語句標(biāo)號(hào)。127操作數(shù)操作數(shù)可以是常數(shù)、符號(hào)或表達(dá)式。當(dāng)操作數(shù)多于一個(gè)時(shí),用逗號(hào)區(qū)分開。常數(shù)二進(jìn)制數(shù)(如01B或01b)八進(jìn)制數(shù)(如10Q或10q)十進(jìn)制數(shù)(如23)十六進(jìn)制數(shù)(如78H或78h)字符常數(shù)(如`A`或`b`)字符串(如“sampleprogram”)匯編時(shí)使用的常數(shù)操作數(shù)操作數(shù)可以是常數(shù)、符號(hào)或表達(dá)式。當(dāng)操作數(shù)多于一個(gè)時(shí),用128表達(dá)式表達(dá)式是一個(gè)常數(shù)、符號(hào)、或用算術(shù)運(yùn)算符連接起來的常數(shù)或符號(hào),表達(dá)式的范圍為-32768~32767.表達(dá)式表達(dá)式是一個(gè)常數(shù)、符號(hào)、或用算術(shù)運(yùn)算符連接起來的常數(shù)或129指令集符號(hào)指令集符號(hào)130續(xù)表續(xù)表131續(xù)表續(xù)表132續(xù)表續(xù)表133指令TMS320C54x指令集有近200條指令,按功能分為如下幾類:算術(shù)運(yùn)算類指令邏輯運(yùn)算類指令程序控制類指令裝入和存儲(chǔ)指令指令TMS320C54x指令集有近200條指令,按功能分為如134算術(shù)運(yùn)算指令加法指令減法指令乘法指令乘加指令乘減指令雙數(shù)/雙精度指令特殊操作指令算術(shù)運(yùn)算指令加法指令135加法指令加法指令136減法指令減法指令137乘法指令乘法指令138乘加和乘減指令乘加和乘減指令139乘加(TMS320C50)MACdma,pma;程序存儲(chǔ)器的值乘以數(shù)據(jù)存儲(chǔ)器的值并累加到Acc(Acc)+(shiftedPregister)→Acc(dma)→TREG(dma)×(pma,addressedbyFPC)→PregisterModifyAR(ARP)andARPasspecified(FPC)+1→FPC乘加(TMS320C50)MACdma,pma;程序存儲(chǔ)140MACX0,Y0,AX(R0)+,X0Y:(R4)+N4,Y0這條指令命令DSP56300將寄存器X0和Y0中的數(shù)相乘結(jié)果加到AccA中將寄存器R0所指的X寄存器地址中的值裝入寄存器X0將寄存器R4所指的Y寄存器地址中的值裝入寄存器Y0R0的值加1寄存器N4的值加給R4MACX0,Y0,AX(R0)+,X0Y:(R4)+N141邏輯運(yùn)算指令邏輯運(yùn)算指令142移位指令移位指令143測(cè)試指令測(cè)試指令144程序控制指令分支指令調(diào)用指令中斷指令返回指令循環(huán)指令堆棧操作指令混合程序控制指令程序控制指令分支指令145轉(zhuǎn)移指令轉(zhuǎn)移指令146調(diào)用指令調(diào)用指令147中斷指令中斷指令148返回指令返回指令149循環(huán)指令循環(huán)指令150堆棧操作指令堆棧操作指令151程序控制指令程序控制指令152裝入和存儲(chǔ)指令一般的裝入和存儲(chǔ)指令條件存儲(chǔ)指令并行裝入和存儲(chǔ)指令并行裝入和乘法指令并行裝入和加減乘指令混合裝入和存儲(chǔ)指令裝入和存儲(chǔ)指令一般的裝入和存儲(chǔ)指令153一般的裝入指令一般的裝入指令154存儲(chǔ)指令存儲(chǔ)指令155并行裝入和乘法指令并行裝入和乘法指令156混合裝入和存儲(chǔ)指令混合裝入和存儲(chǔ)指令157FIRS指令FIRS指令用于線性相位濾波器的處理。一個(gè)如右圖的8階線性相位濾波器的輸出表達(dá)式FIRS指令FIRS指令用于線性相位濾波器的處理。一個(gè)如右圖158FIRS*AR2+,*AR3+,COEFFSy=(c0*x0)+(c1*x1)+(c2*x2)+…+(c6*x6)+(c7*x7)=c0(x0+x7)+c1(x1+x6)+c2(x2+x5)+c3(x3+x4)FIRS*AR2+,*AR3+,COEFFSy=159維特比(Viterbi)譯碼DADST、DSADT、CMPS在信道均衡和解碼中經(jīng)常會(huì)使用到Viterbi算法,C54x為此提供了專門的硬件和指令。根據(jù)輸入信號(hào)確定分支似然概率增加量D1/D2,放在T寄存器中,TRN存儲(chǔ)器可能信號(hào)譯碼輸出。維特比(Viterbi)譯碼DADST、DSADT、CMPS160維特比(Viterbi)譯碼維特比(Viterbi)譯碼161最小均方運(yùn)算LMS在進(jìn)行自適應(yīng)濾波等操作中經(jīng)常會(huì)使用LMS算法,C54x提供的LMS指令方便了編程。如下圖所示的自適應(yīng)濾波器設(shè)計(jì)中,濾波器系數(shù)修正公式為:wk(i+1)=wk(i)+2βe(i)x(i)最小均方運(yùn)算LMS在進(jìn)行自適應(yīng)濾波等操作中經(jīng)常會(huì)使用LMS算162最小均方運(yùn)算LMS最小均方運(yùn)算LMS163基于LMS的自適應(yīng)濾波程序STM#-2,BRC;initializetheBlockrepeatcounterwithMMR LD ERROR,T;initializeavariablecalledERRORto0 RPTBD END_LOOP-1;establishlastlineofloopMPY *AR4,A ;delayslotinstructionthatinitializes ;accumulatorALMS *AR3,*AR4+0%;2nddelayslotinstruction ;loopstartshereST A,*AR3+;savefiltercoefficient||MPY *AR3,A;newteamcalculatedLMS *AR3,*AR4+0%;LMSinstructionforadaptivefilter ;A=a+*AR3<<16+2^15 ;B=B+*AR3X*AR4END_LOOP;基于LMS的自適應(yīng)濾波程序STM#-2,BRC164數(shù)據(jù)歸一化相關(guān)指令EXP、NORM歸一化一個(gè)數(shù)是先求其指數(shù),然后把它調(diào)整到最大精度格式。實(shí)現(xiàn)方法如下:數(shù)據(jù)歸一化相關(guān)指令EXP、NORM歸一化一個(gè)數(shù)是先求其指數(shù),165數(shù)據(jù)塊移動(dòng)MVDD、MVDP、MVPD在C54x系列DSP中,數(shù)據(jù)與數(shù)據(jù)存儲(chǔ)器、數(shù)據(jù)與程序存儲(chǔ)器之間可以方便的進(jìn)行數(shù)據(jù)傳輸,結(jié)合單指令循環(huán)可實(shí)現(xiàn)數(shù)據(jù)塊移動(dòng)。如16個(gè)系數(shù)的移動(dòng):數(shù)據(jù)塊移動(dòng)MVDD、MVDP、MVPD在C54x系列DSP中166數(shù)據(jù)塊移動(dòng)MVDD、MVDP、MVPD數(shù)據(jù)塊移動(dòng)MVDD、MVDP、MVPD167并行指令STA,*AR4-||MAC*AR5+,B累加器A中的高位數(shù)按原定的位數(shù)移動(dòng)后,存入AR4指定的存儲(chǔ)單元,AR4中的地址減1;AR5制定的存儲(chǔ)器單元中的數(shù)與T寄存器中的數(shù)相乘,其積加到累加器B中,AR5中的地址加1.并行指令STA,*AR4-168偽指令(AssemblerDirectives)偽指令為程序提供數(shù)據(jù),控制匯編過程。所做的工作包括:將代碼和數(shù)據(jù)匯編到指定的位置。在存儲(chǔ)器中為未初始化的變量保留存儲(chǔ)空間??刂屏斜矸绞匠跏蓟鎯?chǔ)器匯編條件塊定義全局變量為匯編器制定可以獲得宏的庫檢查符號(hào)調(diào)試信息偽指令(AssemblerDirectives)偽指令為程169段定義偽指令.bss在該段中保留若干字.data匯編已初始化的數(shù)據(jù)段.sect“sectionname”匯編入已命名的段.text匯編入可執(zhí)行的代碼段段定義偽指令.bss在該段中保留若干170初始化常數(shù)偽指令.float初始化一個(gè)32-bit的浮點(diǎn)常數(shù).int初始化一個(gè)或多個(gè)16-bit的整數(shù).string初始化一個(gè)或多個(gè)字符串.word初始化一個(gè)或多個(gè)16-bit的整數(shù)初始化常數(shù)偽指令.float初始化一個(gè)32-b171格式化輸出列表的偽指令.list開始源文件列表.nolist停止源文件列表.length設(shè)置源文

溫馨提示

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

評(píng)論

0/150

提交評(píng)論