下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、MSP430程序庫(kù)<十三>硬件乘法器使用硬件乘法器不占用CPU周期,有硬件實(shí)現(xiàn),速度比軟件實(shí)現(xiàn)的乘法速度快很多。msp430f14x、msp430f16x中都含有硬件乘法器模塊,方便用戶需要速度的時(shí)候使用。卜硬件介紹:在MSP430系列單片機(jī)中,硬件乘法器是外圍模塊,而不是CPU內(nèi)核的一部分;所以它的活動(dòng)與否與CPU的活動(dòng)與否無(wú)關(guān),它的寄存器和其他的外圍寄存器一樣通過(guò)CPU指令讀寫(xiě)。硬件乘法器模塊支持一下功能:無(wú)符號(hào)乘法、有符號(hào)乘法、無(wú)符號(hào)乘加、有符號(hào)乘加;可以支持16*1616*88*168*8bits的乘法。硬件乘法器的模塊框圖如下:硬件乘法器模塊白四種操作類(lèi)型(無(wú)符號(hào)乘法、有
2、符號(hào)乘法、無(wú)符號(hào)乘加、有符號(hào)乘加)是由寫(xiě)入的第一個(gè)操作數(shù)的位置決定的。這個(gè)模塊有兩個(gè)操作數(shù)寄存器:OP1和OP2、三個(gè)結(jié)果寄存器RESLO,RESHI,和SUMEXT。RESLO寄存器存儲(chǔ)結(jié)果的低字(低16位);RESHI寄存器存儲(chǔ)結(jié)果的高字(高16位);SUMEXT寄存器存儲(chǔ)結(jié)果的有關(guān)信息。結(jié)果在3個(gè)時(shí)鐘周期后即可完成;寫(xiě)入OP2后的下一條指令即可讀取結(jié)果,有一種情況例外:用間接尋址方式訪問(wèn)結(jié)果。用間接尋址方式訪問(wèn)結(jié)果時(shí),讀取結(jié)果之前需要有一條NOP指令。操作數(shù)OP1有四個(gè)地址(MPY:0130hMPYS:0132hMAC:0134hMACS:0136h),這四個(gè)寄存器用來(lái)選擇乘法的操作模式
3、。寫(xiě)入第一個(gè)操作數(shù)寄存器決定用哪種操作:無(wú)符號(hào)用符號(hào)等,但是不啟動(dòng)相乘操作;寫(xiě)入第二個(gè)操作數(shù)寄存器啟動(dòng)相乘的操作。計(jì)算完成后結(jié)果存入寄存器RESLO,RESHI,和SUMEXT。OP1AddressRegisterName0130hMPY0132hMPYS0134hMAC(無(wú)符號(hào)乘加)0136hMACS符號(hào)乘加)操作數(shù)1的四個(gè)地址對(duì)應(yīng)的操作:OperationUnsignedmultiply(無(wú)符號(hào)乘法)Signedmultiply(有符號(hào)乘法)UnsignedmultiplyaccumulateSignedmultiplyaccumulate(有四種操作模式下高位結(jié)果寄存器的內(nèi)容如下:Mod
4、eRESHIContentsMPYUpper16-bitsoftheresultMPYSTheMSBisthesignoftheresult.Theremainingisbitsaretheupper15-bitsoftheresult.Two'scomplementnotationusedfortheresult.MACUpper16-bitsoftheresultMACSUpper16-bitsoftheresult.Two'scomplementnotationisusedfortheresult.四種操作模式SUMEXT寄存器的內(nèi)容:ModeSUMEXTMPYSUMEX
5、Tisalways0000hMPYSSUMEXTcontainstheextendedsignoftheresult00000hResultwaspositiveorzero0FFFFhResultwasnegativeMACSUMEXTcontainsthecarryoftheresult0000hNocarryforresult0001hResulthasacarryMACSSUMEXTcontainstheextendedsignoftheresult00000hResultwaspositiveorzero0FFFFhResultwasnegative連續(xù)乘法運(yùn)算時(shí),如果操作數(shù)1不需改
6、變就可以運(yùn)算,則可以不需要重新寫(xiě)入和以保存內(nèi)容相同的數(shù);但OP2必須重新寫(xiě)入以啟動(dòng)乘法運(yùn)算。MACSUnderflowandOverflow(MACS時(shí)的上溢和下溢):硬件乘法器不檢測(cè)有符號(hào)乘加時(shí)運(yùn)算結(jié)果的上溢出和下溢出。結(jié)果的正數(shù)范圍:0到7FFFFFFFh;負(fù)數(shù)范圍:0FFFFFFFFh到80000000h。下溢出是兩個(gè)負(fù)數(shù)的和結(jié)果寄存器得到的是正數(shù),上溢出是兩個(gè)正數(shù)的和結(jié)果寄存器得到的是負(fù)數(shù)。SUMEXT寄存器存儲(chǔ)有結(jié)果的符號(hào),可以根據(jù)它判斷是否溢出(0000h負(fù)數(shù)和則上溢0FFFFh正數(shù)和則下溢)。使用時(shí)程序必須合適的檢測(cè)、處理MACS的溢出情況。程序示例(用戶指南上給出的匯編示例廣所
7、有乘數(shù)模式的例子如下。所有的8x8模式使用的寄存器的絕對(duì)地址,因?yàn)閰R編器將不允許B訪問(wèn)到字寄存器時(shí)使用標(biāo)準(zhǔn)定義的文件標(biāo)簽。;16x16UnsignedMultiplyMOV#01234h,&MPY;LoadfirstoperandMOV#05678h,&OP2;Loadsecondoperand;.;Processresults;8x8UnsignedMultiply.Absoluteaddressing.MOV.B#012h,&0130hMOV.B#034h,&0138h;.;Processresults;16x16SignedMultiplyMOV#0123
8、4h,&MPYSMOV#05678h,&OP2;.;Processresults;Loadfirstoperand;Load2ndoperand;Loadfirstoperand;Load2ndoperand;8x8SignedMultiply.Absoluteaddressing.MOV.B#012h,&0132h;LoadfirstoperandSXT&MPYS;SignextendfirstoperandMOV.B#034h,&0138h;Load2ndoperandSXT&OP2;Signextend2ndoperand;(trigger
9、s2ndmultiplication);.;Processresults;16x16UnsignedMultiplyAccumulateMOV#01234h,&MAC;LoadfirstoperandMOV#05678h,&OP2;Load2ndoperand;.;Processresults;8x8UnsignedMultiplyAccumulate.AbsoluteaddressingMOV.B#012h,&0134h;LoadfirstoperandMOV.B#034h,&0138h;Load2ndoperand;.;Processresults;16x1
10、6SignedMultiplyAccumulateMOV#01234h,&MACS;LoadfirstoperandMOV#05678h,&OP2;Load2ndoperand;.;Processresults;8x8SignedMultiplyAccumulate.AbsoluteaddressingMOV.B#012h,&0136h;LoadfirstoperandSXT&MACS;SignextendfirstoperandMOV.B#034h,R5;Temp.locationfor2ndoperandSXTR5;Signextend2ndoperandM
11、OVR5,&OP2;Load2ndoperand;.;Processresults上面的程序雖然和標(biāo)準(zhǔn)的匯編差異比較大,但是有一定匯編基礎(chǔ)的人還是很容易就能夠看懂。這里的程序給出了多種方式寫(xiě)入操作數(shù)寄存器。間接尋址結(jié)果寄存器時(shí),在寫(xiě)入OP2操作數(shù)啟動(dòng)乘法后,至少需要一個(gè)指令的延遲后才能訪問(wèn)結(jié)果寄存器RESLO等;直接尋址時(shí)可以寫(xiě)入OP2后,下一條指令即可讀取結(jié)果。示例程序(匯編):;AccessmultiplierresultswithindirectaddressingMOV#RESLO,R5;RESLOaddressinR5forindirectMOV&OPER1,&
12、;MPY;Load1stoperandMOV&OPER2,&OP2;Load2ndoperandNOP;Needonecycle寫(xiě)入兩個(gè)操作數(shù)乘法運(yùn)算開(kāi)始后需要一個(gè)NOPMOVR5+,&xxx;MoveRESLOMOVR5,&xxx;MoveRESHI如果在寫(xiě)入OP1和寫(xiě)入OP2之間產(chǎn)生了中斷,中斷響應(yīng)后,源操作數(shù)的計(jì)算模式丟失;運(yùn)算結(jié)果不確定。為了避免這種情況的發(fā)生,在寫(xiě)入操作數(shù)時(shí)禁止中斷或在中斷響應(yīng)函數(shù)中不使用硬件乘法器。如:;DisableinterruptsbeforeusingthehardwaremultiplierDINT;Disableinter
13、ruptsNOP;RequiredforDINTMOV#xxh,&MPY;Load1stoperandMOV#xxh,&OP2;Load2ndoperandEINT;Interruptsmaybeenablebefore;Processresults硬件部分就說(shuō)這么多了,有什么不大明白的可以參考用戶指南。卜使用示例:我的程序僅僅是用C語(yǔ)言演示硬件乘法器的使用。程序主要內(nèi)容如下:#include<msp430x16x.h>/* 名稱(chēng):main主程序* 功能:硬件乘法器程序庫(kù)使用演示* 入口參數(shù):無(wú)* 出口參數(shù):無(wú)*/voidmain(void)/Stopwatchdo
14、gtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;ClkInit();/*把硬件乘法器的寄存器放到watch窗口觀察是否變化inta=0;a=5*6;*/測(cè)試無(wú)符號(hào)乘法MPY=65535;OP2=2;/有符號(hào)乘法MPYS=65535;OP2=2;/無(wú)符號(hào)乘加MAC=65535;OP2=2;/有符號(hào)乘加MACS=65535;OP2=2;LPM0;)程序演示了4中乘法模式:使用時(shí)單步調(diào)試,觀察硬件乘法器的有關(guān)寄存器如:MPV5535MPYSS的35MAC65535MACSRESLO65534RESHI1SUMEXTa3/Stopwatchdogtime
15、rtopreventtioWDTCTL=WDTPW+WDTHOLD;/*/«硬件乘法器的寄存器放到Mtd窗口Sta=0;a=5*6;V/溯M無(wú)符號(hào)乘法硬件乘法器運(yùn)算速度很快,只需3個(gè)時(shí)鐘周期;這里IAR單步調(diào)試時(shí),OP2賦值結(jié)束,在watch窗口馬上就可以看到運(yùn)算結(jié)果。其他三種模式類(lèi)似。注釋掉的這部分是我用來(lái)檢測(cè)IAR編譯程序是否使用硬件乘法器進(jìn)行測(cè)試。默認(rèn)情況下,乘法應(yīng)該是用硬件乘法器運(yùn)算的。默認(rèn)的設(shè)置如下:硬件乘法器是選中的,這時(shí)應(yīng)該是使用硬件乘法器的,但是我的調(diào)試結(jié)果顯示它沒(méi)有使用硬件乘法器,截圖下:MPV65635MPYS66535MAC65535MACS6553sRESLO
16、£553。RESHI1SUMEXT013/StopwatchdogtimertopreventWTCTL=kDTPK+WDTHOLD;Clklnit();/«嗓件乘法器的寄存器放毒NQtch地口<inta=0;>5*6;/蒯試無(wú)符號(hào)乘法A。MPY';二九I運(yùn)行后乘法器相關(guān)位沒(méi)有對(duì)應(yīng)變化,如果使用的話,應(yīng)該變化。硬件乘法器不選中時(shí),寄存器也沒(méi)有相應(yīng)變化,從這看,IAR沒(méi)有使用硬件乘法器;也許程序沒(méi)有優(yōu)化太多或是debug版本不使用硬件乘法器。如果需要直接使用硬件乘法器,有必要時(shí)把設(shè)置的硬件乘法器去掉,以防沖突。下面是直接使用硬件乘法器的一個(gè)實(shí)例:#include"msp430x16x.hunsignedintResult7;unsignedcharData17;unsignedcharData27;voidmain(void)(unsignedchari;WDTCTL=WDTPW+WDTHOLD;/關(guān)看門(mén)狗for(i=0;i<7;i+)(Data1i=10*i;/對(duì)兩數(shù)組賦值Data2i=25*i;)for(i=0;i<7;i+)(MPY=Data1i;OP2=Data2i;_NOP();/延遲_NOP();_NOP();Resulti=RESLO;/保存結(jié)果,由于是8X8型,所以未用至ijRESHI;)這個(gè)程序用無(wú)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藝術(shù)院校師生互動(dòng)組織架構(gòu)方案
- 醫(yī)療行業(yè)代理傭金制度
- 包裝委托協(xié)議:2024年規(guī)范
- 房地產(chǎn)廣告制作項(xiàng)目實(shí)施方案
- 慈善晚宴高端活動(dòng)方案
- 2024年社會(huì)扶貧援助協(xié)議范本
- 2024年醫(yī)療器材銷(xiāo)售協(xié)議格式
- 2024年住宅租賃協(xié)議模板匯編
- 2024年新款車(chē)型長(zhǎng)期租賃協(xié)議樣本
- 2024年品牌家紡產(chǎn)品銷(xiāo)售協(xié)議
- 工程造價(jià)咨詢(xún)服務(wù)質(zhì)量承諾及保證措施
- 最新種植新病歷
- 化工設(shè)備機(jī)械基礎(chǔ)重點(diǎn)知識(shí)點(diǎn)
- 16種多環(huán)芳烴簡(jiǎn)介
- 餐飲鋪臺(tái)布技能鋪臺(tái)布教學(xué)課件
- 小學(xué)五年級(jí)上冊(cè)數(shù)學(xué)計(jì)算題
- 聚乙烯安全技術(shù)說(shuō)明書(shū)
- 03汽機(jī)系統(tǒng)拆除施工方案
- 年產(chǎn)1000噸淀粉酶生產(chǎn)工藝設(shè)計(jì)
- PPH術(shù)后摘除殘留釘減少肛內(nèi)墜脹性并發(fā)癥的臨床研究
- 公司SOP標(biāo)準(zhǔn)流程之采購(gòu)作業(yè)流程
評(píng)論
0/150
提交評(píng)論